PB Datawindow函数大全 下载本文

dwchildvariable )

例子1 这段程序取出一个composite数据窗口对象的两个子数据窗口,并对他们进行过滤,和排序的操作。 /*dw_dy是连接一个composite数据窗口对象的一个数据窗口控件。dw_1、dw_2分别是嵌套的数据窗口的NAME*/

String ls_filter

DataWindowChild dwc_czrw,dwc_czx//定义子数据窗口变量 dw_dy.Settranso b j e c t(sqlca) dw_dy.Retrieve()

dw_dy.GetChild(\dw_dy.Getchild(\

ls_filter = \过滤条件 dwc_czrw.SetFilter(ls_filter) dwc_czrw.Filter()

ls_filter = \dwc_czx.SetSort(\dwc_czx.Sort()

dwc_czx.SetFilter(ls_filter) dwc_czx.filter()

当然也可以通过数据共享(ShareData)等方式操作子数据窗口中的数据。 访问复合数据窗口对象.方法 :dw_dy.o b j e c t.dw_1.o b j e c t.对象 例子2 下拉数据窗口动态过滤

在数据窗口dw_1的ItemFocusChanged事件中写入如下脚本: Integer rtncode

String ls_nowFld,ls_deptid,ls_sql DataWindowChild fld_child

rtncode = dw_1.GetChild(\获得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, \//重新设置Sql 语句中的Where条件子句

ls_deptid=dw_1.Object.dept_id[GetRow()] //取得当前dept_id选定值 ls_sql = ls_sql + \//重新设置Sql 语句

fld_child.SetSQLSelect(ls_sql)

fld_child.Retrieve()//取得满足条件的数据

28 从数据窗口中获取数据

单条:假设我们要读取dept_id字段的第一笔数据,可以用下列方式表示∶li_id = dw_1.o b j e c t.dept_id[1]

假设我们要读取第一行中第二个字段的数据,可以用下列方式表示∶ls_name = dw_1.o b j e c t.DATA[1,2] 假设我们要读取dept_id字段的所有数据,可以用下列方式表示∶li_array = dw_1.o b j e c t.dept_id.CURRENT

假设我们要读取过滤缓冲区 (filter buffer) 内dept_id字段的第一笔数据,可以用下列方式表示∶li_id = dw_1.o b j e c t.dept_id.Filter [1]

假设我们要读取从第二笔数据的第一个字段到第三笔数据的二个字段之间的数据,表示∶lstr_array = dw_1.o b j e c t.DATA[2,1,3,2]

假设我们要读取整个第二笔的数据,可以用下列方式表示∶lstr_dept = dw_1.o b j e c t.DATA[2] 使用GetItemX ( )函数 x为string number等

lstr_name = dw_1.getitemstring (li_count , \为哪一条 多条:string ls_name[ ]

ls_name = dw_ 1.o b j e c t.emp_name.current

数据的读取 一般格式∶数据窗口控件.Retrieve ( ) 返回个数 ,-1为错误 增加数据 数据窗口控件.InsertRow (行数) 参数为0加到最后 数据的删除 数据窗口控件.Deleterow (行数) 数据的过滤l 数据窗口控件.SetFilter (条件字符串).

数据窗口控件.Filter ( ) 用法∶将主要缓冲区 (Primary Buffer) 内不符合过滤条件的数据移到过滤缓冲

区 (Filter Buffer) 内。

例子:string ls_exp ls_exp = \= 100\ dw_1.SetFilter (ls_exp) dw_1.Filter ( ) 排序 dw_1.SetSort (\ dw_1.Sort ( ) 将数据从所有的缓冲区 (Buffer) 中清除 dw_1.ReSet ( )

计算数据数目。例如∶dw_1.Rowcount ( ) 类似: .DeletedCount ( ) .ModifiedCount ( ) .FilteredCount ( )

数据窗口的滚动 数据窗口控件.ScrollToRow (行数)

29 数据窗口属性改变:

描述数据窗口对象本身颜色,可以表示如下∶long ll_color ll_color = dw_emplist.Describe (\

描述数据窗口对象内标题 dept_id_t 的颜色,可以表示如下∶long ll_color ll_color = dw_emplist.Describe (\

修改数据窗口对象本身颜色,可以表示如下:dw_emplist.Modify (\ 修改数据窗口对象内标题 dept_id 的颜色,可以表示如下∶dw_emplist.Modify (\255\

假设当我们希望在程序运行阶段才给予下行条件∶薪水超过 50000 时显示红色,低于 50000 时显示黑色。程序的写法如下∶

ls_modstring = \,255,0) '\ dw_1.modify (ls_modstring)

30 得到当前鼠标所指对象所在的带区 string str_band

str_band=GetBandAtPointer() //得到当前鼠标所指对象所在的带区

str_band=left(str_band,(pos(str_band,'~t') - 1))//得到\、\等 if str_band<>'header' then return //单击非头区,退出 31 得到鼠标指向的列对象名

str_o b j e c t=GetObjectAtPointer() //得到当前鼠标所指对象名

str_o b j e c t=left(str_o b j e c t,(pos(str_o b j e c t,'~t') - 1))

//得到列对象名(默认为列名_t为列标题)

str_column=left(str_o b j e c t,(len(str_title) - 2)) //判断该名称是否为列名字

if this.describe(str_column+\非是列名,即列标题不是按正常规律起名的。

32 得到当前行、列,总行、列 //this 针对数据窗口而言 li_col = this.GetColumn()

li_ColCount = long(describe(this,\ ll_row = this.GetRow() ll_RowCount = this.RowCount() //设置当前行、列

scrolltorow(this,ll_Row) setrow(this,ll_Row) setcolumn(this,li_col) this.SetFocus() 33 得到所有列标题

ll_colnum = Long(dw_1.o b j e c t.datawindow.column.count) for i = 1 to ll_colnum //得到标题头的名字

ls_colname = dw_1.describe('#' + string(i) + \ ls_value = dw_1.describe(ls_colname + \next

34 如何用代码取得数据窗口汇总带计算列的值? String ls_value

ls_value = dw_1.Describe(\如果是数值型,要转换。

35 取得单击的列标题、列名、数据库字段名 string ls_dwo long ll_pos