[返回]
中国计算机报1999年第95期
VFP控件和数据的动态绑定
程 琦
一、动态绑定
我们一般在设计表单控件时,在需要对控件绑定数据时,如果控件绑定的数据从表单加载到表单关闭的过程中保持不变时,只需对控件属性窗口中的“RowSource”和“RowSourceType”两个属性进行设置,就可使在表单加载时将控件和数据值绑定,这就是静态绑定。但是,有时我们在设计表单时,有的控件绑定的数据在表单的运行过程中是随着不同的条件而变化,不能让控件和数据在表单加载后就自动绑定,此时我们可以使用动态绑定来解决此类问题。
所谓动态绑定就是将绑定的时间延迟到需要的时候。
二、使用实例
例如,设计一个库存查询表单,数据环境包含两个表,一个是设备名表(Sbm),一个是库存表(Kcb),Sbm表和Kcb表有一个关联字段“设备名”。表单包含了两个组合框Combo1和Combo2,Combo1对应的数据是Sbm表中的“设备名”字段,Combo2对应的数据是Kcb表中“型号”字段,而Combo2显示的型号数据是对应于设备名表中“设备名”字段,即其值是根据Combo1的值来确定的。
当Combo1选择设备名为“计算机”时,Combo2显示的数据应该是Kcb表中所有设备名为“计算机”的型号。由于Combo2的数据是由Combo1的值来确定的,而Combo1的值又是可以变化的,可以为“计算机”、“打印机”等设备名,所以在表单加载时就不能知道用户到底选择哪种设备,因此,在表单加载时无法自动绑定Combo2的值。所以我们就可以采取将Combo2控件与数据动态绑定,来解决以上问题,即当Combo2获得焦点时根据条件将数据和控件绑定。
对以上例子解决的方法是:在Combo2的属性窗口不设置“Rowsourcetype”和“Rowsource”属性,
将以下程序代码加到Combo2的“Gotfocus”事件程序中:
*设置Combo2的数据源是SQL语句
this.rowsourcetype=3
*设置Combo2的数据源类型
*将库存表中设备名对应于Combo1值的型号存放到临时文件mylist中
this.rowsource=′select 型号 from 库存表 where 设备名=Combo1.value;
into cursor mylist′
this.refresh
三、使用优点
对于一个包含许多与数据绑定的控件的表单,如果使用动态绑定技术,使绑定的时间延迟到需要的时候,会大大缩短表单的加载时间。所以,当我们设计高性能的应用软件时,动态绑定这项技术是非常重要的。