网络开发 调用API函数 报表打印 常用技术 经验汇总 控件使用 软件工程 数据处理
您的位置:首页 >> vfp教程 >> 网上文摘 >> 控件使用 >> 正文

VFP常用控件的运用技巧-表格
出处:网络

  Grid是Vfp中功能十分强大的常用控件之一, 它与Browse比使用更方便灵活、功能更强大,正因为如此,要全面掌握并用好它还得下一番工夫,我也没完全掌握它,下面只是我在常规用法上的 一点体会,同时在此感谢网友熊昕(HR)的大力支 持,也十分希望其他网友能鼎立相助。

  1.如何使已逻辑删除的记录从Grid中彻底删除(pack)?
  我们知道在当SET DELE ON时,可以使已逻辑删除的记录从Grid中隐藏起来,但并没有真正从数据表中删除,只有执行了pack命令,才真正删除这 些记录,然而当Grid绑定该数据表时,执行pack命令,会使Grid 出现一片空白,究其原因,是因为执行pack命令时,系统会先关闭该数据表,执行完pack 再打开,而绑定Grid的数据表一旦关闭,Grid 由于失去了数据来源,就会出现一片空白,即使再打开也无济于事,除非重新创建和设置Grid的各项属性。
  知道了它的原理,那也就有了解决的办法:
  A.用代码重新创建Grid,并设置其各项属性:

thisform.addobject('grid1','grid')
thisform.grid1.visible=.f.
with thisform.grid1
  .top=30
  .left=10
  .width=240
  .columncount=10
  .height = 203
  .deletemark = .f.
  .scrollbars = 2
  .recordmark = .f.
  .column1.width = 150
  .recordsource = 'shjb'
  .column1.controlsource = 'shjb.name'
  .column1.currentcontrol = 'text1'
  .column1.alignment = 0
  .column1.header1.caption = '单位'
  .column1.header1.alignment = 2
  .column2.width = 80
  ......
  .column10
  .width = 80
endwith
thisform.grid1.visible=.t.
thisform.grid1.setfocus

可以看出用这种方式比较麻烦,ColumnCount属性等于几,就得设置几个,调试不方便。

  B.既然关闭数据表不行,那我们可不让它关闭,只要能达到彻底删除记录的目的就行:

sele xxx   &&XXX=绑定的数据表
copy TO lsshjb for not deleted()
*将没有删除标志的记录复制到lsshjb.DBF

zap &&删除所有记录,zap命令不关闭库
Append from lsshjb
*再把刚才没有删除记录的lsshjb.DBF追加到XXX
thisform.grid1.setfocus &&刷新grid
可以看出这种方式简单,是利用了zap命令不关闭数据表的特性,其速度和PACK相差无几。
  2.如何突出显示符合要求的记录?
  Grid有个SetAll方法,用来为Grid中的所有控制指定一个属性设置。
  Grid还有个AfterRowColChange事件,当用户移到表格的另一行或列时,新单元获得焦点以及新行或列中对象的 When事件发生后,发生此事件。如果新行或列中对象的When事件不返回“真”, 则不触发 AfterRowColChange 事件。
  A.使获得焦点的整个一行随着焦点的上下移动,而用不同的前景色突出显示当前行。
  在Grid的AfterRowColChange事件里写:
this.SetAll('DynamicForeColor',;
  'iif(this.activerow=recn(),RGB(0,128,64),RGB(0,0,0))',;
  'Column')
  B.使符合条件的整个一行,即使Grid没有焦点也用不同的前景色突出显示。
  比如一绑定Grid的数据表,有一字段BH,另有一 Text控件,那我们可以在Text.LostFocus事件里写:
thisform.grid1.SetAll('DynamicForeColor',;
  'iif(Allt(Text.Value)=recn(),RGB(0,128,64),RGB(0,0,0))',;
  'Column')
thisform.grid1.Refresh
  C.使整个一列突出显示:
  比如thisform.grid1.Columns(1).ForeColor=RGB(255,0,0)使GRID的第一列全部为红色前景色。
  3.如何在Grid里增加和删除记录?
  这里有网友HR提供的具体实例下载。
  在这个实例中除了针对Grid的增加和删除操作外 还有如何在程序中建立和使用右键弹出快捷菜单的具体代码,很有实用性哦。
  这里讲的只是常见的Grid使用中的一点点,十分欢迎您提出您的经验和看法,使我们共同提高。
 4.当GRID等控键的ReadOnly=.T.时,如果用户想改变其值,系统会出现“此控件只读!”的提示,如果我们不想让其出现,则: set notify off
如果在TEXT的Valid中判断其值不符要求而RETU .F.时,系统也会出现“无效输入”的提示,除用上面的办法可避免其出现外,如果用RETU 0来代替RETU .f.同样可避免其出现。

  我所写出的代码可能不是最合理和最精练的,只是提出一种思路或方法供大家参考,我准备把自己几年来在VFP中的编程笔记分几个类别分批整理出来,希望能对您有所帮助。

                    江苏 常州 老王 99.11.01
                      E-mail:cfyns@163.net

[返回]

     

首页 | 设为首页 | 加入收藏 | 关于本站 | 友情链接 | 版权声明

     
 
Copyright© www.bianceng.cn Powered by 编程入门网 All Rights Reserved
吉ICP备06005558号