数据窗口控件-datawindow

**

数据窗口控件-datawindow

PB9.0提供了28个属性、35个默认事件、162个函数。注意与数据窗口对象的区分。
【其他】
■脚本的执行效率
*尽量不要在RetrieveRow事件下编写脚本(包括注释)。
*如果数据窗口的DoubleClicked事件中编写了脚本,那么在数据窗口的C1icked事件中的脚本应该尽量短,否则双击事件中的脚本永远不可能得到执行。一般来说,Cliked中脚本的执行时间和两次击鼠标之间的间隔时间之和,不应该大于操作系统中所设定的鼠标双击时间间隔,否则双击事件永远不可能触发,双击时仅仅是接连两次触发c1icked事件。
*在数据窗口中录入数据时,事件EditChanged是触发频率最高的,每一个按钮都触发该事件;触发频率仅次于该事件的是ItemChanged事件和ItemFocusChanged,只要修改了单元中的内容,每次触发ItemFocusChanged事件都会触发ItemChanged事件。在这些事件下编写过长的脚本会非常影响录入工作的效率。同样,事件RowFocusChanged的触发频率也是相当高的。一般来说是可以避免在这四个事件中编写脚本的。
■dwo参数使用
数据窗口的某些事件中可以使用一个称为dwo的变量,该变量保存数据窗口中的部分信息,用数据窗口的属性可以读取这些信息dwo.type:读取在dwo中保存的对象类型。对象类型可能有bitmap、button、column、compute、graph、groupbox、line、ole、ellipse、rectangle、roundrectangle、report、tableblob、text、datawindow(当用户没有单击特定对象时)
dwo.Name:column的列名
dwo.Primary[row]:column的数据
dwo.Selected:选中column的数据
■数据缓冲区
数据窗口在运行时要创建四个缓冲区,分别是主缓冲区、删除缓冲区、过滤缓冲区和原始缓冲区,这四个缓冲区各司其职、共同配合,来保证数据窗口对数据的正确处理。下面分别加以介绍。
1、主缓冲区-Primary
这是最重要的一个缓冲区,保存的是当前显示在数据窗口中的所有数据以及它们的修改状态。在保存数据时使用这些状态生成SQL语句。平常的大多数操作都是针对该缓冲区,函数中的缓冲区参数缺省也是该缓冲区。
2、删除缓冲区-Delete
该缓冲区保存所有删除了的数据。保存数据时,该缓冲区中的数据用来产生delete语句。在数据没有提交到数据库之前,可以从该缓冲区中将数据恢复出来。数据提交后,该缓冲区中的数据清空。
3、过滤缓冲区-Filter
该缓冲区中保存的是没有通过过滤规则的所有数据,这些数据在存储时同主缓存区的数据一起生成相应的insert或update语句。
4、原始缓冲区-original
用来保存从数据库中检索到的初始值,在保存数据时用来生成where语句。
上面这四个缓冲区中,original缓冲区在脚本中很少使用,其他三个经常涉及到,很多数据窗口函数都需要指定对这三个缓冲区中的哪个进行操作,大多数情况下都使用缺省的缓冲区Primary!。这三个缓冲区,除了保存相应的数据外,都自动维护这些数据的修改标志,它们之间的协作也是自动维护的。例如,当使用过滤函数时,没有通过过滤规则的数据自动从Primary缓存区移送到Filter缓存区;执行删除操作时,数据自动从Primary缓存区移送到Delete缓存区。所有这些数据的移送无需脚本的干预,只管使用相应的函数即可。
■DWBuffer
Primary! 0
Delete! 1
Filter! 2
■DWItemStatus
NotModified! 0
DataModified! 1
New! 2
NewModified! 3
■编辑控件
和数据窗口控件打交道都是通过编辑控件进行的。在数据窗口中录入数据、修改数据,实际上是在修改单元上的编辑控件中的内容。当编辑控件移动到另外单元上之前,要对编辑控件中的数据进行校验,如果能通过字段的校验规则,就保存到字段中。编辑控件是可以移动的,需要编辑哪个单元,编辑控件就移动到哪个单元上,接受输入或者修改。
编辑控件在没有离开当前字段时,用户录入或者修改的数据就不会被保存到字段中,如何确保在数据窗口失去焦点时,最后位置上编辑框中的内容不被遗漏呢?前面介绍了在数据窗口的LoseFocus事件中编写如下脚本:
this.AcceptText()
这个方法在很多情况下能解决该问题。美中不足的是,如果编辑框中的内容不能通过字段的校验规则,有时会显示两次错误信息窗口。造成两个错误信息窗口,往往是在选择其他单元时发生,在数据窗口失去焦点之前(如单击“保存”按钮等)只会显示一个错误信息窗口。用户选择其他单元时,编辑框中的数据开始进行校验,不能通过校验规则,显示校验错误信息,在显示校验错误信息时数据窗口失去焦点,触发数据窗口的LoseFocus事件执行AcceptText函数,又一次显示校验错误窗口。
所以,显示两次校验错误窗口的原因是LoseFocus事件中的AcceptText函数造成的。可以想法让该函数在这种情况下不执行。为此定义一个实例变量:
Boolean ib_accept = True
该变量用来表示是否正确通过了校验,然后将LoseFocus中的脚本改成下面的脚本:
If ib_accept Then
This.AcceptText()
Else
ib_accept = true
End If
在数据窗口的ItemError事件中编写脚本:
ib_accept = False
这样就可以解决显示两个校验错误信息窗口了,并且不会遗漏最后一个编辑框中的内容。
*当在某个单元中修改或者录入数据后,编辑框要离开时,要进行4个校验步骤,前面两个步骤由PowerBuilder完成,后面两个由开发者编写。
(1)看数据和编辑前相比是否发生了改变,没有改变则不做任何处理。
(2)检查测试此值是否违反了任何一个在字段上定义的有效性校验规则,违反则拒绝接受此值,并触发ItemError事件。
(3)检查此值是否与编辑前真的不同,没有改变则终止有效性校验。
(4)检查开发人员在ItemChanged事件中编写的脚本。具体的发生情况取决于分配给被称为动作代码的值。
■读取和设置数据
读取:
1、使用函数
dw_1.getitemX()
2、直接使用数据窗口对象属性来读取数据
dw_1.object.data.primary.current[row,column]
该语句的格式是:
dwcontrol.object.data[buffer[.whichvalue]][row,column]
dwcontrol是数据窗口控件名称。
whichvalue既可以是current(缺省值),也可以是original。这样就允许用户访问一个列的初始值或当前值。
row和column是要访问的单元所在的行号及列号。
object、data是保留字,buffer是缓存区的名称,有Delete、Primary、Filter。
这种引用方法速度比较快,尤其读取大量数据时。
设置:
使用函数
SetItem()
SetText()

【属性】
▲DataObject
数据源
▲Title
用来显示在数据窗口的标题条(TitleBar)上的一个字符串。建议该字符串要有一定的含义,能够标明数据窗口的用途或者其中的数据的类别。该属性的缺省值none。当属性TitleBar为True时,该属性起作用。
▲Visible
是否显示数据窗口控件,缺省为True。有时为了向其他数据窗口提供数据,除了使用datastore控件外,还可以使用Visible属性为False的数据窗口。如果仅仅是为了处理数据,不赞成使用Visible属性为False的数据窗口,而应该使用Datastore对象,这样可以节省计算机资源,提高处理效率。
▲Enabled
数据窗口控件是否可以获得焦点,缺省为True。可以在脚本中修改该属性以限制用户执行了某些特定操作后再允许操作数据窗口。
▲TitleBar
是否显示标题条,缺省为False。使用该属性可以在数据窗口上部显示标题条,类似于窗口的标题条。设置属性为True后,用户就能够拖动数据窗口。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值