1、GRID 的使用技巧1.如何在 GRID 里控制回车事件 在 VFP 里,GRID 的默认控件都是 TEXTBOX,形成了一个表格,但是在这个二维表里进行操作时,每次按回车都是往后一个单元格跳转,当到最后一列时,则继续跳到第一列,进而循环,操作很不方便。下面说明如何在 GRID 里的一个列里按回车使记录连续往下跳转(或可以执行其他的操作) ,当跳转到最后一行时执行另一个操作。、对 GRID 所在的表单新增属性:cur_recn 记录当前记录号cur_recc 记录最大记录号2、在表单初始化,或给 GRID 以数据源时,就先计算出该表的最大的记录数,如下:thisform.cur_recc=re
2、cc()为了一次得到当前 GRID 里的表的记录总数3、在 GRID 的 AfterRowColChange 事件里写:thisform.cur_recn=recn()为了得到当前的 GRID 里的表的记录号4、在 GRID 里的某列的 TEXT1 的 KEYPRESS 事件里:if nKeyCode = 13 FROM gzhz WHERE danwei = this.value AND yea = thisform.cboyea.Value ;INTO dbf dwgz ORDER BY monthisform.grid1.RecordSource = dwgz其实就是:先 hsiform
3、.grid1.recordsource = null经过表操作(删除、变动等)后 hisform.grid1.recordsource =dbfname5.关于 Grid 的绑定数据源问题(用临时表绑定)thisform.grid1.recordsource=“SELECT 学号,姓名 FROM tblStudent INTO CURSOR temporarythisform.grid1.recordsource=“temporary“thisform.grid1.refresh()具体解释如下:thisform.grid1.recordsource=“这一行的目的是让 grid1 在整个SE
4、LECT 学号,姓名 FROM tblStudent INTO CURSOR temporary期间不随 temporary 表的变化而变化 ,INTO CURSOR temporary 实际上有多个动作,先清除原临时表 temporary,再生成新的 temporary 表,thisform.grid1.recordsource=“这行的目的是让 GRID1 在全过程中和临时表 temporary 断开,不受它的影响.当全部操作完后再用thisform.grid1.recordsource=“temporary“连接上去,最好在这句前加上一句,select temporarygo top这样
5、如果 temporary 有多条记录的话不会出现指针在末尾而看不到第一条记录的情况( 不好看),thisform.grid1.refresh()这句基本上可以不要的 ,在大多数情况下不会出错,只有在查询后紧跟其它对 grid1 数据集调用指令的会出错.6.grid 控件的使用技巧(应用 setall()方法统一设置)(1)禁止用户用鼠标去调整各个 column 的位置顺序 在 grid 的 init 事件程序中输入以下代码: this.setall(“movable“,.f.,“column“) (2)禁止用户用鼠标去调整各个 column 的宽度 在 grid 的 init 事件程序中输入以
6、下代码: this.setall(“resisable“,.f.,“column“) (3)使 grid 中各个 column 的标题文字自动居中 在 grid 的 init 事件程序中输入以下代码: this.setall(“alignment“,2,“header“) (4)建立求平均栏 假设一个存放了成绩数据表(包括:姓名、语文、数学、政治字段) ,欲在 grid 中增加一个“平均分” 直栏,只需将 grid 的 columncount 属性加 1,然后将“平均分”栏的controlsource 属性设为如下: controlsource=(语文+数学+政治)/3 (5)根据用户选定的
7、column 进行排序 有时希望单击 column 的标题,就以此 column 的字段进行排序显示记录。我们可以在各个column 的 header 对象的 click 事件中,将数据环境中的 cursor 对象的 order 属性设定成根据这个 column 的字段建立的索引名称,然后再调用 grid 的 refresh 方法即可。例如:thisform.dataenvironmnet.cursor1.order=“姓名“ thisform.grid1.refresh (6) Grid 对象中焦点行的动态显示 Grid 对象中当数据记录移动时,用颜色动态变化显示相对光标所在记录的位置,可以
8、在Grid 对象的 afterRowColChange 事件过程中加入如下内容: this.setall(“dynamicbackcolor”,“iif(this.activerow=recno(),rgb(0,0,255),rgb(255,255,255)”,“column”)。(7)在网格中交替显示颜色记录号有序排列时,可以在网格的列中交替显示白色和灰色的记录,代码如下:THIS.SETALL(“DynamicBackColor“,“IIF(MOD(RECNO(),2)=0,RGB(255,255,255),RGB(223,250,253)“,“Column“) &设置隔行的不同背景颜色
9、:。(8) 符合条件的记录显示颜色进行查询时,想在网格中动态地显示符合条件的记录的颜色,可以充分利用DynamicBackColor 和 DynamicForeColor 特性。例如:在宅基地管理系统中,使被注、撤销的记录呈现红色,可在 grid1 的 init事件和 afterrowcolchange 中添加下列代码 : (注意:加不加 ,“column“都可以)this.SetAll(“DynamicforeColor“,“IIF(是否被注(撤)销=是,rgb(255,0,0),rgb(0,0,0)“) &使被注撤销的记录显红色(9)设置多种颜色(无规律性)例如:在宅基地管理系统中,使被注
10、、撤销的记录呈现红色,可在 grid1 的 init事件和 afterrowcolchange 中添加下列代码 : (注意:加不加 ,“column“都可以)this.SetAll(“DynamicforeColor“,“IIF(是否被注(撤)销=是,rgb(255,0,0),rgb(0,0,0)“) &使被注撤销的记录显红色主要是针对一个表 GRID 里,当记录很多时,而且某些记录具有特定的属性时,我们需要设置颜色来区分这些数据,如下代码可以在刷新或初始化表单时,设置其属性。thisform.Grid1.SetAll(“DynamicBackColor“,“IIF(type=1,iif(ty
11、pe=2,iif(type=3,rgb(0,128,0),rgb(192,192,192),rgb(255,0,0),rgb(255,255,255)“)如上代码可以说明,如果某记录中有一个字段 type,那么根据这个字段的数据值,可以显示不同颜色,可以转换成如下公式:iif(条件 1,iif(条件 2,iif(条件 3,iif(条件 4,iif(条件 5,.iif(条件 N,颜色 N,颜色 n-1).,颜色 5,颜色 4),颜色 3),颜色 2),颜色 1),其他颜色)(10)用 SetAll 方法。例如,你决定为全部网格中的标题设置 9 号宋体。将以下代码放入网格的 Init 事件: TH
12、IS.SETALL(“FontName“,“Arial“,“Header“)(11)其他(在土地抵押管理系统中使用的)this.setall(“forecolor“,rgb(0,0,0),“header“) &改变 grid 列头的前景色this.setall(“backcolor“,rgb(202,225,213),“header“) &改变 grid 列头的背景色this.setall(“alignment“,2,“header“) &使 grid 中各个 column 的标题文字自动居中this.setall(“alignment“,2,“column“) &使 grid 中各个 col
13、umn 内的文字自动居中this.setall(“resizable“,.f.,“column“) &禁止用户用鼠标去调整各个 column 的宽度this.setall(“movable“,.f.,“column“) &禁止用户用鼠标去调整各个 column 的位置顺序7.怎么才能让 grid 的光标自动移动到要编辑记录上?如 grid 显示的表为 aaaa 记录有:学号 姓名001 王一002 王二003 王三。 。 。 。 。 。240 王动。 。 。 。 。 。 在表单 textbox 中输入“240“后,让光标自动到学号为“240 ”的记录(且 grid 能够自动滚动到此记录显示-)
14、在 cmdGo 的 click 事件中,用以下代码:sele aaloca 学号=thisform.textbox.valuethisform.grid.setfocus8、我怎样才能把网格中的文本控件替换为其它控件?答:首先,先把原来的文本框控件删除。1:在您要修改的网格上按下鼠标右键,选择弹出菜单中的“属性.”2:在弹出的属性对话框顶端的列举框中选择要替换文本框的 column 下的 text1。3:在网格上按一下鼠标左键。4:按下键盘上的 DELETE 按键,删除 Text1 控件( 网格上的 ab1 将会消失) 。其次,在网格上添置控件。1:在您要修改的网格上按下鼠标右键,选择弹出菜单
15、中的“编辑.”2:按一下表单控件工具栏上您要加到网格上的控件。3:在您要添置控件的 column 上按下鼠标左键,并放置控件。9.如何在表格控件中用颜色区分特定的记录?在 GRID 表格里不同的条件可以用不同颜色的背景或字体来分开吗?回答是肯定的。那么如何实现呢?在 VFP 里有几个有关表格的属性:Column.DynamicBackColor = cExpressionColumn.DynamicForeColor = cExpression它们是用来改变表格控件中某个单元格背景和前景的色彩。另外还有两个相关属性:Grid.SetAll(“dynamicbackcolor“, “RGB 值“
16、, “Column“)Grid.SetAll(“dynamicforecolor“, “RGB 值“, “Column“)它们是用来改变整个表格的背景和前景颜色的,可用它们来对颜色进行表格初始化。下面的示例很简单,就是对一个表格中年龄大于 30 岁的记录用红色加以标记。对表单 FORM1 的 Activate 事件编程如下:oGrd = THISFORM.grdoGrd.SetAll(“dynamicbackcolor“, “, “Column“)oGrd.SetAll(“dynamicforecolor“, “, “Column“)oGrd.SetAll(“dynamicforecolor“
17、, “RGB(0,0,0)“, “Column“)FOR i = 1 TO oGrd.ColumnCountIF i = 4oGrd.Columns(i).dynamicbackcolor = “IIF(age30, RGB(255,0,0), RGB(255,255,255)“ENDIFENDFORoGrd.Refresh在 GRID 表格里不同的条件可以用不同颜色的背景或字体来分开吗?回答是肯定的。那么如何实现呢?在 VFP 里有几个有关表格的属性:Column.DynamicBackColor = cExpressionColumn.DynamicForeColor = cExpress
18、ion它们是用来改变表格控件中某个单元格背景和前景的色彩。另外还有两个相关属性:Grid.SetAll(“dynamicbackcolor“, “RGB 值“, “Column“)Grid.SetAll(“dynamicforecolor“, “RGB 值“, “Column“)它们是用来改变整个表格的背景和前景颜色的,可用它们来对颜色进行表格初始化。下面的示例很简单,就是对一个表格中年龄大于 30 岁的记录用红色加以标记。对表单 FORM1 的 Activate 事件编程如下:oGrd = THISFORM.grdoGrd.SetAll(“dynamicbackcolor“, “, “Column“)oGrd.SetAll(“dynamicforecolor“, “, “Column“)oGrd.SetAll(“dynamicforecolor“, “RGB(0,0,0)“, “Column“)FOR i = 1 TO oGrd.ColumnCountIF i = 4oGrd.Columns(i).dynamicbackcolor = “IIF(age30, RGB(255,0,0), RGB(255,255,255)“ENDIFENDFORoGrd.Refresh
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。