资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第九章 报表和标签,报表(,Report,),是用于在打印文档中显示或总结数据。定义报表有两个要素:,报表的数据源,定义了报表中数据的来源,通常是表、视图、临时表等。,报表的布局,定义了报表的打印格式。,报表存储时,在磁盘上形成两个文件:扩展名为,.,frx,的报表文件和扩展名为,.,frt,的报表备注文件。报表文件指定了报表的数据源、需要打印的文本以及布局信息等。,标签实质上是一种多列布局的特殊报表,具有为匹配特定标签纸的特殊设置。,标签的定义存储在扩展名为,.,lbx,的标签文件之中。相关的标签备注文件的扩展名为,.,lbt,。,设计报表按四个步骤进行:,决定要创建的报表类型,创建报表布局文件,修改和定制布局文件,预览的打印报表,一、报表类型,报表类型主要是指报表的布局类型。报表布局的常规类型有(详见教材,P220,):,列报表,行报表,一对多报表,多栏报表,二、创建报表,VFP,提供了下以,3,种可视化创建报表的方法:,用报表向导创建单表或多表报表,用快速报表从单表中创建一张简单报表,用报表设计器创建报表,三、报表的带区,报表带区是指报表中的一块区域,可以包含文本、来自表字段中的数据、计算值、用户自定义函数以及图片、线条等。,报表上可以有各种不同类型的带区。每一带区的底部都有一个分隔栏。带区名称显示于靠近箭头的樯,箭头指示该带区位于栏之上,而不是栏之下。,在默认情况下,报表设计器中显示三个带区:,页标头,细节,页注脚,带 区,打印次数,标题,每报表一次,页标头(默认),每页面一次,列标头,每,列,一次,组标头,每组,一次,细节(默认),每,记录一次,组注脚,每组,一次,列,注脚,每列,一次,页,注脚(默认),每页,一次,总结,每,报表一次,所谓分组是在报表中记录按某一表达式归类。报表中的分组最多可以有三个分组层次。,要使报表输出时插入页码,需要在报表中添加字段控件,并在表达式对话框中定义的表达式中含有系统变量,_PAGENO,。,在报表中要增加带区,可以通过报表菜单中的相应菜单项进行(涉及分组的带区,必须首先对记录设置分组表达式)。,四、预览,/,打印报表,利用,REPORT,命令可以预览和打印报表。,语法:,REPORT FORM,FileName1,范围,;,FOR,条件表达式,;,TO PRINT TO FILE,FileName2,;,PREVIEW,FileName1,报表文件名,PREVIEW,预览报表,第 十 章,类的创建和应用,第 一 节,设计和创建子类,一、创建子类,创建一个新的类应该说明所设计的类的属性和方法,以便于其它用户和其它应用程序方便地使用这些类。,1,、子类和类库,用户可以基于,VFP,的基类创建自定义的子类。,VFP,将用户自定义的子类保存在扩展名为,.,vcx,的可视类库文件之中。一个类库文件可以保存多个自定义子类。但,VFP,基类并不保存在,.,vcx,类库文件中。,用户也可以基于自定义子类创建其子类,并且该子类与其所基于的子类,既可以保存在同一个类库文件中,也可以保存在不同的类库文件中。,2,、创建子类和类库,VFP,提供了多种创建子类的方法:,在项目管理器中,在文件菜单(工具按钮)中,在命令窗口中,在新建类对话框中,需要指定:,新类的名称,所基于的类,所保存的类库文件名及位置,3,、使用类设计器定义类,类设计器窗口与表单设计器窗口相似,在属性窗口中可以查看和设置类的属性;在代码编辑窗口中可以编写各种事件和方法程序的代码。,二、为类添加新属性,新创建的类将继承其父类的属性,用户也可以为其添加新的属性。,1,、新建属性,为类新建属性方法是:,打开类设计器窗口(打开可视类库文件及指定所需要的类),选择菜单,类,/,新建属性,在对话框中进行以下设置:,名称栏,输入属性的名称,可视性,指出可视性:公共、保护、隐藏,说明栏,输入有关属性的说明,可视性的含义:,公共,可以应用程序的任何位置被访问。,保护,仅能被该类定义内的方法程序或该类的派生类所访问。,隐藏,只能被该类定义内的成员所访问,该类的子类不能引用它们。,2,、为新属性设置默认值,创建了新属性后,通常应该为该属性指定一个默认值。,VFP,对新属性默认的默认值为逻辑假。,用户可以为其设置其它数据类型的默认值,也可将其默认值设置为空子串(删除原属性值)。,3,、为属性创建,Access,和,Assign,方法程序,Access,方法程序是指在查询属性值时执行的代码。,Assgin,方法程序是指更改属性值时执行的代码。,4,、创建数组属性,在创建新属性时,在名称框内可以指定数组名称和数组的行列大小。,设计时数组属性只读,运行时可以被修改或重新声明。,三、为新类添加方法程序,与添加新属性类似,可以向类添加新的方法程序。方法程序所保存的是调用时可以运行的过程代码。方法创建后一般应编写方法程序代码。,新方法程序的添加方法与添加新属性的方法类似。其可视性含义与新属性中的可视性含义相同。,类的属性和方法不能赋于相同的名称。,四、查看和设置类信息,在,使用类设计器时,通过菜单“,类,/,类信息,”查看和设置类的有关信息(类选项卡),也可以在“类信息”对话框中添加、修改和删除属性和方法(成员选项卡)。,1,、为类指定设计时的外观,指定类的工具栏图标,指定类的容器图标,2,、修改和删除类的属性和方法程序,在对话框中,不允许修改和删除父类的属性和方法程序。,五、在设计表单时将表单和控件保存为类,在,设计表单时,可以将指定的表单或控件保存为类(“另存为类”命令)。,在另存为类时:,保存的范围,有三种选择:,选定控件,(当前表单无控件选中时,此项不可选)、,当前表单,、,整个表单集,(当前表单不在一个表单集中,此项不可选)。,类定义,指定类的名称、所保存的类库文件名及位置、类的说明文本。,第 二 节,管理类和类库,一、在项目管理器窗口中管理类和类库,在项目中添加和移去类库,在项目中添加类库的方法,与在项目中添加其它文件的操作是一样的。,复制和删除类库中的类,一个类库文件可以属于不同的项目。利用鼠标拖放实现在项目中添加类库。,应该尽可能地将所有子类都包含在一个类库中。,重命名类库中的类,在项目管理器窗口中右击需要重命名的类。,注意:如果基于该类创建了子类,或在表单中进行了应用,由于子类或表单中相应的控件中都有一个,ParentClass,属性指向该类的名称,因此改变了类的名称后,系统不会自动更新子类和在表单中相关对象的,ParentClass,属性,这样表单就不能正确地工作。因此重命名应该在在创建其子类或应用之前,一旦类被使用就不必再去更名。,二、在类浏览器窗口中管理类和类库,类浏览器是专门用于显示类库或表单中的类的工具,它除了能浏览类库中的类外,也能够显示诸如,.,tlb,、,.,olb,和,.exe,文件中的类型库信息。,类浏览器的打开,可选择“工具”菜单中的“类浏览器”菜单项,或者在命令窗口中键入命令:,DO,(,_BROWSER,),第三节 类的应用,一、添加类到表单,在项目管理器中拖放类到表单设计器,注册可视类库,类库中的类如果在表单中频繁使用,可以将类注册。类注册后,可以在表单控件工具栏中选择显示和使用它们(注册方法详见教材,P241,)。,将类,控件显示在表单控件工具栏中,由工具栏中的“查看类”按钮,在常用控件按钮与类控件按钮间切换。,类控件显示在表单控件工具栏中后,可以直接针类控件拖放到表单,实现由类控件创建对象。,二、调用父类方法程序代码,子类的对象自动继承基类的功能。但是,VFP,允许用户用新的功能来替代从基类继承来的功能。,如果用户希望在为子类添加新功能的同时,仍然保留和使用父类的功能,用户可以在类或容器层次的各级程序代码中使用,DODEFAULT,(),函数或作用域操作符“,:,”,调用父类程序代码。,使用,DODEFAULT,(),函数,使用域操作符,:,两者的区别是:,DODEFAULT,(),函数只能调用当前对象父类中与当前事件或方法同名的事件或方法代码,而作用域操作符可以调用在当前作用域中任何一个对象(包括当前对象)父类中任何一个事件或方法代码。,防止基类代码被执行,VFP,对象继承父类或基类的所有属性、事件和方法程序。但有时在事件和方法程序中希望防止发生基类的默认操作,此时需要在方法程序代码中加入,NODEFAULT,关键字来实现。,
展开阅读全文