第11章在表单中使用数据表_第1页
第11章在表单中使用数据表_第2页
第11章在表单中使用数据表_第3页
第11章在表单中使用数据表_第4页
第11章在表单中使用数据表_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、11.3 在表单中操作表在表单中操作表 实用的用的VFP应用程序需要在表单中操作数据表,这就要编写事件代码来实现。应用程序需要在表单中操作数据表,这就要编写事件代码来实现。11.3.1 在表单中显示浏览窗口在表单中显示浏览窗口【例【例11-4】在表单中使用命令方式来打开浏览窗口,显示并修改数据表的内容(如】在表单中使用命令方式来打开浏览窗口,显示并修改数据表的内容(如图图11-16所示)。所示)。 设计步骤如下:设计步骤如下: 建立应用程序用户界面与设置对象属性。选择建立应用程序用户界面与设置对象属性。选择“新建新建”表单,进入表单设计器。表单,进入表单设计器。增加两个命令按钮增加两个命令按钮

2、Command1、Command2,并按图,并按图11-17所示设置其属性。所示设置其属性。 编写代码。编写代码。 在表单的在表单的Load事件代码中打开数据表:事件代码中打开数据表:USE xs 在表单的在表单的Destroy事件代码中关闭数据表:事件代码中关闭数据表:USE 在命令按钮在命令按钮Command1的的Click事件代码中打开编事件代码中打开编辑窗口:辑窗口:GO TOPEDIT在命令按钮在命令按钮Command2的的Click事件代码中打开浏览事件代码中打开浏览窗口:窗口: GO TOPBROWSE11.3.2 数据环境数据环境 虽然在表单中可以使用虽然在表单中可以使用USE

3、命令来打开和关闭数据表,但是在一些较为复杂的情命令来打开和关闭数据表,但是在一些较为复杂的情况下,比如使用多表或数据库时,不易协调各表之间的关系。比较可靠的办法是使况下,比如使用多表或数据库时,不易协调各表之间的关系。比较可靠的办法是使用用“数据环境数据环境”。 数据环境是一个对象,它包含与表单相互作用的表或视图,以及表单所要求的表数据环境是一个对象,它包含与表单相互作用的表或视图,以及表单所要求的表之间的关系。可以在之间的关系。可以在“数据环境设计器数据环境设计器”中直观地设置数据环境,并与表单一起保中直观地设置数据环境,并与表单一起保存。存。在表单运行时,数据环境可以自动打开、关闭表和视图

4、。在表单运行时,数据环境可以自动打开、关闭表和视图。在表单创建了数据环境,就可以通过在表单创建了数据环境,就可以通过“属性属性”窗口来设置控件的窗口来设置控件的ControlSource属属性性。【例【例11-5】在上例的表单中使用数据环境。】在上例的表单中使用数据环境。设计步骤如下:设计步骤如下: 创建创建“数据环境数据环境”。选择新建表单,进入表单设计器。在系统菜单的。选择新建表单,进入表单设计器。在系统菜单的“显示显示”子菜单中选择子菜单中选择“数据环境数据环境”,或在表单设计器中单击鼠标右键,从弹出的快捷菜单,或在表单设计器中单击鼠标右键,从弹出的快捷菜单中选择中选择“数据环境数据环境

5、”,或单击表单设计器中,或单击表单设计器中“数据环境数据环境”按钮(如图按钮(如图11-18),均),均可打开可打开“数据环境设计器数据环境设计器”窗口。窗口。 在在“数据环境数据环境”窗口中单击鼠标右键,在快捷菜单中选择窗口中单击鼠标右键,在快捷菜单中选择“添加添加”,可添加表单所,可添加表单所要控制的数据表:要控制的数据表:xs.dbf,如图,如图11-19所示。所示。 修改代码。删除上例表单中的修改代码。删除上例表单中的Load事件代码与事件代码与Destroy事件代码,改由数据事件代码,改由数据环境来处理数据表的打开与关闭。环境来处理数据表的打开与关闭。 运行表单,结果完全相同。运行表

6、单,结果完全相同。11.3.3 在表单中操作数据表在表单中操作数据表 用表单设计器设计一个可以浏览和编辑数据表的程序。用表单设计器设计一个可以浏览和编辑数据表的程序。【例【例11-6】设计一个操作数据表的表单,使之具有按记录浏览、编辑的功能。】设计一个操作数据表的表单,使之具有按记录浏览、编辑的功能。例题:浏览数据表例题:浏览数据表 设计步骤如下:设计步骤如下: 创建数据环境。选择新建表单,进入表单设计器。打开创建数据环境。选择新建表单,进入表单设计器。打开“数据环境设计器数据环境设计器”窗口,在窗口,在“数据环境数据环境”窗口中单击鼠标右键,在快捷菜单中选择窗口中单击鼠标右键,在快捷菜单中选

7、择“添加添加”,添加表,添加表单所要控制的数据表:单所要控制的数据表:xs.dbf,如图,如图11-19所示。所示。 建立应用程序用户界面与设置对象属性。依次将表中建立应用程序用户界面与设置对象属性。依次将表中“xh”、“xm”、“xb”等字段用鼠标拖拉至表单中。表单上出现相应的标签和文本框,如图等字段用鼠标拖拉至表单中。表单上出现相应的标签和文本框,如图11-20左所示。左所示。 然后增加一个命令按钮组然后增加一个命令按钮组CommandGroup1和一个标签和一个标签Label1。修改各对象属。修改各对象属性如图性如图11-20右所示。右所示。11.3.4 使用表格控件使用表格控件 虽然虽

8、然“浏览浏览”窗口可以满足浏览数据的需要,但是缺乏对数据的有效控制。为窗口可以满足浏览数据的需要,但是缺乏对数据的有效控制。为了更好地控制数据的显示,可以使用表格(了更好地控制数据的显示,可以使用表格(Grid)控件。)控件。 表格是一个容器对象,表格包含列。这些列除了包含列标题和控制外,每一个表格是一个容器对象,表格包含列。这些列除了包含列标题和控制外,每一个列还拥有自己的一组属性、事件和方法,即可以提供对表格单元的大量控制。列还拥有自己的一组属性、事件和方法,即可以提供对表格单元的大量控制。【例【例11-7】在例】在例11-6的表单中增加一个浏览窗口。如图的表单中增加一个浏览窗口。如图11

9、-23所示。所示。设计步骤如下:设计步骤如下: 打开上例的表单文件,进入表单设计器。首先修改表单布局,并在表单上增打开上例的表单文件,进入表单设计器。首先修改表单布局,并在表单上增加一个加一个“表格表格”控件控件Grid1,如图,如图11-24所示。所示。 用鼠标右键单击用鼠标右键单击Grid1,在弹出的快捷菜单中选择,在弹出的快捷菜单中选择“生成器生成器”,打开,打开“表格生表格生成器成器”。用鼠标单击。用鼠标单击“数据库和表数据库和表”右边的命令按钮右边的命令按钮“.”,如图,如图11-25左所示,左所示,可以选择数据表。可以选择数据表。 然后选择然后选择“可用字段可用字段”中的中的“学号

10、学号”、“姓名姓名”、“性别性别”和和“总学分总学分”等等字段,按添加按钮,将其添加到字段,按添加按钮,将其添加到“选定字段选定字段”列表中,如图列表中,如图11-25右所示。右所示。 在在“布局布局”页中,用鼠标指向标题行的分隔线可以调整列标题的宽度,如图页中,用鼠标指向标题行的分隔线可以调整列标题的宽度,如图11-26。 按按“确定确定”退出表格生成器。运行表单,退出表格生成器。运行表单,发现表格中的记录和文本框中的记录不同发现表格中的记录和文本框中的记录不同步。为此,重新打开步。为此,重新打开“表单设计器表单设计器”,继,继续修改表单。续修改表单。 修改事件代码。修改事件代码。 编写表格

11、编写表格Grid1的的AfterRowColCHange事件代码:事件代码:LPARAMETERS nColIndexTHISFORM.Refresh 其中第一行是原有的。第二行表示当光其中第一行是原有的。第二行表示当光标在表格中移动时,随时刷新表单。标在表格中移动时,随时刷新表单。 在命令按钮组在命令按钮组Command的的Click事件代事件代码最后增加一条命令:码最后增加一条命令:THISFORM.Grid1.SetFocus 修改后的数据表单运行时如图修改后的数据表单运行时如图11-23所示。所示。11.3.5 使用页框使用页框 如果感觉表单界面太狭小,可以在设计时扩大表单,或者为表单

12、添加页面。如果感觉表单界面太狭小,可以在设计时扩大表单,或者为表单添加页面。【例【例11-8】在例】在例11-7的表单中使用页面技术。如图的表单中使用页面技术。如图11-27所示。所示。 设计步骤如下:设计步骤如下: 在在“文件文件”菜单中选择菜单中选择“打开打开”或直接用鼠标单击或直接用鼠标单击“常用工具栏常用工具栏”中的中的“打开打开”按钮,选择例按钮,选择例11-6的表单文件,进入表单设计器。的表单文件,进入表单设计器。 增加页框。将表单中除标题和命令按钮组外的所有控件做增加页框。将表单中除标题和命令按钮组外的所有控件做“多重选定多重选定”(如(如图图11-28)。)。 编写代码。在例编

13、写代码。在例11-6的基础上增加如下代的基础上增加如下代码:码: 页框页框pageFrame1中第一页中第一页page1的的Activate事件代码:事件代码:THIS.txtxh.SetFocus 页框页框pageFrame1中第二页中第二页page2的的Activate事件代码:事件代码:THIS.grdxs.SetFocus 第二页第二页page2中表格中表格Grdxs的的AfterRowColChange事件代码:事件代码:LPARAMETERS nColIndexTHIS.Parent.Parent.Page1.Refresh 另外修改命令按钮组另外修改命令按钮组CommandGro

14、up1的的Click事件代码:事件代码:在原代码后添加如下代码在原代码后添加如下代码:IF THISFORM.PageFrame1.ActivePage = 2 THISFORM.PageFrame1.Page2.Grdxs.SetFocusELSE THISFORM.RefreshENDIFTHISFORM.Refresh11.3.7 编辑表单的设计编辑表单的设计【例【例11-10】修改例】修改例11-9,使之具有增加、删除、编辑记录的功能(如图,使之具有增加、删除、编辑记录的功能(如图11-35) 在例在例11-9的基础上进行修改,具体步骤如下:的基础上进行修改,具体步骤如下: 在表单上增

15、加一个命令按钮组在表单上增加一个命令按钮组CommandGroup2,将其按钮个数属性,将其按钮个数属性ButtonCount改为:改为:3,并依次修改各按钮的,并依次修改各按钮的Caption属性,如图属性,如图11-35所示。所示。 修改第一页中各文本框、编辑框、选项按钮组的属性,见表修改第一页中各文本框、编辑框、选项按钮组的属性,见表11-5。对象对象属性属性属性值属性值说明说明各文本框与编辑框各文本框与编辑框Enabled.F. 假假不可用不可用DisibledBackColor128,255,255浅蓝色背景浅蓝色背景DisibledForeColor0, 0, 0黑字黑字Optio

16、nGroup1Enabled.F. 假假不可用不可用 在表单中增加一个自定义的方法在表单中增加一个自定义的方法disi(),用来控制第一页中输入框的可用与,用来控制第一页中输入框的可用与否。否。 修改数据修改数据环境中数据表的环境中数据表的Exclusive(独占)属性改为:(独占)属性改为:.T. 真,真,BufferModeOverride属性改为:属性改为:2 保守式行缓冲。保守式行缓冲。 编写代码。编写代码。 编写自定义方法编写自定义方法disi()的代码:的代码:LPARAMETERS LTHIS.PageFrame1.Page1.SetAll(Enabled,IIF(L,.T.,.

17、F.),TextBox)THIS.PageFrame1.Page1.SetAll(Enabled,IIF(L,.T.,.F.),OptionGroup)THIS.PageFrame1.Page1.SetAll(Enabled,IIF(L,.T.,.F.),EditBox)THIS.CommandGroup1.Enabled=IIF(L,.F.,.T.) 编写命令按钮组编写命令按钮组CommandGroup2中各按钮的事件代码如下:中各按钮的事件代码如下: Command1的的Click事件代码:事件代码:IF THIS.Caption = 添加添加 THIS.Caption = 保存保存 TH

18、IS.Parent.Command2.Caption = 取消取消 THISFORM.disi(.T.) THIS.Parent.Tag = STR(RECNO() APPEND BLANKELSE THIS.Caption = 添加添加 THIS.Parent.Command2.Caption = 编辑编辑 THISFORM.disi(.F.)ENDIFTHISFORM.PageFrame1.Refresh Command2的的Click事件代码:事件代码:IF THIS.Caption = 编辑编辑 THIS.Caption = 取消取消 THIS.Parent.Command1.Capt

19、ion = 保存保存 THISFORM.disi(.T.) THIS.Parent.Tag = STR(RECNO()ELSE THIS.Caption = 编辑编辑 THIS.Parent.Command1.Caption = 添加添加 TABLEREVERT() THISFORM.disi(.F.) THISFORM.PageFrame1.Page1.RefreshENDIFGO VAL(THIS.Parent.Tag)THISFORM.PageFrame1.Page1.Refresh Command3的的Click事件代码:事件代码:a = MESSAGEBOX(是否确定删除当前记录是否

20、确定删除当前记录?,32+4+256,删除记录删除记录)IF a = 6 THIS.Tag = THISFORM.PageFrame1.Page2.grdxs.RecordSource DELETE NEXT 1 PACK THISFORM.PageFrame1.Page2.grdxs.RecordSource = THIS.TagENDIF 运行表单后,各输入框禁用,只有当按下运行表单后,各输入框禁用,只有当按下“添加添加”或或“编辑编辑”按钮后,各输入框按钮后,各输入框才被启用。此时两按钮分别变为:才被启用。此时两按钮分别变为:“保存保存”和和“取消取消”,按下,按下“保存保存”,可以将,

21、可以将添加的记录或对记录所作的修改存盘,按下添加的记录或对记录所作的修改存盘,按下“取消取消”,则取消所作的添加或修改。,则取消所作的添加或修改。 说明:说明: 方法方法SetAll()为容器对象中的所有控件或某类控件指定一个属性值。为容器对象中的所有控件或某类控件指定一个属性值。 函数函数TABLEREVERT()可以取消对当前记录的修改。可以取消对当前记录的修改。11.3.8 使用下拉列表框使用下拉列表框【例【例11-11】修改例】修改例11-10,在数据环境中增加一个班级代码表,并且使用下拉列,在数据环境中增加一个班级代码表,并且使用下拉列表框来输入班级编号表框来输入班级编号“bjbh”

22、(如图(如图11-36所示)。所示)。 在例在例11-10的基础之上进行修改,具体步骤如下:的基础之上进行修改,具体步骤如下: 修改数据环境,增加班级代码表修改数据环境,增加班级代码表bj,在数据环境设计器中,从,在数据环境设计器中,从xs表中拖动表中拖动“bjbh”字段至字段至bj表,按表,按“bjbh”建立了两个表之间的关系,如图建立了两个表之间的关系,如图11-37所示。所示。 修改表单,删除第一页中输入班级编号的文本框修改表单,删除第一页中输入班级编号的文本框“txtbjbh”,增加一个组合框,增加一个组合框Combo1。另外再将。另外再将“照片照片”删除。删除。 修改组合框的属性,见

23、表修改组合框的属性,见表11-6。对象对象属性属性属性值属性值说明说明Combo1Enabled.F. 假假不可用不可用ControlSourcexs.bjbh数据绑定数据绑定ColumnCount22列列ColumnWidth50,70各列宽度各列宽度DisibledBackColor128,255,255浅蓝色背景浅蓝色背景DisibledForeColor0, 0, 0黑字黑字RowSourceType2 别名别名RowSourcebj数据来源数据来源 修改自定义方法修改自定义方法disi()的代码:的代码:LPARAMETERS LTHIS.PageFrame1.Page1.SetAl

24、l(Enabled,IIF(L,.T.,.F.),TextBox)THIS.PageFrame1.Page1.SetAll(Enabled,IIF(L,.T.,.F.),Optiongroup)THIS.PageFrame1.Page1.SetAll(Enabled,IIF(L,.T.,.F.),editbox)THIS.PageFrame1.Page1.SetAll(Enabled,IIF(L,.T.,.F.),Combobox)THIS.CommandGroup1.Enabled=IIF(L,.F.,.T.) 表单中的控件可以分为两类:与表中数据绑定的控件和不与数据绑定的控件。当表单中的控

25、件可以分为两类:与表中数据绑定的控件和不与数据绑定的控件。当用户使用绑定型控件时,所输入或选择的值将保存在数据源中(数据源可以是表用户使用绑定型控件时,所输入或选择的值将保存在数据源中(数据源可以是表的字段、临时表的字段或内存变量)。要想绑定控件和数据,可以设置控件的的字段、临时表的字段或内存变量)。要想绑定控件和数据,可以设置控件的ControlSource属性。如果要绑定属性。如果要绑定“表格表格”和数据,则需要设置表格的和数据,则需要设置表格的RecordSource属性,见表属性,见表11-7。控件控件作用作用复选框复选框如果如果ControlSource是表中的字段,当记录指针在表中

26、移动时,是表中的字段,当记录指针在表中移动时,ControlSource字段中字段中的的NULL值、逻辑值值、逻辑值“真真”(.T.) 或或“假假”(.F.) 或数值或数值0,1或或2将分别代表复选框被选将分别代表复选框被选中、清除或灰色状态中、清除或灰色状态列列如果如果ControlSource是表中的字段,当用户编辑列中的数值时,实际是在直接编辑字是表中的字段,当用户编辑列中的数值时,实际是在直接编辑字段。要将整个表格和数据绑定,可设置表格的段。要将整个表格和数据绑定,可设置表格的RecordSource属性属性列表框与组合框列表框与组合框如果如果ControlSource是一个变量,用户

27、在列表中选择的值也保存在变量中;如果是一个变量,用户在列表中选择的值也保存在变量中;如果ControlSource是表中的字段,值将保存在记录指针所在的字段中。如果列表中一个是表中的字段,值将保存在记录指针所在的字段中。如果列表中一个项和表中字段的值匹配,当记录指针在表中移动时,将选定列表中的这个项项和表中字段的值匹配,当记录指针在表中移动时,将选定列表中的这个项选项按钮选项按钮如果如果ControlSource是一个数值字段,根据按钮是否被选中,在字段中写入是一个数值字段,根据按钮是否被选中,在字段中写入0或或1。如。如果果ControlSource是逻辑型的,则根据按钮是否被选中,在字段中

28、写入是逻辑型的,则根据按钮是否被选中,在字段中写入“真真”(.T.) 或或“假假”(.F.)。如果记录指针在表中移动,则更新选项按钮的值,以反映字段中的新值。如果记录指针在表中移动,则更新选项按钮的值,以反映字段中的新值。如果选项按钮的如果选项按钮的OptionGroup控件(不是选项按钮本身)的控件(不是选项按钮本身)的ControlSource是一个字是一个字符型字段,当选择该选项按钮时,选项按钮的标题就保存在字段中。记住,一个选符型字段,当选择该选项按钮时,选项按钮的标题就保存在字段中。记住,一个选项按钮(与项按钮(与OptionGroup控件明显不同)的控件源不能是一个字符型字段,否则

29、当运控件明显不同)的控件源不能是一个字符型字段,否则当运行表单时行表单时Visual FoxPro会报告数据类型不匹配会报告数据类型不匹配微调微调微调控件可以反映相应字段或变量的数值变化,并可以将值写回到相应字段或变量微调控件可以反映相应字段或变量的数值变化,并可以将值写回到相应字段或变量中中文本框或编辑框文本框或编辑框表字段中的值在文本框中显示,用户对这个值的改变将写回表中。移动记录指针将表字段中的值在文本框中显示,用户对这个值的改变将写回表中。移动记录指针将影响文本框的影响文本框的Value属性属性 如果没有设置控件的如果没有设置控件的ControlSource属性,用户在控件中输入或选择

30、的值只作属性,用户在控件中输入或选择的值只作为属性设置保存。在控件生存期之后,这个值并不保存在磁盘上,也不保存到内为属性设置保存。在控件生存期之后,这个值并不保存在磁盘上,也不保存到内存变量中。存变量中。 部分通过使用控件完成的任务需要将数据与控件绑定,其他任务则不需要。部分通过使用控件完成的任务需要将数据与控件绑定,其他任务则不需要。 在上面的例子中,因为直接从在上面的例子中,因为直接从“数据环境数据环境”中将字段拖到表单上,系统自动中将字段拖到表单上,系统自动将各字段与相应的控件绑定,无需另外操作。如果是先建立控件,就需要手工操将各字段与相应的控件绑定,无需另外操作。如果是先建立控件,就需

31、要手工操作将控件与相应的字段绑定。作将控件与相应的字段绑定。11.4 定制表定制表 可以在表中设置一个过滤器来定制自己的表,有选择地显示某些记录。还可可以在表中设置一个过滤器来定制自己的表,有选择地显示某些记录。还可以通过设置字段过滤器,对表中的某些字段的访问进行限制,这样可以选择显示以通过设置字段过滤器,对表中的某些字段的访问进行限制,这样可以选择显示哪些字段。哪些字段。11.4.1 筛选表筛选表如果只想查看某一类型的记录,可以通如果只想查看某一类型的记录,可以通过设置过滤器对过设置过滤器对“浏览浏览”窗口中显示的窗口中显示的记录进行限制。在某些情况下,例如只记录进行限制。在某些情况下,例如只想查看销售额高于某一数值的商品,或想查看销售额高于某一数值的商品

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论