Database 版 (精华区)
发信人: mengy (LEAR DLLS 命令时,将从内存中清除), 信区: Database
标 题: 数据实时筛选在VFP中的实现
发信站: 哈工大紫丁香 (2000年12月06日20:19:58 星期三), 站内信件
数据实时筛选在VFP中的实现
温州 汤元利
---- 数据选择为当前信息管理应用软件提供了准确可靠的数据来源,同时也避免
重复输入提高了软件的可操作性。可是当数据源内容很多的时候其可操作性也显得
很差。比如"下拉框"控件适合数据源为3个至10个左右,当"下拉框"的数据源大于
30个以后选择的可操作性很差可能比重新输入还要来得慢。在此我们可以借鉴于
WINDOWS 的中文输入逐渐提示方式来实时对数据进行筛选,实行输入与选择相结合
的方式来提高数据可操作性。以下笔者在开发应用管理软件中用到的客户信息为例
来介绍数据实时筛选在VFP中的实现。
---- 一、为数据选择创建一个表单(form1),在表单中创建一个文本框(text1)
和列表框(list1),同时为表单增加一个选择事件(sele_data),在fom1.load 事
件中定义一个用来筛选数据源的字符全局变量(m_filt)在form.unload 或form.
release 事件中释放此变量。
---- 二、在表单的数据环境中增加客户信息表并设置自动开启关闭
Thisform.dataenvironment.autocolsetables=.t.
Thisform.dataenvironment.autoopentables=.t.
---- 三、为LIST 列表控件绑定数据源,如客户信息的表名为clinfo.dbf,
客户名称字段名为c_name。
Thisform.list1.rowsourcetype="6 字段"
Thisform.list1.rowsource="clinfo.c_name
---- 四、在text1.Interativechange事件里编写以下程序
*******text1.Interativechange event *************
m_filt=allt(this.value)
sele clinfo
set filter to at(m_filt,cinfo.c_name)=1
thisform.list1.requery()
---- 技巧:
---- 在 form1.text1.controlsource 控制数据源中不能设成m_filt 变量只能在
Interativechang 事件中赋值给变量m_filt,否则筛选内容无法输入。
---- 五、在Fomt1.list1.Dbclick 事件中键入命令
Thisform.sele_date()
Thisform.release()
---- 六、Thisform.sele_date 事件
待选择的变量名=THIS.VALUE
………………
---- 七、Form1 创建成功后,可以直接被其它主窗口调用,但〈待选的变量名〉
必须一致而且是全局变量,还需在主调窗口的activate 事件中增加 Thisform.
refresh() 。
---- 用来当作选择的还有Grid 表格控件,方法基本一致只是显示的可多几列在数
据刷新时不用requery()事件而用表单的refresh()事件即可。
---- 程序在运行时如客户信息不多可以直接从中用鼠标双击进行选择数据,如数
据量较多的话可以在文本框输入前几个字进行筛选,每当键盘输入或删除一个字改
变文本框的值时系统会自动进行数据筛选以缩小选择范围提高操作性。
--
大海无边天做岸
山登绝顶我为风
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.929毫秒