使用子数据窗口前需要主窗口是一个下拉数据窗。
子数据窗口也就是下拉数据窗口。子数据窗口也是普通的数据窗口对象,没有什么特殊的地方,它的创建方法、可以使用的控件、编程时可以使用的函数等,都和普通的数据窗口相同。特殊的地方只是因为它放在了父数据窗口中,需要和父窗口进行配合。
当为数据窗口中某字段指定为下拉数据窗口编辑风格时,必须提供以下三个属性:
a.子数据窗口名称。
b.显示字段名称:该字段中的内容显示在父数据窗口的字段上,只是显示。
c.数据字段名称:该字段中的内容要赋给父数据窗口的字段,要保存到数据库中。
下面用一个省市县数据关联作为一个例子说明。
//这里是在主数据窗的clicked事件中
//定义子数据窗口名称
DataWindowChild dwc_province,dwc_city,dwc_home_city
String ls_name,ls_code,ls_comm,ls_comm_del
integer rtncode,li_row,li_count
This.AcceptText()
If dwo.Name = 'name' Then //省
//获得主窗口中的列名,显示字段名称
rtncode = dw_province.GetChild('name', dwc_province)
IF rtncode = -1 THEN MessageBox("Error", "Not a DataWindowChild")
dwc_province.SetTransObject(SQLCA)
dwc_province.Retrieve()
//这里是过滤数据窗条件,数据字段名称
dwc_province.SetFilter("flag = '1' and isNull( comm )")
dwc_province.Filter()
ElseIf dwo.Name = 'comm' Then //市
rtncode = dw_province.GetChild('comm', dwc_city)
IF rtncode = -1 THEN MessageBox("Error", "Not a DataWindowChild")
dwc_city.SetTransObject(SQLCA)
dwc_city.Retrieve()
ls_code = dw_province.Object.name[1]
Select name Into :ls_name From zd_place_new Where code =:ls_code Using SqlCa;
dwc_city.SetFilter(" flag = '1' and comm like '%"+ls_name+"%' ")
dwc_city.Filter()
ElseIf dwo.Name = 'comm_del' Then //县区
rtncode = dw_province.GetChild('comm_del', dwc_home_city)
IF rtncode = -1 THEN MessageBox("Error", "Not a DataWindowChild")
dwc_home_city.SetTransObject(SQLCA)
dwc_home_city.Retrieve()
ls_comm = dw_province.Object.comm[1]
Select name Into :ls_name From zd_place_new Where code =:ls_comm Using SqlCa;
dwc_home_city.SetFilter(" flag = '0' and comm_del like '%"+ls_name+"%' ")
dwc_home_city.Filter()
End If