复合数据窗口的子数据窗口进行相关编程操作

子数据窗口编程 (结合网络资料)

  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() 

String ls_filter1,ls_filter2
DataWindowChild dwc_1,dwc_2//定义子数据窗口变量
tab_1.tabpage_3.dw_3.GetChild( "dw_2",dwc_2)
tab_1.tabpage_3.dw_3.Getchild( "dw_1",dwc_1)
ls_filter1 = "cw_jy > 0 and cy_jy > 0"//过滤条件
dwc_1.SetFilter(ls_filter1)
dwc_1.Filter()
ls_filter2 = "compute_0004 > 0 and compute_0005 > 0"
dwc_2.SetFilter(ls_filter2)
dwc_2.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()//取得满足条件的数据

注:如果对访问复合数据窗口对象.方法 :dw_dy.object.dw_1.object.对象仅仅限于对象属性的修改,

比如: dw_list.object.dw_1.object.l_26.visible = false
dw_list.object.dw_1.object.l_27.visible = false

不能进行:// dw_list.object.dw_1.setfilter("po_no = '12'")
// dw_list.object.dw_1.filter()string setting
seting= "新sql "(语句就不写了)
dw_print.object.rpt_head.object.datawindow.table.select=setting
运行时系统报错,说“访问对象属性出错error accessing external object property”

问:在数据窗口对象画板中可以设定列的编辑风格为下拉数据窗口(DropDownDataWindow),请问在程序中可以动态实现这项功能吗?
答:可以的,假设所设定列为部门号"department_id",相关连的子数据窗口为"d_dddw_dep",显示列为部门名称"dept_name",数据列为部门号"dept_id",实现方法如下:
dw_1.Modify("department_id.DDDW.Name=d_dddw_dep ")
dw_1.Modify("department_id.DDDW.DisplayColumn='dept_name' ")
dw_1.Modify("department_id.DDDW.DataColumn='dept_id' ")
或:
dw_1.object.department_id.dddw.name = "d_dddw_dep"
dw_1.object.department_id.DDDW.DisplayColumn = "dept_name" dw_1.object.department_id.DDDW.DataColumn = "dept_id"
注:PowerBuilder有一个小工具DWSyntax(程序名为:dwsyn60.exe),提供了获得及修改数据窗口、列等的各项属性值的语法,对编程非常有帮助。上述脚本在DWSyntax中都能找到。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值