我在软件开发过程中,用Getchild函数曾经出现过一些问题,我想有必要拿出来讨论一下,也请大家引以为戒。 在datawindow中,Getchild函数主要被用来得到一个数据窗口的子数据窗口,格式如下:数据窗口控件名.(列名,用户定义的子数据窗口变量)
如:a)、dw_cx.GetChild(“xt_czy”,dwc_cx)
b)、dw_tj.GetChild(“dw_1”,dwc_tj)
该函数在两种情况下可以使用,1、取出数据窗口对象的下拉式数据窗口;2、取出复合风格(composite)数据窗口对象里所嵌入的子数据窗口对象。
需要注意的是第二种情况,一定要composite风格的数据窗口对象中的子数据窗口才能使用该函数,如果是别的风格的,该函数会返回-1,表示执行失败 。(我曾经用freedom嵌套了一个子数据窗口,然后用GetChild(),结果执行失败。);另外还需要注意的是;如果是composite数据窗口,GetChild()函数的第一个参数是子数据窗口的NAME(需要自己起),而不是子数据窗口对象的名字。如果子数据窗口是下拉式的数据窗口,那么参数就是列名。第二个参数是用户自定义的子数据窗口变量。执行完GetChild()以后,这个变量就是得到的子数据窗口了,可以对他进行过滤,排序等等的操作。
例如,这段程序取出一个composite数据窗口对象的两个子数据窗口,并对他们进行过滤,和排序的操作。/*dw_dy是连接一个composite数据窗口对象的一个数据窗口控件。dw_1、dw_2分别是嵌套的数据窗口的NAME*/
String ls_filter
DataWindowChild dwc_czrw,dwc_czx//定义子数据窗口变量
dw_dy.Settransobject(sqlca)
dw_dy.Retrieve()
dw_dy.GetChild("dw_2",dwc_czrw)
dw_dy.Getchild("dw_1",dwc_czx)
ls_filter = "czrw_bh = '"+dw_3.GetItemString(dw_3.GetRow(),"czrw_bh")+"'"//过滤条件
dwc_czrw.SetFilter(ls_filter)
dwc_czrw.Filter()
ls_filter = "czx_rwbh = '"+dw_3.GetItemString(dw_3.GetRow(),"czrw_bh")+"'"
dwc_czx.SetSort("czx_sx A")
dwc_czx.Sort()
dwc_czx.SetFilter(ls_filter)
dwc_czx.filter()
当然也可以通过数据共享(ShareData)等方式操作子数据窗口中的数据。
Email:oceanaut@163.com