译者:Fbilo
数据分组的增强在 VFP 9 中,数据分组有三个增强。
第一个增强,是当报表中有多个自左向右而不是自顶向下打印的字段时,VFP 把组标头放在哪里。图12展示了在以前版本中,报表引擎把组标头放在细节带区的行里;它(指组标头)占据了第一列,而细节带区的内容只好从第二列开始。第一列被保留给组标头带区,即使你把这个带区的高度设置为0也一样,而且这么做的话,第一列就会是空白的。另外,它的高度还是固定的——等于细节带区的高度——所以如果组标头带区的高度高于细节带区的高度,那么组标头对象还可能会掩盖住细节带区的第二行中的对象们。
图12、在以前版本的 VFP 中,组标头带区被放在跟细节带区同一行里。
你从图13中可以看到,VFP 9 把组标头对象放在了它们自己的行里。这一行的高度是组标头带区的高度而不是细节带区的高度,所以组标头对象不会掩盖住细节带区对象,如果组标头被缩放到零,它也不会占据任何空间。
图13、在 VFP 9 中,组标头带区打印在它自己的行里。
第二个增强也适用于那种带有从左到右打印多个列的报表。尽管在报表设计器中的设计界面仅显示为一个字段的宽度,但你其实可以把对象放在横穿整个页面的组标头和页脚带区中,这样对象就会拆分成多个列。图14展示了 GroupsInColumn2 报表在报表设计器中的表现,而图15则展示了当打印预览的时候它的表现。
图14、当一个报表带有从左到右打印的多个列的时候,你可以把对象们放在横穿整个页面的组标头和页脚带区中,虽然在报表设计器中看起来是只有一个对象
图15、在组合页脚标头带区中的对象们会拆分报表中所有的列
最后一个增强是你现在可以在 VFP 9 中建立超过74个数据分组了。虽然以前版本的报表引擎支持那么多分组,但在数据分组对话框中你还是被限制为只能分20割数据组。
数据环境处理处理一个报表的数据环境有两个改动:你现在可以将数据环境保存为一个类、还有你可以加载来自另一个报表或者来自一个数据环境类的数据环境。
VFP 8 增加了可视化建立数据环境的子类的能力。在 VFP 9 中,要将一个报表的数据环境保存为一个类,可以打开数据环境窗口,然后从File(文件)菜单选择Save As Class(另存为类)。
要加载来自另一个报表或者来自一个数据环境类的数据环境,请从Report(报表)菜单中 Load Data Environment(加载数据环境)、或者打开报表属性对话框然后选择 Data Environment (数据环境)页。从另一个报表拷贝数据环境这项很直观;它简单的从指定的 FRX 文件把跟数据环境相关的记录拷贝到当前 FRX 文件中。当然,这就意味着以后在另一个报表中做的改动将不会反映到这个报表上来。
另一方面,将数据环境链接到一个数据环境类选项也许不会表现得完全如你所想。跟一个表单或者表单类不同,一个 FRX 是不支持引用一个数据环境类的,而是这个数据环境的各种成员会被加载到 FRX 的记录中去。例如,如果在数据环境中有两个 cursor 对象和一个 relation 对象,那么这些对象的记录会被添加到 FRX 文件中去。在数据环境类中的代码以一种非常有趣的途径来处理:代码被插入到数据环境、Cursor、Relation 记录的各个方法中去,报表数据环境的 BeforeOpenTables 方法中有着“建立指定 DataEnvironment 类的实例,然后将报表中的数据环境的事件们绑定到在 DataEnvironment 类的相应事件之上。用这种办法,在数据环境类中的代码会如你所望的那样被触发。只是它组合的方式跟一个表单或者表单类的方式不同罢了。
国际化支持Windows 字体对话框包含一个Script 设置,可以让用户去选择希望的语言脚本。可用的值包括 Western、Cyrillic、Japanese、Hebrew、以及 Arabic。VFP 的对象们支持这个功能以及它们的 FontCharSet 属性。不幸的是,以前版本的 VFP 不支持在报表中存储选定的脚本,不管是为报表对象还是为报表的默认字体。在 VFP 9 中,这个值现在被保存了,因此已经提供了全面的支持。在字段属性和标签属性对话框的 Style 页上、以及报表属性对话框的Page Layout(页布局)页上的 Use font script 设置让你可以控制这一点。
此外,VFP 开发组还确保了对齐在从左到右和从右到左的语言中都工作得比以前更好。
其它新的功能FRX 文件有一个备注字段 USER 已经很长时间了。这个字段并不为 VFP 报表设计器所使用,而是专门为了存储用户自定义信息准备的(以前版本的 VFP 中有一个 Bug,会在保存报表的时候把这个字段的内容给去掉。VFP 9 已经修整了这个问题)。然而,这个字段没有暴露在任何报表设计器对话框中。在 VFP 9 中,现在可以从对象的属性对话框的 Other 页上找到它了。
Other 页还提供对“run-time extensions(运行时扩展)”的访问。这实际上是存储在FRX文件中那些对象记录的备注字段 STYLE 里的 XML。这里是一个例子:
这里的 XML scheam 是完全开放的;你可以添加你自己的属性、也可以删除你不需要的属性。
无论是在VFP中的报表设计器、还是运行时报表工具都不会用到这个 XML,但你自己对这些工具的增强就绝对有可能用它了。(参见第6章“在设计时扩展报表系统”和第七章“在运行时扩展报表系统”以了解你可以对它们进行增强的信息)。单击“Edit Settings”按钮来打开一个对话框以为当前对象输入某些存储在 XML 里的信息。这个对话框只允许你修改在 XML 中第一个节点的 execute 和 execwhen 属性。不过,如果你需要更多的功能的话,当然可以通过把这个对话框替换成你自己的(自定义对话框)来实现。参见第七章“在运行时扩展报表系统”以了解详情。
图16、对象的属性对话框中的 Other 页允许访问几个新功能,包括备注字段 USER、设计时 Tooltips 以及运行时扩展
字段属性对话框的 Format 页上有一个看上去像是个新功能的东西:Template characters (模板字符)设置。这个选项只对字符型字段可用,有 Overlay (覆盖)和 Interleave(插入)两个选择。不过,这其实并不是一个新功能,只是用来决定是否要把“@R”添加到输出的内容上。这个“@R”不会显示,但当Interleave被选中的时候将被存储起来。
译者注:这个设置在 VFP 9 帮助文件中有较详细的说明。简单的说,如果你在上面的Format expression(格式化表达式)中指定了一个格式化模板NNN-NNNN,而表中的某条记录的该字段中包含字符型数据ABC1234,那么选择Overlay在报表中显示的将是ABC-234,选择InterLeave则显示ABC-1234。
表达式生成器对话框不再显示来自数据环境中的表,而只显示当前打开了的游标。这让你可以更全面的控制用户可以在这个对话框中选择的字段。