用数据窗口控件名.describe("Evaluate('计算公式',行号)") 理论上可以取到数据窗口里所有能用计算列计算的内容,
如:
1、取数据窗口的页数: dw_1.describe("Evaluate('pagecount()',1)")
2、取DropDownDW列显示的值: dw_1.describe("Evaluate('lookupdisplay(列名)',行号)")
3、取最小值: dw_1.describe("evaluate('min(billing_date_time)',1)")
4、求合计: dw_1.describe("evaluate('sum(charges for all)',1)")
说明:
Describe
可以描述DW中某个对象的某个属性的取值,虽然函数Describe可以获取对象的信息,但是表达式的取值就不能
正常读取了,而这又是经常遇到的。当行号为0时,表示应用于所有的行;如果表达式无效,返回结果为!
Evaluate
如果想获取数据窗口对象中由属性、函数等构成的表达式的取值时,必须在函数Describe中使用函数
Evaluate,LookUpDisplay
在数据窗口控件上显示的值和字段实际得到的值并不相同,使用函数GetItemX只能读取这样的字段的真实取值,而不是用户看到的值。如何才能读取用户看到的值?可以使用此函数,LookUpDisplay函数不能直接从PowerScript调用,可以在Describe中和Evaluate函数配合使用。因为函数Lookupdisplay不能指定对哪行数据进行操作,它的参数只有一个字段名称,所以必须和Evaluate函数配合使用。该函数的语法是:Lookupdisplay(columnname)参数columnname是字段的名称,而不是一个字符串。函数执行错误则返回空字符串。
例一:
ls_1 = dw_1.Describe("dw_1.cb_4.text")
ls_2 = This.Describe(dwo.name + ".ColType")
语法: value = datawindow.Describe(string ls)
例二:
判断第3行的sex是否为1,如果是则返回男,否则返回女dw_1.Describe("Evaluate('If(sex = 1, 男, 女) ', 3)")
语法: Evalute('expression',rowno)其中,expression是属性表达式,rowno是要描述的行号。该函数放置在Describe的
属性列表中。
例三:
dw_1.Describe("Evaluate('Lookupdisplay(column)'," + string (row number) + ")")
在dw_1 里面有一个gxbm字段的edit属性页下面:dataWindow:d_dmzd_gxbm,Display Column:dmmc,data
Column:gxbm.在显示时:不是显示gxbm的值,而是显示dmmc的值,但我们用getitemstring(row,"gxbm")时,得到的是gxbm的值,而不是显示的dmmc值,如果我们想得到显示的dmmc值,
那就用lookupdisplay来用:ls_1 = dw_1.describe("Evaluate('lookupdisplay(gxbm)'," + string(1) + ")")
另: 在用代码学PB中有这样一段代码,值得关注:
integer li_PageCount
//*******分页
li_PageCount = integer(dw_1.describe("evaluate('pagecount()',1)"))
i_int_currentpage = integer(dw_1.describe("evaluate('page()',1)"))
st_page.Text = "第"+String( i_int_currentpage ) + "页(共" + String( li_PageCount )+"页)"
===========================================
//如何获取ddlb列表中的项(datavalue 和 displayvalue)
//参数:
//adw_1 数据窗口名
//columnname 当前列
//row 当前行
//ast_1 用作显示信息的静态文本控件
===========================================
DataWindowChild Ldwc
String Ls_CodeColumn
long ll_row,ll_rowcount
String ls_displaycolumn,ls_text = ' '
string ls_prodinfo, ls_prodname, ls_prodnum
integer li_tab,ll_item
if adw_1.describe(Columnname+ '.edit.style ')= 'dddw ' then
adw_1.GetChild(Columnname,Ldwc)
Ls_CodeColumn=adw_1.DESCRIBE(Columnname+ '.DDDW.DATACOLUMN ')
ls_DisplayColumn =adw_1.DESCRIBE(Columnname+ '.DDDW.DisplayColumn ')
ldwc.setfilter( " ")
ldwc.filter()
if ldwc.rowcount()> 10 then
ll_rowcount = 10
else
ll_rowcount = ldwc.rowcount()
end if
for ll_row =1 to ll_rowcount
ls_text =ls_text + ldwc.getitemstring(ll_row,Ls_CodeColumn)+ '- '+ldwc.getitemstring(ll_row,ls_DisplayColumn)+ ' '
next
ast_1.text = ls_text
elseif adw_1.describe(Columnname+ '.edit.style ')= 'ddlb ' then
ls_prodinfo = '0 '
ll_item = 1
do while ls_prodinfo <> ' '
ls_prodinfo = adw_1.GetValue(Columnname, ll_item)
li_tab = Pos(ls_prodinfo, "~t ", 1)
ls_prodname = Left(ls_prodinfo, li_tab - 1)
ls_prodnum = Mid(ls_prodinfo, li_tab + 1)
if pos(ls_prodname, '- ') =0 then
ls_text = ls_text + ls_prodnum + '- ' + ls_prodname+ ' '
else
ls_text = ls_text + ls_prodname+ ' '
end if
ll_item = ll_item +1
loop
ast_1.text = ls_text
else
ast_1.text = ' '
end if