PB数据窗口对象之字段属性和计算域属性

〓字段和计算域的属性-更多见帮助(DataWindow objectproperties)

*获取字段的类型(Coltype属性)
字段的ColType属性是一个非常有用的属性,使用该属性可以在程序运行时获取字段的类型。但是不能在运行时修改该属性。下面是它的语法:
直接引用:dw_1.object.object.objectname.coltype
Describe函数中:
"objectname.coltype"
不管使用哪种方式,对同一个字段获得的类型都相同。字段类型有char(n)datedatetimedecimal(n)intlongnumberrealtimetimestampulong11种,其中的n代表字符的长度或者小数后的精度。

如:
ls_coltype = dw_1.objcet.emp_id.coltype
ls_coltype = dw_1.describe("emp_id.coltype")
在实际编程中,获取字段的类型后,紧接着使用choose case语句针对不同的类型进行相关的处理。

*背景属性(background.property
在运行时修改字段的背景,这是标识特殊数据行的一种手段。使用该属性可以在程序运行时获取字段的背景,也可以修改字段的背景。它的语法如下:
直接引用:dw_1.object.objectname.background.property
DescribeModify函数中:
"objectname.background.property{ ='value'}"
其中,property可以是color或者mode。当为color时取值应该是长格式表示的颜色,或者使用RGB函数中红、绿、蓝表示的颜色;当为mode时,0表示将背景设置为不透明的(即可以显示背景颜色),1表示背景为透明的。

实际上,字段的背景属性也可以在数据窗口画板中进行设定。下面是修改和读取字段背景属性的实例:
//
修改字段的背景颜色
dw_1.object.oval_1.background.color = rgb(255,0,128)
dw_1.modify("emp_name.background.color = '11665407'") //
这里好象不能用rgb()
//
读取字段的背景颜色

ls_data = dw_1.describe("oval_1.background.color")
//
读取字段的背景模式
ls_data = dw_1.describe("emp_name.background.mode")
//
设置字段的背景模式
dw_1.modify("emp_name.background.mode = '1'")
dw_1.modify("mdrect_1.background.mode = '0'")

*指定检索规则(Criteria.property属性)
在脚本运行时,可以控制是否显示检索规则窗口或者读取数据窗口这方面的信息。语法如下:
直接引用:dw_1.object.columnname.criteria.property
describemodify函数中:
"columnname.criteria.property{ = value}"
其中,dw_1是数据窗口控件名称,columnname是要获取或者设置检索规则的字段名称,valueyes或者noproperty是以下属性:

a)Dialog
:是否显示检索规则窗口。取值为yes则显示,取值为no则不显示。如,在一个数据窗口中放置了字段name,可以编写如下脚本:
dw_1.modify("name.criteria.dialog = yes sex.criteria.override_edit =yes")
dw_1.retrieve()
脚本运行,显示检索规则输入窗口
b)override_edit
:是否用户必须在检索规则窗口中输入数据。取值为yes则用户必须输入数据,取值为no时用户可以不输入数据。
c)required
:是否用户只能使用等号进行查询。如果取值为yes则用户的输入只能是等号,如果取值为no则用户可以使用各种符号,包括=<>>>=<=<等。

*Edit风格的字段属性(Edit.property属性)
编辑风格为Edit类型的字段,可以通过edit.property来获取其相关信息或者设置其外观及动作。下面是它的语法:
直接引用:dw_1.object.columnname.edit.property
describemodify函数中:
"columnname.edit.property{ =value}"
其中,columnname是哟啊读取或者设置属性的字段名称,value根据property不同而可以使用不同类型的值。property可以有17个取值,其中:

a)
和滚动控制有关的有AutoHScrollAutoVScrollHscrollBarVscrollBar,它们的取值都是yes或者no,表示是否显示该滚动条。
b)
和显示的内容有关的属性有CaseCodeTableFormatNillsNullPassword,这些属性用来控制字段中的内容如何显示。Case的取值为AnyUpperLowerPainter,表示不管用户在该字段上输入的大小写,都按照该属性自动进行转换。CodeTable的取值为yes或者no,表示该字段是否有代码表。Format规定对用户输入的内容进行格式化时应该采用的格式。NillsNull的取值为yes或者no,表示当用户在字段中不输入内容而离开该字段时,是否将该字段中的内容自动置为NULLPassword属性的取值也是yes或者no,表示是否将用户的输入作为密码样式显示,如果作为密码则用户的输入内容作为*号显示,显示的个数和用户输入字符个数相等。
c)
和编辑控制有关的属性有AutoSelectDisplayOn1yFocusRectangleLimitRequiredStyleValidateCode,除了Limit取值为正整数、Stylee取值为String类型外,其他属性的取值都是yes或者noAutoSelect属性表示当字段获得焦点时是否自动选中该单元中的内容。Display0nly表示是否允许用户修改该字段中的内容,如果取值为yes,则用户虽然可以选中该字段中的内容但是不能修改。FocusRectangle表示当字段获得焦点时是否显示矩形的边框,以表示当前焦点的位置。Limit是一个相当重要的属性,用来限制用户可以输入字符的长度。Required属性如果为yes,则在获得焦点后用户不输入内容就休想离开。虽然该属性可以很好地保证非空字段不为空,但该属性非常不友好,建议慎重使用。Style属性在程序运行时不能修改,只能读取其中的信息。该属性返回的是关于字段的编辑风格。ValidateCode属性表示是否使用代码表进行有效性校验。该属性当CodeTable属性为yes时才有效。
下面是关于该属性的一些实例:
ls_setting = dw_1.objcet.emp_name.edit.autohscroll //
是否允许自动横向滚动
ls_setting = dw_1.describe("emp_name.edit.Autohscroll") //
同上
dw_1.object.emp_name.edit.required = "no" //
将字段设置成必须输入的字段
dw_1.modify("emp_name.edit.required = no") //
同上

*字段的显示格式(Format属性)
可以使用Format属性来指定字段的显示格式。但是,在实际编程中使用更多的是函数GetFormat或者SetFormat,以取代Modify或者Descrie来设置字段的显示格式。
该语法使用时的重点在于格式串的使用。下面是相关的语法:
直接引用:dw_1.object.objectname.format
在函数describemodify中:
"objectname.format{='value'}"
其中,objectname是字段或者计算字段或者计算域的名称value是字符型的表达式,取值是一种格式串。下面是一些使用实例:

ls_setting = dw_1.object.phone.format //
读取字段的电话显示格式
ls_setting = dw_1.describe("phone.format")
dw_1.object.shipdate.format = "yyyy-mm-dd" //
设置日期格式
dw_1.modify("shipdate.format = 'yyyy-mm-dd'")

*设置数据窗口修改时的主键(key属性)
该属性在一个数据窗口修改多个表时非常有用,因为这时必须根据要修改的表动态修改主键,属性key就可以实现该功能。该属性使用时的语法如下:
直接引用:dw_1.object.columnname.key
在函数modify或者describe中:
"columnname.key{=value}"
其中,columnname是要作为主键的字段名,或者是要判断是否为主键的字段的名称;value取值为yes或者no。如:

ls_setting = dw_1.object.empid.key //
判断字段empid是否为主键
ls_setting = dw_1.describe("empid.key")
dw_1.object.empid.key = "yes" //
将字段empid作为主键
dw_1.modify("empid.key = yes")

*字段名称(name属性)
使用name属性可以获取字段的名称。可以使用字段号或者字段名称来标识一个字段,但使用字段号不太安全,所以用获取字段名比较好一些。语法如下:
直接引用:dw_1.object.objectname.name
在函数describe中:
"objectname.name"
其中,objectname是要获取名称的控件标识,因为在数据窗口对象中有很多控件有多种标识方法。如,下面可以获取字段号为1的字段的名称:

dw_1.describe("#1.name")

*字段中的数据保护(protect属性)
该属性表示是否对字段中的数据进行保护,取值为0或者11表示实行保护,0表示不保护。当进行数据保护时,即使字段的TabOrder值大于0用户也不能对字段进行编辑,并且该字段都不能获得焦点(和TabOrder取值为0时的表现完全相同)。下面是该属性使用时的语法:
直接引用:dw_1.object.columnname.protect
在函数describemodify中:
"columnname.protect{='integer'}"
其中,columnname是要获取或者设置protect属性的字段的标识,integer取值为0或者1

下面是使用实例:
ls_setting = dw_1.object.emp_start.protect //
获取字段emp_startprotect属性取值
ls_setting = dw_1.describe("emp_start.protect")
dw_1.object.emp_start.protect = 1 //
设置字段emp_startprotect属性
dw_1.modify("emp_start.protect = 1")
dw_1.modify("emp_start.protect = '1~tif(isrownew(),0,1)'")
//
设置protect属性为表达式,含义是:如果是新数据行则将protect设置为0,否则设置为1//,缺省为1

*字段的滑动属性(slideleftslideup
使用字段的滑动属性可以更好地根据运动时的情况安排数据的布局。有两个和滑动有关的属性,SlideLeft表示当左面空白时是否向左滑动,SlideUp表示当上面出现空白时是否向上滑动。使用该属性的语法是:
直接引用:
dw_1.object.objectname.slideleft
dw_1.object.objectname.slideup
在函数describemodify中:
"objectname.slideleft{='value'}"
"objectname.slideup{='value'}"
其中,slideleft中的value取值为yes或者noslideup中的value取值为:
a)AllAbove:
当上面数据行中的所有 对象都为空时向上滑动
b)DirectlyAbove:
当上面和本对象对应位置的对象为空时向上滑动
c)No:
不进行滑动
下面是应用的实例:
dw_1.object.emp_lname.slideup = 'no'
ls_setting = dw_1.describe("graph_1.slideup")
dw_1.modify("emp_lname.slideup = no")

*字段的TabOrder值(TabSequence属性)
字段的TabOrder值是一个比较重要的属性,取值大于0时用户可以编辑该字段,等于0时无法编辑该字段。在运行时,根据程序的运行情况有可能动态修改字段的TabOrder值,这时可以使用TabSequence属性。该属性应用时的语法如下:
直接引用:dw_1.object.columnname.TabSequence
在函数modifyDescribe中:
"columnname.TabSequence{=number}"
其中,number为从032000的正整数,当为0时表示字段不允许编辑。下面是使用实例:

ls_setting = dw_1.object.emp_name.tabsequence //
获取字段的TabOrder
ls_setting = dw_1.Describe("emp_name.tabsequence")
dw_1.object.emp_name.tabsequence = 10 //
设置字段的taborder
dw_1.modify("emp_name.tabsequence = 10")
实际上,在编程时经常使用函数SetTabOrder来设置或者获取字段的TabOrder值,因为该函数正确执行后,字段被设置成指定的TabOrder值,并且返回设置之前的TabOrder值。

*用户是否可以保存字段内容(update属性)
当数据窗口中的数据提交时,可以修改的字段及其对应的数据用来产生update SQL语句,使用该SQL语句进行数据的保护。所以,在程序运行时,如果不希望用户保存某字段中的数据,可以修改字段的update属性。下面是该属性的语法:
直接引用:dw_1.object.columnname.update
在函数modify或者describe中:
"columnname.update{=value}"
其中,value的取值为yes或者no。下面是使用实例:

ls_setting = dw_1.object.emp_name.update //
获取字段是否可以修改
ls_setting = dw_1.describe("emp_name.update")
dw_1.object.emp_name.update = "no" //
使字段emp_name不能修改
dw_1.modify("emp_name.update = no")
在应用时,可以根据用户的权限,或者根据用户的录入数据是否齐全(通常需要保证数据一致性)来动态修改某些字段的update属性。另外,在一个数据窗口修改多个数据表时也经常使用该属性。

*字段校验(ValidationValidationMsg属性)
字段的校验规则在数据窗口画板中可以指定,但有时需要在程序运行时动态地修改,可以使用ValidationValidationMsg属性来指定。属性Validation使用时的语法如下:
直接引用:dw_1.object.columnname.validation
在函数describemodify中:
"columnname.validation{='validationstring'}"
其中,validaionstring是一个包含校验规则的字符串,该字符串的结果或者是True或者是False。下面是使用实例:

ls_setting = dw_1.object.emp_status.validation //
获取字段的校验规则
ls_setting = dw_1.describe("emp_status.validation")
dw_1.modify("sex.validation = 'sex = ~~~'f~~~' or sex = ~~~'m~~~''")//
设置规则
dw_1.object.sex.validation="sex='f' or sex='m'"
字段的校验规则设置好后,用户在该字段上输入数据并要离开时,如果数据不能通过校验则显示错误信息,采用系统缺省的错误信息不太友好。这时,可以通过设置validationgMsg属性来指定错误信息。该属性使用时的语法如下:
直接引用:dw_1.object.columnname.validationMsg
在函数describeModify中:
"columname.validationMsg{='string'}"
其中,string为数据不能通过校验规则时要提示的信息。如:

dw_1.object.sex.validationgmsg = "
性别必须为f或者m!"
实际上,当用户输入的数据不能通过校验规则时将触发数据窗口控件的itemerror事件,该事件的返回值可以决定是否显示错误信息提示窗口。如果在itemerror事件中也编写了错误信息提示脚本,该脚本能够正常执行并且用validationgmsg属性定义的错误信息也会显示。

*计算域的属性
计算域除了具有上面介绍的属性外,还有一个重要属性Expression。使用这个属性可以根据用户的执行情况来更好地调整程序的动作,下面是其使用时的语法:
直接引用:dw_1.object.computename.expression
在函数modifydescribe中:
"computename,expression{='string'}"
其中,computename是计算域的名称,string是字符串,它应该包含合法的表达式。如:

ls_setting = dw_1.object.comp_1.expression //
获取表达式
ls_setting = dw_1.describe("comp_1.expression")
dw_1.object.comp_1.expression = "avg(salart for all)" //
设置表达式
dw_1.modify("comp_1.expression = 'avg(salary for all)'")

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值