Getchild函數主要被用來得到一個數據窗口的子數據窗口該函數在兩種情況下可以使用,
1、取出數據窗口對象的下拉式數據窗口;
2、取出複合風格(composite)數據窗口對象裏所嵌入的子數據窗口對象。
語法:integer dwcontrol.GetChild (string name, REF DataWindowChild dwchildvariable )
例子1 這段程序取出一個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)等方式操作子數據窗口中的數據。訪問複合數據窗口對象.方法 :dw_dy.object.dw_1.object.對象
例子2 下拉數據窗口動態過濾
在數據窗口dw_1的ItemFocusChanged事件中寫入如下腳本:
Integer rtncode
String ls_nowFld,ls_deptid,ls_sql
DataWindowChild fld_child
rtncode = dw_1.GetChild("Unit_id",fld_child) //獲得Unit_id字段名下拉數據窗口的句柄
If rtncode = -1 Then MessageBox("錯誤!", "不是下拉數據窗口!")
fld_child.SetTransObject(SQLCA) //設置事務對象
ls_sql = Lower(fld_child.GetSQLSelect())// 獲得DDDW的SQL語句
// 去除Sql 語句中的Where條件子句, 如原Sql 語句中須有Where條件子句,此處則需進行較
//複雜的處理,應視具體情況而定。
if Pos(ls_sql, " where ")>0 then ls_sql = Left(ls_sql,Pos(ls_sql, " where "))
//重新設置Sql 語句中的Where條件子句
ls_deptid=dw_1.Object.dept_id[GetRow()] //取得當前dept_id選定值
ls_sql = ls_sql + " Where dept_id = '" +Trim(ls_deptid)+"'"
//重新設置Sql 語句
fld_child.SetSQLSelect(ls_sql)
fld_child.Retrieve()//取得滿足條件的數據