14.1 数据表概述
仅限专业版
数据表是CSV文本文件,包含数据的行和列。它们的作用就像关系数据库中的表。第一行包含表中每个字段的名称。随后的每一行代表一个数据记录。
设计上的“数据”面板提供对存储在项目中的CSV文件的访问。它们必须位于特别命名的“ _Data”子文件夹中,并且不会出现在“项目”面板上。
右键单击上下文菜单和顶级“数据”菜单还有一个附加命令,用于从另一个位置导入CSV文件:
数据文件的使用方式
每个CSV文件代表一个数据表。这可以是简单的数据值列表,也可以是作为复杂关系数据库一部分的大量数据存储。本文假定您对数据库表有基本的了解,因此将不对其进行详细介绍。
对于数据库表,文件中的每一列代表一个命名的数据字段,用逗号分隔(因此CSV中为“ C”)。文件的第一行必须包含字段名称。随后的所有行均包含数据记录。
GUI Design Studio将所有数据变量和表字段名称都区分大小写,因此“名字”与“名字”或“名字”相同。
加载CSV文件后,它将成为内部数据表,其名称相同,但空格已删除。当前,每个数据表都是独立处理的,没有隐式的交叉引用或在表之间创建的关系。
内部数据表可以进行操作,活动记录数据可以通过特殊的交互变量进行访问。
14.2 创建和编辑数据文件
仅限专业版
菜单命令:
Data | New Data Table...
Data | Edit Data Table
Data | Import Data Table...
File | Preferences...
使用“数据”面板或“数据”菜单上的命令来创建和编辑CSV文件:
综合编辑器
默认情况下,创建新数据表或编辑现有数据表时,GUI Design Studio将打开其集成的CSV数据编辑器:
使用外部编辑器
如果愿意,可以使用外部程序来编辑CSV数据文件。只需选中“对CSV数据文件使用外部默认编辑器”的“文件|首选项...”选项:
在这种情况下,当您创建新数据表或编辑现有数据表时,GUI Design Studio会要求Windows使用计算机上的默认应用程序打开该文件。如果已安装,则通常为Microsoft Excel。电子表格程序是最好的,但是可以使用任何文本编辑器,例如记事本。
如果默认编辑器不合适,则您可能更喜欢在数据文件的右键单击上下文菜单中使用“在资源管理器中打开文件夹”命令,然后右键单击该文件,然后从上下文菜单中使用"Open with >"进行选择一个不同的程序。
使用任何外部程序添加表或对其进行编辑时,请使用“刷新”命令刷新表列表并重新加载文件。
导入数据
如果已有CSV文件,则可以使用“数据|导入数据文件...”菜单命令将其副本导入到项目中。
数据表内容
对于表示关系数据库中表的文件,第一行包含表中每个字段的名称。随后的每一行代表一个数据记录。
在典型的数据库应用程序中,每条记录必须至少包含一个具有唯一值的字段。通常,这是一个称为“ ID”的整数字段。 GUI Design Studio不需要这样做,但是值得为您创建的所有表进行考虑。
以下是“人员”数据表(在电子表格程序中进行编辑)的示例:
重要说明:Microsoft Excel因错误处理CSV文件而臭名昭著,其中文件的第一行以“ID”(大写)开头。在这种情况下,它将文件混淆为格式错误的SYLK文件,并在打开时产生错误。如果要将第一个字段用作唯一的ID字段,我们建议您改用小写的“id”,如上面的示例所示。
14.3 使用CSV数据编辑器
仅限专业版
当您创建新的CSV数据表或编辑现有的CSV数据表时,集成的编辑器将打开:
这具有创建和编辑数据文件所需的全部功能,包括完整的撤消/重做功能。如果您喜欢使用外部程序(例如Microsoft Excel),则可以按照创建和编辑数据文件中的说明更改首选项。
插入,删除和重命名字段
数据字段按列排列,每一行代表一个数据记录。要插入,删除或重命名字段,请右键单击字段标题行(或在编辑器中的任何位置),然后选择适当的菜单选项。
请注意,字段的顺序并不重要,但是传统上是使第一个字段成为每个记录的标识符(ID)。编辑器当前不允许字段重新排序。
记录ID字段
通常,数据库表中的每个记录都必须是唯一可识别的。尽管任何字段或字段组合都可能具有唯一值,但更常见的是为此添加和附加“ID”字段,其中为每个记录分配一个唯一编号,从1开始。
为了简化此过程,请右键单击“ID字段”列标题,然后从上下文菜单中选择“填充ID字段值”,以第一列中的1开始填充数字,并覆盖所有现有值。
如果错误地使用了此命令,只需使用“编辑|撤消”来还原以前的列值。
编辑记录
有许多用于编辑的键盘快捷键。右键单击编辑器的表输入区域,还将打开以下上下文菜单:
要编辑现有数据,请双击一个单元格以开始编辑,然后使用Tab,Shift + Tab或箭头键在单元格和行之间导航。在最后一条记录上按下向下箭头将在末尾留出空间容纳新记录。
您也可以按插入键在表格末尾插入新记录并开始编辑,或者按Alt + Insert在表格末尾添加新记录并开始编辑。
在编辑模式下,按Escape或Enter键将退出编辑模式并返回行选择模式。
要删除记录行,请单击一下选择它,然后按Delete键。
在行上使用剪切,复制和粘贴操作时,粘贴将插入新行。要覆盖数据,您需要在编辑模式下粘贴到单个单元格中。
保存和加载
使用常规的“文件|保存”菜单命令(Ctrl + S热键)将更改保存到数据文件。您也可以使用“文件|另存为...”保存到新文件。
菜单命令“文件|打开...”(Ctrl + O热键)也可以用于打开任何CSV数据文件进行编辑,无论它是否属于打开的项目。
14.4 访问数据记录
仅限专业版
创建或导入一些CSV数据表后,您可以
- 显示单个数据记录中的数据。
- 通过用户操作导航到数据表中的第一,最后,下一个和上一个记录。
- 通过索引导航到数据表的特定记录。
- 用表中的数据填充列表框元素。
- 用表格中的数据填充表格元素。
显示数据表记录的内容
每个数据表都有一个对应的交互变量,该变量使用表的名称分配给它,空格已删除并以“#”字符作为前缀。例如,使用上面的屏幕快照中的一些表,您可能具有:
#Actions
#People
#Projects
#Roles
等等
这些变量本身没有值,但是与许多元素变量一样,它们包含每个包含数据值的字段的子变量。当将它们称为变量时,应删除“字段名称”中的任何空格。例如:
#People.FirstName
#People.LastName
#People.Email
等等
还有两个特殊的子变量,其前缀为“$”,以避免与字段名称冲突:
.$count -保存表中的记录数(只读)
.$index -保留表的当前基于活动的从1开始的记录索引,或者为0表示没有记录(读写)
像其他变量一样使用这些变量,包括分配给元素并嵌入任何文本中。
图片
从4.4版开始,现在可以将Image和Icon元素分配给变量。对于图标,该值是项目中“_Icons”子文件夹中的图标文件的名称。对于图像,该值是从项目根目录到文件的相对路径。
因此,例如,您可以将图像分配给数据记录字段,例如:
#People.Photo
然后,当活动记录更改为显示数据记录中指定的图像时,该图像将自动更新,例如“images\susan.png”。
14.5 浏览数据记录
仅限专业版
数据表中的任何一条记录在任何时候都可能处于活动状态。要显示特定数据表记录的内容,您将需要导航到该记录以将其激活。为此,请将任何用户操作连接到“故事版”面板中的“选择记录”元素:
然后,您可以更改其属性以选择数据表和导航选项,例如:
您也可以直接使用“设置数据”设置活动记录。记录索引基于1,因此1代表表中的第一条记录,0代表没有活动记录的情况。
在此示例中,"People"数据表的第七条记录被激活:
遍历数据记录
由于活动记录索引是一个整数变量,因此可以使用动画功能在每个记录之间循环以显示图像的动画幻灯片,例如:
14.6 用表格数据填充列表框
仅限专业版
列表框元素可以直接从数据表记录中获取其数据。这与分配给元素的任何变量无关,后者仍然以常规方式用于包含数据选择。
在此阶段,区分设计时内容和运行时内容很重要。
在版本4.4之前,除了列表框.add和.delete功能外,它们在很大程度上具有相同的含义。您放置在设计控件上的是运行原型时看到的内容。
但是,当您将数据表分配给列表框元素时,情况就会改变。运行原型时,元素中的所有内容都将被指定的表记录字段中的数据替换。从运行原型返回时,将还原设计时内容。
将设计时内容视为可能包含的数据种类的占位符,尤其是在您尚未真正准备好数据文件的情况下。
将数据表分配给列表框
在列表框属性编辑器的“数据”选项卡的底部,您将看到以下内容:
选中复选框,然后选择要使用的数据表。因为您经常想在列表中显示字段值的组合,尤其是对于人的名字,所以“项目内容”是一个自由格式的输入框,带有“插入字段...”选项,可将字段名称放置在光标位置或替换任何选定的文本。
项目内容中与指定数据表中的字段名称不匹配的任何文本将被逐字输出。通常,您可以将其用于标点符号,例如:
LastName, Firstname
为了帮助您填充设计时的内容,如果确实已经准备好了数据文件,则可以使用“获取主要记录”从数据库中获取记录。出于性能原因,此记录仅限于前30条左右的记录,而不是文件中可能包含的全部5,000条记录。
还请注意,可以使用“排序”属性选项以升序或降序对列表进行排序。
14.7 用表格数据填充表格
仅限专业版
表元素可以直接从数据表记录中获取其数据。这与分配给元素的任何变量无关,后者仍然以常规方式用于包含数据选择。
在此阶段,区分设计时内容和运行时内容很重要。
在4.4版之前,它们在很大程度上具有相同的含义。您放置在设计控件上的是运行原型时看到的内容。
但是,当您将数据表分配给Table元素时,情况就会改变。运行原型时,元素中的所有内容都将被指定的表记录字段中的数据替换。从运行原型返回时,将还原设计时内容。
将设计时内容视为可能包含的数据种类的占位符,尤其是在您尚未真正准备好数据文件的情况下。
将数据表分配给表
在表格属性编辑器的“列”选项卡的底部,您将看到以下内容:
选中复选框,然后选择要使用的数据表。对于表,每个列必须匹配一个数据字段。没有选项可以将列表框中的字段值组合到单个列中。
使用“获取列”来获取数据表中定义的所有列。然后,您可以删除不想显示的内容,并根据需要重新排列其他内容。手动输入列名时,也许在创建数据文件之前,它们必须与字段名完全匹配,包括任何空格。
注意:当使用Table元素内的选择来控制原型中UI的其他方面时,可以选择“选择值”列,该选择值列将转移到表的已分配变量中。
提示:如果要在表中包括字段但不想显示它们,请将“列宽”设置为0。例如,当您希望将选择值设为“ ID”字段但不希望将字段设置为“ ID”时,此功能很有用。不想显示它。
为了帮助您填充设计时内容,如果确实已准备好数据文件,则可以使用“数据”选项卡上的“获取主要记录”从数据库中获取记录。出于性能原因,此记录仅限于前30条左右的记录,而不是文件中可能包含的全部5,000条记录:
这将允许您使用文件中的代表性数据来调整列宽和其他设计注意事项。运行原型时,将提取所有记录以替换设计时的内容。
14.8 编辑数据记录
仅限专业版
导航到数据表中的特定记录后,就可以访问活动记录的字段值以显示它们。您还可以将新值写回到记录,然后更新CSV记录或创建并附加一个全新的数据记录。最后,您可以删除记录。
要执行这些操作,请将所有用户操作连接到“故事板”面板中的“创建记录”,“更新记录”和“删除记录”元素:
创建记录
这些属性允许您选择要向其追加记录的数据表。当前字段值将用于新记录。另外,您可以指定一个ID字段。然后,将在该字段中为新记录分配一个唯一的ID号,以替换当前值。
如果列表框,表或其他元素正在显示数据表中的数据,则它们应进行更新以包括新记录。
创建记录后,新记录将保持活动状态。
更新记录
这些属性允许您选择数据表。当前字段值将写回到记录中。如果未使用“更新记录”,则一旦您导航到其他记录,将保留先前存储的值,然后再次返回。
如果列表框,表或其他元素正在显示数据表中的数据,则它们应进行更新以包括记录字段值。
删除记录
这些属性允许您选择数据表。只需删除活动记录,任何显示数据表中数据的列表框,表或其他元素都应更新以删除记录。
删除记录后,没有记录保持活动状态。
临时变更存储
对数据表所做的更改将保存到本地会话文件中,而不是覆盖原始CSV数据,包括使用分发文件和查看器时。这样一来,您就可以在测试设计时弄乱数据,这是安全的,因为您可以再次还原原始数据。
14.9 运行数据查询
仅限专业版
访问原始CSV数据表记录非常有用。但是,在最重要的软件应用程序中,也有必要过滤数据以仅显示一个子集,或将一个数据表与另一个数据表相关联。
关键是故事板面板上的“运行查询”元素:
运行查询
数据查询从一个或多个给定条件表达式的实际数据表中生成具有指定字段的数据表。如果您知道SQL数据库,则最像是带有WHERE子句的SELECT语句。
您将在下面看到属性条目的示例。
使用数据查询的主要方法有3种:
1.要查看来自单个数据表的一组经过过滤的结果,例如标题中所有包含“dream”的记录。
2.要从一个表中查看与另一个表中所选记录的ID相关的所选记录,例如与所选歌手相关的所有音乐专辑。
3.创建关系表的组合视图。例如,所有音乐专辑及其关联的艺术家和流派,在单独的表格中由ID引用。
加上以上内容的任意组合,即与所选记录相关并且也已过滤的组合视图,例如所有音乐专辑及其选定歌手的流派和标题中的“梦”。
CSV数据示例
例如,将以下简单数据表视为音乐数据库的一部分。请注意,每个表都有其自己的ID字段,专辑表按ID引用了Artists和Genres表中的记录。
Genres(15条记录):
Artists(40条记录):
Albums(50条记录):
示例1:过滤数据
在此示例中,我们要显示在名称中具有给定搜索词的专辑列表。
请注意(图中未显示),“编辑框”被分配了一个名为“SearchValue”的变量,并且该表被分配给了数据库表“QAlbums”,这是我们将创建的查询的名称:
查询表被命名为“QAlbums”,查询本身看起来像这样:
最初运行设计时,它如下所示:
在“编辑框”中输入内容并单击“搜索”按钮后,结果将返回到表格中,如下所示:
示例2:查找相关数据
此示例与第一个示例非常相似,除了我们使用另一个数据表中的选择内容以根据ID匹配过滤结果。
该表与示例1中的表相同,并且再次被分配给“QAlbums”查询数据库表。列表框使用“Name”和“Country”字段作为内容分配给“Artists”数据表:
当您在“Artists”列表框中选择一个项目时,与其相关的数据记录也会被选择并激活。然后可以将其用于过滤和查找关联的相册。
该查询与示例1的查询相同,不同之处在于,替换了Where子句以在“ArtistID”字段上使用匹配项,而不是查找文本内容。请注意,“ArtistID”字段无需包含在“选择的查询字段”结果中,尽管这样做不会造成任何危害:
运行设计并单击艺术家,将执行查询并返回结果:
这种设计要记住的一件事是,目前没有用于更改列表框(或表)元素选择的事件触发器。仅左击触发器可用。因此,如果您使用键盘将艺术家列表向下移动,则不会发生任何事情。您需要单击条目。
示例3:联接表数据
像其他人一样,我们将数据库分为3个单独的表,这样我们就不会在单个表(Albums)中复制信息(Artists and Genres)。我们使用ID字段在“Albums”表中引用我们的Artists和Genres。
但是我们要做的是在一个表格中列出所有相册及其相关信息。
这是设计:
该查询实际上非常简单,并且与示例2十分相似:
有两个区别:
1.我们已将其他2个表中的"Artist", "Country"和"Genre"信息添加到我们的输出查询表中。
2.除了“ArtistID”外,还添加了另一个条件以匹配“GenreID”
请注意,您可以向Where子句添加任何过滤器,例如,仅包括名称中带有“the”的Albums(请参见上面的示例1)或仅包括“Jazz” albums(#Genres.Genre =“Jazz”)。
最初运行设计时,它看起来像这样,表格最初是空白的:
单击“获取”按钮后,将运行查询,并为每个专辑记录返回1条记录(总共50条)的结果:
性能警告
用SQL术语来说,此示例对它需要产生所有结果的表查询(所有选择的查询字段)所需的所有表执行FULL CROSS JOIN,并在每个表上评估WHERE条件。这意味着,它将查看每个表中每个记录的每个组合以找到匹配项。
精通SQL的任何人都将知道这可能是一项昂贵的操作,并且SQL中提供了使用不同JOINS的技术来改进问题。
但是,这不是SQL,而是没有索引数据库表的奢侈的解释型原型系统。在大型数据集上执行这样的查询将非常非常慢。
此特定示例有50张专辑,其中包含40位艺术家和15种流派。这是50 x 40 x 15 = 30,000条记录,用于检查和执行解释的表达式求值。我们的典型PC需要2到5秒钟才能执行此查询。
被警告!仅创建足够大的表以充分展示您的原型用户界面。
从好的方面来说,它非常灵活,非常适合现有的变量和表达式。如果您不需要过滤任何相关的表字段,也可以使用非常快速的替代方法,如以下示例中所述...
示例4:使用查找字段
前面的示例演示了如何组合来自多个表的相关数据。它为过滤提供了最大的灵活性,但是对于大型表和多个关系来说,这可能是一个非常缓慢的过程。
存在使用查找字段的替代方法。这些速度非常快,但是由于您只能访问主数据表,因此无法根据任何查找字段值进行过滤(尽管如果知道目标记录ID,仍然可以进行过滤)。
这是设计:
这与示例3的示例非常相似,不同之处在于,由于我们使用快速查找字段而不是全表联接,因此我们可以在窗口出现后立即运行查询(使用Show事件),而不是在窗口上运行按钮单击事件。
这是查询。请注意,现在所有字段都使用单个“Albums”表,其中三个字段使用ID字段“查找”其他表中的数据,并且不再需要 Where子句来求值:
运行设计时,查询将立即执行:
14.10 处理会话数据文件
仅限专业版
对数据表所做的更改将保存到本地会话文件中,而不是覆盖原始CSV数据,包括使用分发文件和查看器时。这样一来,您就可以在测试设计时弄乱数据,这是安全的,因为您可以再次还原原始数据。
会话数据文件与带有“会话”的原始CSV数据文件保存在同一文件夹中。添加为文件名前缀。对于分发文件,它们与分发文件存储在同一文件夹中。
运行原型时,如果找到了会话数据文件,则将使用它代替原始数据文件。这使您可以使用最后使用的数据集继续进行测试会话。
CSV数据编辑器
当从“数据”面板打开CSV文件以编辑其内容时,它将始终打开原始数据文件,而忽略修改后的会话数据。但是,如果需要,可以使用“文件|打开...”找到并打开会话CSV文件以进行直接编辑。
在这种情况下,您可能需要在保存后刷新“数据”面板,以确保之后立即运行原型时重新加载会话数据。
恢复原始数据
您可以随时删除会话文件并还原原始数据。在“数据”面板中右键单击数据文件或其包含的文件夹,然后从上下文菜单中选择“还原原始数据...”:
因为这是一项破坏性操作,所以您需要检查要还原的文件,然后单击“确定”以确认该操作。
替换原始数据
不利的一面是,在使用原型时,您可能想要对数据表进行大量更改。在这种情况下,请从右键单击上下文菜单中选择“保留会话数据...”。
同样,由于这是一个破坏性的操作,因此您需要检查要覆盖的文件,然后单击“确定”以确认该操作。
如果要保留原始数据的副本,然后再用会话数据覆盖它,请在CSV数据编辑器中将其打开,然后使用“文件|另存为...”将其保存为新名称。