PB数据窗口对象之信息获取

PB数据窗口对象 专栏收录该内容
11 篇文章 1 订阅

〓获取数据窗口信息

函数Describe
使用函数Describe可以获取数据窗口对象中的信息。该函数语法是:

dwcontrol.Describe(propertylist)
其中,dwcontrol是数据窗口控件名称,propertylist是以空格分隔的特性或运算表达式列表,它用来报告列与图形对象的属性值。表达式可以用特定行与列的值进行运算。Describe函数返回的是一个字符串,该字符串是对指定属性的描述,不同的属性占用不同的行(不同属性用~n分隔)。如果有无效属性则返回该属性之前的属性取值和一个惊叹号(!)。如果某个属性没有值,则返回一个问号(?)。
如:
dw_1.describe("datawindow.bands datawindow.objects")
header~tdetail~tsummary~tfooter~nemp_id~temp_id
dw_1.describe("datawindow.band datawindow.objects")
!
dw_1.describe("datawindow.bands datawindow.object")
header~tdetail~tsummary~tfooter!
如果特性值容易引起混淆,例如,带有感叹号、问号、Tab键或换行符,这些符号在返回字符串中将用引号括起来。为了测试这种情况,先给数据窗口中的标签name_t中输入内容为name?,然后使用下面的语句:
dw_1.describe("name_t.text")
上面的语句显示"name?",这是因为如果值列表中的第一个值用引号引着,那么该特性列表中的剩余值也用引号引着。
*
标签name_taddr_t中分别输入内容为name?zjhz
dw_1.describe("name_t.text addr_t.text")-------"name?" zjhz
dw_1.describe("addr_t.text name_t.text")-------zjhz "name?"
*
最后不显示空格(~n)


对列的引用
在属性描述时,经常要对列进行引用。引用列的方法有两种,或者使用列名,或者使用列号。应尽量避免使用列号,因为列号是和创建数据窗口时选择字段的顺序相对应的。在以后的修改中很有可能取消某些字段或者调整字段的选择顺序,或者改变数据源,这时就很容易出现错误,更糟糕的是这时很有可能没有错误信息,张冠李戴了。
下面是一个使用列号进行属性描述的语句:
dw_1.describe("#5.coltype")
这种语法可以和函数getcolumn搭配使用,用来检索当前列号。下面是一个显示数据窗口中所有字段类型的例程:
integer li_count,li_index
li_count = integer(dw_1.describe("datawindow.column.count"))
for li_index = 1 to li_count
messagebox(string(li_index),dw_1.describe("#" + string(li_index) +"coltype"))
next

函数Evaluate
在使用Describe描述数据窗口对象中的相关信息时,有一个非常重要的函数不能不掌握,就是Evaluate。虽然函数Describe可以获取对象的信息,但是表达式的取值就不能正常读取了,而这又是经常遇到的。所以,函数Evaluate非常重要,它可以使函数Describe获取表达式的取值。该函数的语法是:

Evalute('expression',rowno)
其中,expression是属性表达式,rowno是要描述的行号。该函数放置在Describe的属性列表中。例如,判断第3行的salary工资是否大于1000,如果大于则返回1,否则返回0
可以使用下面的语句:
dw_1.describe("evaluate('if(salary > 1000,1,0)',3)")
而使用下面的语法就是错误的:
dw_1.describe("if(salary > 1000,1,0)")
*
单行(如第二行)
dw_1.describe("evaluate('if(isnull(emp_no) or emp_no ='',~~'*~~',emp_no)',2)")
*
多行

long ll_i
string ls_emp
for ll_i = 1 to dw_1.rowcount()
ls_emp = dw_1.describe("evaluate('if(isnull(emp_no),~~'NULL~~',emp_no)',"+ string(ll_i) + ")")
dw_1.setitem(ll_i,'emp_no',ls_emp)
next

函数LookUpDisplay
字段使用了下拉列表框、下拉数据窗口和单选按钮等有代码表的编辑风格时,在数据窗口控件上显示的值和字段实际得到的值并不相同,使用函数GetItemX只能读取这样的字段的真实取值,而不是用户看到的值。如何才能读取用户看到的值?可以使用函数LookUpDisplay

LookUpDisplay
函数不能直接从PowerScript调用,可以在DescribeEvaluate函数配合使用。因为函数LookUpDisplay不能指定对哪行数据进行操作,它的参数只有一个字段名称,所以必须和Evaluate函数配合使用。该函数的语法是:
LookUpDisplay(columnname)
其中,参数columnname是字段的名称,而不是一个字符串。函数执行错误则返回空字符串。
下面是一个和函数GetItemString相比较的例子。假设在一个数据窗口中定义字段sex的编辑风格为DropDownListBox,定义该字段使用编码表,编码表的定义是显示值“Male”“Female”分别对应。然后,在某个按钮的clicked事件中编写如下脚本:
messagebox("getitemstring:"+dw_1.getitemstring(1,"sex"),"lookupdispaly:"+dw_1.describe("evaluate('lookupdisplay(sex)',1)"))
::getitemstring:
::lookupdisplay:male

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

数据窗口源码介绍 (举例见d_dbit_example.srd,测试数据库为PB自带的EAS Demo DB V120) 1.第一行:release 12; 数据窗口所属PB的版本号,如果想把高版本的datawindow导入低版本的PB中要修改此数字; 2.datawindow()行 通常用修改processing属性,可以把你的数据窗口由grid变成freeform或其它类型 例:freeform:0 grid:1 3.header()行 可以整行复制粘贴,并命名为header[1],header[2],这样可以让数据窗口有多个header 4.table()行 这里全是定义的数据属性,是setitem,update,object.data等方法访问的根源 如果存在table()里的column,数据窗口里可以不存在任何对象,仍然可以访问数据窗口数据 如果想创建一个空的数据窗口,可以只定义: release 12; table() 5.table(column行) 是第几个column,它的ID就是多少,其中也定义了是否可以update时和更新到数据表的字段名 6.table(retrieve行) 检索数据时使用的SQL语句,可以通过setsqlselect或modify("table.sqlselect")方法去动态修改 修改后要重新定义数据窗口的更新属性 7.column()行 id即是对应table(column行)里的行次,名称(name)可以随便命名,也可以没有,则默认为table(column行)里的name 8.compute()行 计算列,可以通过表达式计算显示特定值(具体函数可以见共享里的画笔函数). 9.text()行 有时可以代替计算列; 通过定义text的表达式,可以实现一列中显示两个字段值,注意结果必须要转换成string类型(而column和compute则不行); 10.htmltable()行 按照格式导出(saveas)html文件,为了保证格式的完整,数据窗口的单位最好设置成pixels GenerateCSS='1' //保持格式及颜色 Border='0' //不要table边框 CellSpacing='0' //单元格无间距(此项在界面上经常设置不上) 注: (1)Grid生成<Table>标签,Freeform生成<DIV> + <SPAN>标签; (2)生成htmltable时,不知为何会在CSS中的开始自动加一个分号";",导致excel等浏览器打开不能正常显示格式; (3)band为foreground或background的对象导不出来,可以动态修改后再导出. 11.export.xml()行 定义导出xml文件的格式,并为模板保存名称 使用时一定要设置usetemplate值 12.import.xml()行 定义导入xml文件的格式,并为模板保存名称 使用时一定要设置usetemplate值 13.表达式介绍 略 14.其它也略
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值