您的位置:首页 > 其它

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

2014-07-04 13:01 1346 查看
〓字段和计算域的属性-更多见帮助(DataWindow objectproperties)

*获取字段的类型(Coltype属性)

字段的ColType属性是一个非常有用的属性,使用该属性可以在程序运行时获取字段的类型。但是不能在运行时修改该属性。下面是它的语法:

直接引用:dw_1.object.object.objectname.coltype

在Describe函数中:"objectname.coltype"

不管使用哪种方式,对同一个字段获得的类型都相同。字段类型有char(n),date,datetime,decimal(n),int,long,number,real,time,timestamp及ulong共11种,其中的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

在Describe和Modify函数中:"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

在describe和modify函数中:"columnname.criteria.property{ = value}"

其中,dw_1是数据窗口控件名称,columnname是要获取或者设置检索规则的字段名称,value为yes或者no,property是以下属性:

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

在describe和modify函数中:"columnname.edit.property{ =value}"

其中,columnname是哟啊读取或者设置属性的字段名称,value根据property不同而可以使用不同类型的值。property可以有17个取值,其中:

a)和滚动控制有关的有AutoHScroll,AutoVScroll,HscrollBar和VscrollBar,它们的取值都是yes或者no,表示是否显示该滚动条。

b)和显示的内容有关的属性有Case,CodeTable,Format,NillsNull和Password,这些属性用来控制字段中的内容如何显示。Case的取值为Any,Upper,Lower与Painter,表示不管用户在该字段上输入的大小写,都按照该属性自动进行转换。CodeTable的取值为yes或者no,表示该字段是否有代码表。Format规定对用户输入的内容进行格式化时应该采用的格式。NillsNull的取值为yes或者no,表示当用户在字段中不输入内容而离开该字段时,是否将该字段中的内容自动置为NULL。Password属性的取值也是yes或者no,表示是否将用户的输入作为密码样式显示,如果作为密码则用户的输入内容作为*号显示,显示的个数和用户输入字符个数相等。

c)和编辑控制有关的属性有AutoSelect,DisplayOn1y,FocusRectangle,Limit,Required,Style和ValidateCode,除了Limit取值为正整数、Stylee取值为String类型外,其他属性的取值都是yes或者no。AutoSelect属性表示当字段获得焦点时是否自动选中该单元中的内容。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

在函数describe和modify中:"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或者1。1表示实行保护,0表示不保护。当进行数据保护时,即使字段的TabOrder值大于0用户也不能对字段进行编辑,并且该字段都不能获得焦点(和TabOrder取值为0时的表现完全相同)。下面是该属性使用时的语法:

直接引用:dw_1.object.columnname.protect

在函数describe和modify中:"columnname.protect{='integer'}"

其中,columnname是要获取或者设置protect属性的字段的标识,integer取值为0或者1。

下面是使用实例:

ls_setting = dw_1.object.emp_start.protect //获取字段emp_start的protect属性取值

ls_setting = dw_1.describe("emp_start.protect")

dw_1.object.emp_start.protect = 1 //设置字段emp_start的protect属性

dw_1.modify("emp_start.protect = 1")

dw_1.modify("emp_start.protect = '1~tif(isrownew(),0,1)'")

//设置protect属性为表达式,含义是:如果是新数据行则将protect设置为0,否则设置为1//,缺省为1。

*字段的滑动属性(slideleft和slideup)

使用字段的滑动属性可以更好地根据运动时的情况安排数据的布局。有两个和滑动有关的属性,SlideLeft表示当左面空白时是否向左滑动,SlideUp表示当上面出现空白时是否向上滑动。使用该属性的语法是:

直接引用:

dw_1.object.objectname.slideleft

dw_1.object.objectname.slideup

在函数describe和modify中:

"objectname.slideleft{='value'}"

"objectname.slideup{='value'}"

其中,slideleft中的value取值为yes或者no。slideup中的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

在函数modify或Describe中:"columnname.TabSequence{=number}"

其中,number为从0到32000的正整数,当为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属性。另外,在一个数据窗口修改多个数据表时也经常使用该属性。

*字段校验(Validation和ValidationMsg属性)

字段的校验规则在数据窗口画板中可以指定,但有时需要在程序运行时动态地修改,可以使用Validation和ValidationMsg属性来指定。属性Validation使用时的语法如下:

直接引用:dw_1.object.columnname.validation

在函数describe和modify中:"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

在函数describe和Modify中:"columname.validationMsg{='string'}"

其中,string为数据不能通过校验规则时要提示的信息。如:

dw_1.object.sex.validationgmsg = "性别必须为f或者m!"

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

*计算域的属性

计算域除了具有上面介绍的属性外,还有一个重要属性Expression。使用这个属性可以根据用户的执行情况来更好地调整程序的动作,下面是其使用时的语法:

直接引用:dw_1.object.computename.expression

在函数modify和describe中:"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)'")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: