敬业的IT人 >> 数据库 >> Foxpro >> Visual FoxPro 9.0 的报表设计器

Visual FoxPro 9.0 的报表设计器

敬业的IT人 互联网 佚名 2008-1-8 14:50:19
    ·Visual FoxPro 9中新的数据处理方式
    ·Visual FoxPro 9 集成开发环境新特性
  Micorsoft公司对新推出的Visual Foxpro 9报表设计器作了显著地改进,同时又与老版本的Visual Foxpro保持了向后兼容性,新版本的报表设计器是一个新旧版本的混合体。

  在本文中,你将了解报表设计器对新的数据环境、报表保护、用户界面、对象布局与数据分组功能的增强。最后,你将了解Visual FoxPro 9报表设计器的一个最有用的增强功能:多条明细区带(multiple detail bands)。

  报表设计被一个新增的“Xbase报表设计器”的工具代替。它提供了一些新的对话框,并且比以前的版本更方便使用。它还提供了一些旧版本报表设计中所没有的新特色。你可以通过改变一个名为“_REPORTBUILDER”的系统属性来决定使用哪种报表设计器,如下所示:

  *--如果要使用新版本的报表设计器

_REPORTBUILDER = HOME() + 'ReportBuilder.app'
  *--如果要使用旧版本的报表设计器

_REPORTBUILDER = ''
  报表输出引擎:与报表设计器一样,你可以控制是否选用新版本的报表输出引擎。但与报表设计器不同的是Visual FoxPro 9默认报表输出引擎为旧版本方式。主要是因为在新版本的输出引擎中使用了GDI+库,而老版本的输出引擎使用的是GDI库,使用老版本的输出引擎就可以让应用程序可以在不用版本的windows上显示出同样的输出效果。你可以用如下命令来切换你的输出引擎:

  *--使用新版本的输出引擎

SET REPORTBEHAVIOR 90
  *--使用旧版本的输出引擎

SET REPORTBEHAVIOR 80   
  在下文中我们假定使用的是新版本的报表设计器和输出引擎。

  
图1. 使用“Save As Class”对话框指定要保存的类名以及所在的类库,并将指定报表的数据环境保存在这个类中。

图2. 单击”Data Envirborder="0" alt="Visual FoxPro 9.0 的报表设计器" />
图3. 布局对象属性对话框中的保护页
  这个对话框还有一个名为“Design-time captiborder="0" alt="Visual FoxPro 9.0 的报表设计器" />
图4. 带区属性对话框中的保护页
  
图5. 报表属性对话框中的保护页
  这个对话框的上半部分可让你禁止用户使用属性对话框中的某些属性页。当你选择了相应的检查框后,报表属性对话框中的某些属性页会变得不可用。但“Protectiborder="0" alt="Visual FoxPro 9.0 的报表设计器" />
图6. 报表设计器增加的两个新控件
  
图7. 当一个对象处于大小可变状态时,鼠标指针发生的改变。
  
图8. 多项选择对话框
  所有被选定的对象出现在对话框的“Selectiborder="0" alt="Visual FoxPro 9.0 的报表设计器" />
图9. 通过“Properties”属性页来修改布局对象的保护属性以及打印属性。  
  如果你选中了“Apply these protectiborder="0" alt="Visual FoxPro 9.0 的报表设计器" />
图10. 当为数据组定义多个水平分栏时,原来版本的Visual FoxPro浪费的报表空间
Visual FoxPro 9.0 的报表设计器
图11. 即使数据组的页头区带高度为0,原来版本的Visual FoxPro仍将保留这些空白
  在Visual FoxPro 9中数据组分栏得到了改进。当报表设计器发现一个新数据组时,它将从第一列开始显示,直至満行。如果不满一行,那剩下的部分将以空格填充。如果还有未打印完的明细记录的话,那这些记录会从下一行开始输出,如图12所示。如果数据组的页头区带的高度为0,则Visual FoxPro 将不会保留任何空白,如图13所示。

Visual FoxPro 9.0 的报表设计器
图12. 将数据组进行水平分栏时,Visual Foxpro 9将节省更多的空间
Visual FoxPro 9.0 的报表设计器
图13. 如果数据组的页头区带高度为0时,Visual Foxpro 9不会保留任何空白

图14. 这个报表为每个客户报告了其购买保险的详细信息
  数据表与关联

  要想熟练地使用这一新特色,你必须明白父表是怎样与子表一起协同工作的。我们以图15所展示的报表为例,它使用的数据库环境如下:

  · 客户表(Customer)是父表,它包含了所有购买保险的客户。

  · 家庭成员表(Members)是客户表的子表,它包含了客户的所有家庭成员。

  · 交通险表(Vehicles)也是客户表的一个子表,它包含了客户所购买的交通险。

  · 家庭险表(Homes)也是客户表的一个子表,它包含了客户所购买的家庭险。

  主表

  必须有一个表来做为报表的主表,在本例中,客户表正是这样的一个数据表。如果你用数据环境来定义数据表的话,那必须将它的InitialSelectedAlias属性定义为这个数据表。 如果你用代码的方式来定义数据表的话,那要保证当此报表运行时,客户表必须处于当前打开的工作区。

  目标别名(Target Alias)

  所谓目标别名,是指在报表某个特定的区带中做为主表的那个数据表。在本例中,家庭成员表是明细区带1的主表,交通险表是明细区带2的主表,而家庭险表则是明细区带3的主表。

  如果没有为某个明细区带定义主表,那它就会呈现出与老版本的Visual FoxPro一样的行为(每个父表只会处理一个明细区带)。但如果你定义每个父表都为主表的话,那结果会全然不同。Visual FoxPro 将依次处理父表中所有记录,并在每个明细区带中依次将它们输出。
 
  关联

  关联在如何控制多条明细区带的输出中起到的重要的角色。Visual FoxPro通过父表与子表之间的关联来进行记录的导向。你可以通过SET RELATION或者SET SKIP来定义这些关联。如果你在数据环境中打开了这些数据表,并且数据库中已经定义了它们之间的关联关系的话,那父表与子表之间将会自动生成关联。

  如果你采用代码方式打开数据表的话,那列表1将告诉你如何将图15所示的数据环境建立起来。

  列表1.建立图15的数据环境

  如下代码展示了如何将父表与子表建立报表关联的例子。

  *--打开子表

USE Members IN 0 ORDER CustomerFK
USE Vehicles IN 0 ORDER CustomerFK
USE Homes IN 0 ORDER CustomerFK
  *--打开父表

SELECT 0
USE customer ORDER CustomerPK
  *--为父表和子表建立报表关联

SET RELATION TO CustomerPK INTO Members
SET RELATION TO CustomerPK INTO Vehicles ADDITIVE
SET RELATION TO CustomerPK INTO Homes ADDITIVE
  定义多条明细区带

  如果你新建一个报表,那它缺省地为这个报表只设置一个明细区带。通过可选区带对话框可增加额外的明细区带。从“Report”菜单中选择“Optional Bands...”菜单项就可以打开这个对话框。它其实就是原来版本中的“标题/小结(Title/Summary)”对话框。

  单击“Add”按钮便可以增加一个新的明细区带,你可以为一个报表定义最多20个明细区带。

  定义主表

  通过明细对话框你可以为每一个明细区带定义其主表。从“Report”菜单中选择“Edit Bands...”就可以打开这个对话框,或者双击明细区带的灰色栏也可达到同样效果。

  主表实际上是一个表达式,你必须将相应的数据表名用引号引起来。如果你定义了某个主表,则相应的明细区带的灰色栏将显示它的名字。

  如果你要建立一个多条明细区带形式的报表,请别忘了在字段前面加入数据表名的前缀,格式为“数据表名.字段名”,这样可以防止不同的数据表之间的同名字段冲突。

  页头和页尾

  多条明细区带的另一个改进就是能为每一个明细区带增加独立的页头和页尾。这与页头和页尾分组有些类似,但仍然有一些不同。当每个父表记录的处理流程如下:

  · 明细区带1的页头被处理。

  · 处理明细区带1中主表相应的所有子表记录。

  · 明细区带1的页尾被处理。

  · 明细区带2的页头被处理。

  · 处理明细区带2中主表相应的所有子表记录。

  · 明细区带2的页尾被处理。

  · 明细区带3的页头被处理。

  · 处理明细区带3中主表相应的所有子表记录。

  · 明细区带3的页尾被处理。

  · 以此类推......

  要为每一个明细区带增加独立的页头和页尾,你必须在详细信息对话框中的“Detail Header/Footer”的检查框中选中相应的明细区带。也可通过点击明细区带上方的标题栏来对明细区带进行排序。

  学海无涯

  Visual FoxPro 9报表设计器增加了如此多的特色来帮你建立更好的报表,以至于你不得不花更多的精力来学习它的新功能,但我认为这些学习是非常值得的。新的数据环境允许你在不同的报表中共享它。对报表的各个部分提供了强有力的保护方式,用户界面也做了一番改头换面,让你得到更舒适的开发体验。布局对象与数据分组的增强给你提供了更多的报表操控能力。最后,新推出的多条明细区带的特色能挖掘出报表设计器的更多功能。所有的这些改进可让你创建出非常复杂、功能非常强大的报表。

进入讨论组讨论。
粤ICP备06119539号
Copyright CiscoSky.Org,Some Rights Reserved.
Email:me1228#tom.com