本站首页    管理页面    写新日志    退出


«October 2025»
1234
567891011
12131415161718
19202122232425
262728293031


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接

我的博客

Blog信息
blog名称:fermos_blog
日志总数:73
评论数量:261
留言数量:30
访问次数:398750
建立时间:2005年3月27日




VFP中焦点行的动态显示
软件技术

fermos的博客 发表于 2005/9/8 8:03:41

VFP中焦点行的动态显示 http://www.pcdog.com 2004-10-28 互联网 李明亮在用VFP设计一个应用系统时,信息的浏览是其中一个相当重要的功能。人们一般用Grid对象来显示数据信息,但该对象在使用功能上却存在一些不足。 提出问题 当使用者在记录之间移动焦点时,只有获得焦点的记录的某一个字段以不同于Grid背景的颜色显示。为使整条记录均用同一种颜色突出显示(本文示例为蓝色背景),即当数据记录移动时,用颜色动态 500)this.width=500'>变化显示相对光标所在记录的位置,可以在Grid对象的afterRowColChange事件过程中加入如下内容: this.setall(“dynamicbackcolor”,“iif(this.activerow=recno(),rgb(0,0,255),rgb(255,255,255))”,“column”)。 笔者在使用中发现:如果设置了Set delete on环境参数,则当逻辑删除记录后,动态背景的颜色显示就会出现混乱。 分析问题 这种情况一般有两种解决方法: ●执行pack命令,再重新创建和设置Grid的各项属性; ●先将没有删除标志的记录复制到一个临时表中,用zap命令删除源表中所有记录,再将没有删除标志的记录从临时表追加到源表中。 这两种方法实质上都是把已逻辑删除的记录从数据表中真正删除,缺点是两种方式都要求该表必须以独占方式打开。 如果表是以共享方式使用,那么又该如何处理呢?其实,动态背景颜色不能正确显示的原因是由于逻辑删除记录,该操作造成光标所在的行activerow()不等于数据的记录号recno(),从而导致了动态背景颜色的显示出现混乱。笔者通过两个表的关联成功地解决了这一难题。 解决问题 我们以一个实际的例子来说明如何解决这一问题。设有一个表cenji.dbf,表的字段分别为:学号、姓名、姓别、成绩。新建一个表单,并创建一个Grid对象,设置Grid对象的recordsource属性为cenji,在Grid对象的afterRowColChange事件过程中添加如下代码: LPARAMETERS nColIndex if this.activerow = recno() this.setall(“dynamicbackcolor”, “iif (this.activerow=recno(), rgb(0,0,255),rgb(255,255,255))”,“column”) else select 学号from cenji where .not. deleted() into cursor temp_table select temp_table index on 学号 tag xh set relation to 学号 into temp_table in cenji sele cenji this.setall(“dynamicbackcolor”,“iif(this. activerow=recno(‘temp_table'), rgb(0,0,255),rgb(255,255,255))”,“column”) endif thisform.refresh 在上述代码中,当逻辑删除记录造成光标所在的行activerow()不等于数据的记录号recno()时,只需对数据建立一个关联子表,当记录指针在父表cenji中移动时,子表temp_table的记录指针移到学号相同的记录上。子表的记录号是不包括逻辑删除记录的,保证了光标所在行的子表记录号recno(‘temp_table')等于光标所在的行activerow(),从而使该行动态背景颜色能正确显示。本文为了说明方便, 在afterRowColChange事件过程中建立子表,实际上最好在Delete等命令之后建立。 另外,当activerow属性与recno()函数配合使用动态显示背景颜色时,一般会提示用户“请不要在所显示的记录中设定主索引”,否则不能正确动态显示。实际上,按照如上方法,同样可以解决这一问题。 设表cenji.dbf中,按成绩字段建立一个主索引,在Grid对象的afterRowColChange事件过程中写下如下代码: LPARAMETERS nColIndex select 学号 from cenji into cursor temp_table order by 成绩 desc select temp_table index on 学号 tag xh set relation to 学号 into temp_table in cenji this.setall(“dynamicbackcolor”,“iif (this.activerow=recno(‘temp_table’), rgb(0,0,255),rgb(255,255,255))”,“column”) thisform.refresh 同样,不一定要在Grid对象的afterRowColChange事件过程中建立关联子表temp_table。 本文代码在中文版Windows 98和Visual Foxpro 6.0中运行通过。 500)this.width=500'>


阅读全文(1872) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144791350 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号