河南理工大学电气学院:VFP基础教程 表格
来源:百度文库 编辑:偶看新闻 时间:2024/04/26 23:08:46
一。表格(grid):表格类似于一个浏览器,是按行和列操作和显示的容器,类似于我们在第二章中使用browse命令弹出的browse窗口。在实际应用中,可用表格来浏览或编辑表文件记录内容。若浏览或编辑表中的记录,须在主程序中打开表文件。用表格显示记录时,表格的每一行显示一条记录,每列显示一个字段。运行时,在表格中通常使用鼠标的单击定位,然后可对选择的内容进行编辑或修改,修改后的内容自动存到表文件中。如果表格的宽度不足以显示全部字段,可用鼠标拖动表格下面的滚动条或单击表格下面的左右箭头进行调整。
一个表格对象包含一个表头(header)对象和一个或多个列数据操作对象。表头对象用于列的标题的显示内容和格式。数据操作对象是对列数据进行操作时所选用的控件。在设计阶段,系统自动加入一个文本框对象作为列数据操作对象,用户可加入其他控件对象。例如,某列对象与表中的逻辑型字段绑定,如在该列中以检查框的形式编辑和显示,则应在该列中加入一个检查框(check)控件。一个列中如有一个以上的数据操作对象,则应设置列对象的 currentcontrol属性确定当前使用哪一个。
二。表格的常用属性如下:
属性 作用 columncount 列数.如columncount为-1,运行时表格将具有和记录源中字段一样多的列 deletemark 是否具有删除标记 recordsourcetype 表格中显示记录的类型(记录源类型).参数如下:0-表,1-别名,
2-查询(.qpr),3-提示,4-sql说明 recordsource 对应recordsourcetype的名称(记录源) childorder 与父表主关键字相连的子表中的外部关键字 linkmaster 表格中显示子表的父表.
三.表格常用的方法:
四.表格中列对象的常用方法:
属性 作用 controlsource 列控制源 currentcontrol 列接收和显示数据使用的控件 sparse currentcontrol指定的控件是否影响整个列
.T.--只有在列中的活动单元格才以currentcontrol指定的控件接收和显示数据,其他单元格用文本框显示.
.F.--列中所有单元格均以currentcontrol指定的控件显示数据,活动单元格接收数据
说明:列还可用inputmark,format和alignment等属性控制数据的输入内容、显示格式和对齐方式。如要进行有条件的格式编排,可使用一组动态格式设置属性。例如,Dynamicfontname、Dynamicfontsize、Dynamicforecolor设置动态字体,字号和颜色。
五.表头对象常用属性:
属性 作用 caption 列标题文本 alignment 列标题文本的对齐方式
在表格中不仅能显示字段数据,还可以在表格的列中嵌入文本框、复选框、下拉列表框、微调按钮及其他控件。比如,假设表中有一个逻辑型字段,当运行表单时,使用复选框显示其记录值"真"或"假"(.T.或。F.), 比使用文本框更加直观,修改这些字段的值只需设置或清除复选框即可。
用户可在"表单设计器"中交互地在表格中增删列和在列中交互式添加控件和删除已加入列中的控件。 六。表格中列的选择:
1.选择表格,右击表格,在菜单中选择"编辑",此时表格进入编辑状态
2.在表格的编辑状态下,单击列的表头区即选择列的表头对象,若单击列的非表头区则选择该列。
3.可设置列的controlsource属性为表中的相应字段名。
七。表格中列的增删及移动:
在表格的编辑状态下,按Delete键即删除该列。列删除后,表格的columncount属性值会自动减一。
八。在表格中增加列:选中表格,在"属性"窗口中,改变表格的columncount属性值即可。
九。在表格的列中增加控件:
1.右击表格,选菜单中的"编辑"命令,使表格进入编辑状态。
2.在表格的编辑状态下,点击表格中某一列的非表头区,即选择了该列
3.选"表单控件工具"栏中的某一个控件,然后单击该列对象,即将该控件加入到该列中。
1.在"属性"窗口的"对象"列表框选择要移动的控件。
2.按delete键即可将该控件删除。
十一。除了交互式向表格中添加控件外,也可以通过编写代码在运行时添加控件。使用 addcolumn方法向表格中添加列,addobject方法向表格列中添加对象,removeobject方法删除表格中的对象。设置 allowheadersizing和allowrowsizing属性为。T.,使运行时可改变表头和行的高度。
十二。设置表格的记录源: 如果需要在表格中显示或修改表文件的内容,必须在设计时为表格指定数据源,方法如下:选择表格,然后在"属性"窗口中选择 recordsourcetype属性。如果我们将表格的recordsourcetype属性设为"1-别名",然后选择recordsource属性,输入一个表文件名作为属性值,则在包含该表格的程序运行时,该表文件自动打开,其中的记录显示在表格中。
十三。设置列数据源:如果在列中显示一个指定的字段,则可为该列单独设置数据源。首先,右击表格,选"编辑"命令,然后单击选中要设置数据源的列,在"属性"窗口中将其controlsource属性设置为相应的字段名。
十四。添加记录:表格(grid)控件有一个非常重要的属性:Allowaddnew.在设计阶段,如果我们将表格的allowaddnew属性设为。T.,则在运行时,当用户选中了表格中显示的一条记录,并且按一下向下的方向键,则在作为表格数据源的表文件中就会添加一条空白记录。如在程序代码中使用append blank或insert等命令来添加新记录,则应将表格的allowaddnew属性设为。F
十四。创建一对多表单:表格常见的用途之一是当表单中的文本框显示父表记录时,表单显示子表记录;当用户在父表中浏览记录时,表格中显示的子表的记录也随之变化。1.具有数据环境的一对多表单:
(1).从"数据环境"中的父表将需要的字段拖动到表单中(拖字段)
(2).从"数据环境"中将相关的子表拖到表单中(拖动"数据环境"中表的标题到表单中,自动生成一个表格,该表格的数据源等属性均不用另行设置了。要牢记)
2.没有数据环境的一对多表单:
(1).在表单中加入若干个文本框,分别设置文本框的controlsource属性为主表的相应字段。
(2).在表单中添加一个表格,将表格的recordsource属性设置为相关表(子表)的名称。
(3).设置表格的linkmaster属性为主表的名称。
(4).设置表格的childorder属性为相关表中索引标识的名称,索引标识名和主表中的关系表达式相对应。
(5).将表格的relationespr属性设为联接相关表和主表的表达式。例如:如果childorder标识以"KHXM"建立的索引,应将relationexpr也设置为相同的表达式。
十五。表格生成器:
1. 右击表单上的表格控件,在快捷菜单中选"生成器"命令,可以启动"表格生成器".
2.在"表格生成器"的"表格项"选项卡中,可以在"数据库和表"列表中选择一个默认目录中的数据库或表;若想打开其他目录中的数据库或表,可单击该列表框右侧的"…",在弹出的"打开"对话框中选择一个表打开。打开表后,VFP会自动将其所有字段放入"表格项"选项卡的"可用字段"列表中,用户可以选择所需字段添加到"选定字段"列表中。使用其中的双箭头按钮可将所有可用字段一次全部添加到选定字段列表中。如图43
3.在"样式"选项卡中,VFP提供了5种样式,其默认值为"保留当前样式",另外4种样式为专业式,标准式,浮雕式和账务式,当选择其中一项时,在对话框左侧会预览出其效果。如图44
4.在"布局"选项卡中,可以调整和设置行与列。拖动列标题的右边线可调整列宽;拖动行的下边线可调整行高;在"标题"文本框"中可为列设置其caption(标题)属性;在"控件类型"列表框中可改变列的控件类型。如图45
十六。例:按性别和职称过滤编辑"职工档案"表的数据
1.新建一个表单,将其caption属性设为"表格的应用",autocenter设为。T.
2.向表单中添2个label控件,将它们的caption属性分别设为"性别"和"职称",然后向两个label控件后分别添加两个组合框控件combo1和combo2,如图46
3.右击表单空白处,选"数据环境"命令,将"职工档案。DBF"添加到表单的数据环境中。
4.在数据环境中,如图47,
拖动"职工档案。DBF"的标题栏到表单空白处,即自动生成一个表格。注意:此处一定要拖动数据环境中表的标题栏,如果拖动的是表中的字段,则在表单上生成的是文本框和标签。
5.在表单中适当调整表格的大小,并将该表格的name属性改为grid1(为了在程序代码中引用方便),调整后的界面如图48
6.选中组合框combo1,在"属性"窗口中将其rowsourcetype属性改为"1--值",再选中rowsource属性,在上方文本框中输入值:"男,女",如图49.
同样方法,将combo2的rowsourcetype属性设为"1--值",将rowsource属性设为"教授,讲师,副教授".注意:输入rowsource属性值时,逗号分隔的是要在组合框中显示的每一个选项,且必须用英文标点。
7.编写代码:
*combo1的interactivechange事件(用鼠标选择列表项时产生的事件)代码:
set filter to 职工档案。性别=alltrim(thisform.combo1.value)
thisform.grid1.refresh
*combo的interactivechange事件代码:
set filter to 职工档案。职称=alltrim(thisform.combo2.value)
thisform.grid1.refresh
8.保存并运行表单,可发现,当我们在组合框中选择时,比如我们在combo1中选择了"男",则在表格中就将"职工档案。DBF"中的男性记录列出来。
9.分析:此例中,从数据环境中拖动所需的表到表单上,即自动生成表格,且该表格的rowsourcetype和rowsource等属性都不必再设置, 系统自动将其recordsourcetype和recordsource属性设置为生成这个表格的表文件"职工档案。DBF