PB数据窗口基础

上传人:gao****ang 文档编号:159217866 上传时间:2022-10-08 格式:DOCX 页数:36 大小:64.76KB
收藏 版权申诉 举报 下载
PB数据窗口基础_第1页
第1页 / 共36页
PB数据窗口基础_第2页
第2页 / 共36页
PB数据窗口基础_第3页
第3页 / 共36页
资源描述:

《PB数据窗口基础》由会员分享,可在线阅读,更多相关《PB数据窗口基础(36页珍藏版)》请在装配图网上搜索。

1、PB 数据窗口数据窗口控件-datawindowPB9.0提供了 28个属性、35个默认事件、162个函数。注意与数据窗口对象的区分。【其他】脚本的执行效率*尽量不要在 RetrieveRow 事件下编写脚本(包括注释)。*如果数据窗口的DoubleClicked事件中编写了脚本,那么在数据窗口的Clicked事件中的脚 本应该尽量短,否则双击事件中的脚本永远不可能得到执行。一般来说,Cliked中脚本的执 行时间和两次击鼠标之间的间隔时间之和,不应该大于操作系统中所设定的鼠标双击时间间 隔,否则双击事件永远不可能触发,双击时仅仅是接连两次触发c1icked事件。*在数据窗口中录入数据时,事件

2、EditChanged是触发频率最高的,每一个按钮都触发该事 件;触发频率仅次于该事件的是ItemChanged事件和ItemFocusChanged,只要修改了单元中 的内容,每次触发 ItemFocusChanged 事件都会触发 ItemChanged 事件。在这些事件下编写 过长的脚本会非常影响录入工作的效率。同样,事件RowFocusChanged的触发频率也是相 当高的。一般来说是可以避免在这四个事件中编写脚本的。dwo 参数使用数据窗口的某些事件中可以使用一个称为dwo的变量,该变量保存数据窗口中的部分信息, 用数据窗口的属性可以读取这些信息dwo.type:读取在dwo中保存的

3、对象类型。对象类型 可能有 bitmap、 button、 column、 compute、 graph、 groupbox、 line、 ole、 ellipse、 rectangle、 roundrectangle、report、tableblob、text、datawindow(当用户没有单击特定对象时) dwo.Name: column 的列名 dwo.Primaryrow: column 的数据 dwo.Selected:选中 column 的数据数据缓冲区数据窗口在运行时要创建四个缓冲区,分别是主缓冲区、删除缓冲区、过滤缓冲区和原始缓 冲区,这四个缓冲区各司其职、共同配合,来保证数

4、据窗口对数据的正确处理。下面分别加 以介绍。1、主缓冲区-Primary 这是最重要的一个缓冲区,保存的是当前显示在数据窗口中的所有数据以及它们的修改状 态。在保存数据时使用这些状态生成SQL语句。平常的大多数操作都是针对该缓冲区,函 数中的缓冲区参数缺省也是该缓冲区。2、删除缓冲区-Delete该缓冲区保存所有删除了的数据。保存数据时,该缓冲区中的数据用来产生delete语句。在 数据没有提交到数据库之前,可以从该缓冲区中将数据恢复出来。数据提交后,该缓冲区中 的数据清空。3、过滤缓冲区-Filter 该缓冲区中保存的是没有通过过滤规则的所有数据,这些数据在存储时同主缓存区的数据一 起生成相

5、应的 insert 或 update 语句。4、原始缓冲区-original用来保存从数据库中检索到的初始值,在保存数据时用来生成where语句。上面这四个缓冲区中,original缓冲区在脚本中很少使用,其他三个经常涉及到,很多数 据窗口函数都需要指定对这三个缓冲区中的哪个进行操作,大多数情况下都使用缺省的缓冲 区Primary!。这三个缓冲区,除了保存相应的数据外,都自动维护这些数据的修改标志,它 们之间的协作也是自动维护的。例如,当使用过滤函数时,没有通过过滤规则的数据自动从 Primary缓存区移送到Filter缓存区;执行删除操作时,数据自动从Primary缓存区移送到 Delete

6、缓存区。所有这些数据的移送无需脚本的干预,只管使用相应的函数即可。DWBufferPrimary! 0Delete! 1Filter! 2DWItemStatusNotModified! 0DataModified! 1New! 2NewModified! 3编辑控件 和数据窗口控件打交道都是通过编辑控件进行的。在数据窗口中录入数据、修改数据,实际 上是在修改单元上的编辑控件中的内容。当编辑控件移动到另外单元上之前,要对编辑控件 中的数据进行校验,如果能通过字段的校验规则,就保存到字段中。编辑控件是可以移动的, 需要编辑哪个单元,编辑控件就移动到哪个单元上,接受输入或者修改。编辑控件在没有离开

7、当前字段时,用户录入或者修改的数据就不会被保存到字段中,如何确 保在数据窗口失去焦点时,最后位置上编辑框中的内容不被遗漏呢?前面介绍了在数据窗口 的 LoseFocus 事件中编写如下脚本:this.AcceptText() 这个方法在很多情况下能解决该问题。美中不足的是,如果编辑框中的内容不能通过字段的 校验规则,有时会显示两次错误信息窗口。造成两个错误信息窗口,往往是在选择其他单元 时发生,在数据窗口失去焦点之前(如单击“保存”按钮等)只会显示一个错误信息窗口。用 户选择其他单元时,编辑框中的数据开始进行校验,不能通过校验规则,显示校验错误信息, 在显示校验错误信息时数据窗口失去焦点,触发

8、数据窗口的 LoseFocus 事件执行 AcceptText 函数,又一次显示校验错误窗口。所以,显示两次校验错误窗口的原因是LoseFocus事件中的AcceptText函数造成的。可以想 法让该函数在这种情况下不执行。为此定义一个实例变量:Boolean ib_accept = True该变量用来表示是否正确通过了校验,然后将LoseFocus中的脚本改成下面的脚本:If ib_accept ThenThis.AcceptText()Elseib_accept = trueEnd If在数据窗口的ItemError事件中编写脚本:ib_accept = False这样就可以解决显示两个校

9、验错误信息窗口了,并且不会遗漏最后一个编辑框中的内容。*当在某个单元中修改或者录入数据后,编辑框要离开时,要进行4 个校验步骤,前面两个 步骤由 PowerBuilder 完成,后面两个由开发者编写。(1) 看数据和编辑前相比是否发生了改变,没有改变则不做任何处理。(2) 检查测试此值是否违反了任何一个在字段上定义的有效性校验规则,违反则拒绝接受此 值,并触发 ItemError 事件。(3) 检查此值是否与编辑前真的不同,没有改变则终止有效性校验。(4) 检查开发人员在 ItemChanged 事件中编写的脚本。具体的发生情况取决于分配给被称为 动作代码的值。读取和设置数据读取:1、使用函数

10、dw_1. getitemX_r()2、直接使用数据窗口对象属性来读取数据dw_1.object.data.primary.currentrow,column该语句的格式是:dwcontrol.object.databuffer.whichvaluerow,columndwcontrol 是数据窗口控件名称。whichvalue既可以是current (缺省值),也可以是original。这样就允许用户访问一个列的 初始值或当前值。row 和 column 是要访问的单元所在的行号及列号。object、data 是保留字, buffer 是缓存区的名称,有 Delete、Primary、Fil

11、ter。 这种引用方法速度比较快,尤其读取大量数据时。设置:使用函数SetItem()SetText()属性】DataObject数据源Title用来显示在数据窗口的标题条(TitleBar)上的一个字符串。建议该字符串要有一定的含义, 能够标明数据窗口的用途或者其中的数据的类别。该属性的缺省值none。当属性TitleBar 为 True 时,该属性起作用。Visible是否显示数据窗口控件,缺省为True。有时为了向其他数据窗口提供数据,除了使用datastore 控件外,还可以使用Visible属性为False的数据窗口。如果仅仅是为了处理数据,不赞成使 用Visible属性为False

12、的数据窗口,而应该使用Datastore对象,这样可以节省计算机资源, 提高处理效率。Enabled数据窗口控件是否可以获得焦点,缺省为True。可以在脚本中修改该属性以限制用户执行 了某些特定操作后再允许操作数据窗口。TitleBar是否显示标题条,缺省为False。使用该属性可以在数据窗口上部显示标题条,类似于窗口 的标题条。设置属性为True后,用户就能够拖动数据窗口。ControlMenu是否显示控制菜单,缺省为False。该属性当TitleBar属性为True时才有效。MaxBox 和 MinBox是否显示最大和最小控制按钮,缺省为False。当属性TitleBar为True时,该属

13、性有效。属 性 TitleBar 和 ControlMenu、MinBox、MaxBox 共同控制数据窗口的外观是否像窗口的外观。HscrollBar 和 VscrollBar这两个属性用来控制数据窗口控件的横向和纵向滚动条是否显示。设置为True时,滚动条 可以根据需要自动显示,数据够显示时则不出现滚动条。LiveScroll该属性是一个比较重要的属性,缺省为True,表示当拖动垂直滚动滑块时,数据窗口中的 行也跟随滚动;属性为False时表示拖动垂直滚动滑块时,数据窗口中的行不跟随滚动,放 开垂直滚动滑块后,数据窗口中的数据才滚动到适当数据行上。建议选中该属性,这样当数 据很多时,用户就可

14、以拖动垂直滚动小滑块来快速浏览数据了。HsplitScroll该属性是一个非常有实际用途的属性。该属性决定是否显示分割滚动条,缺省为False。当 数据窗口比较宽,要显示水平滚动条时,建议将该属性设置为True。RightToLeft该属性为True时表示数据窗口中的所有字符都从右向左显示。缺省为False。当设置该属性 为 True 时,还必须要操作系统的支持,该属性才能起作用。Resizeable用户是否可以调整数据窗口的大小,缺省为False。Border是否显示边框,默认为True,只有在True的情况下BorderStyle才起作用BorderStyle取值为枚举型,用来定义数据窗口

15、边框样式。有四个取值:StyleBox!、StyleLowered!、 StyleRaised!、StyleShadowBox!,缺省边框类型为 StyleLowered。Icon用来给数据窗口指定标题条左上角的图形,缺省为Windows标志图。【事件】 Clicked 鼠标左键在数据窗口控件上任意位置单击时触发该事件。该事件中有4个参数,可以在脚本 中直接使用。xpos :表示和数据窗口最左侧的距离的整数。ypos :表示和数据窗口最上部的距离的整数,不包括标题条。row:表示用户所单击的行号的long型数。dwo:用户单击对象,是DWObject类型。 在该事件的脚本中使用这些参数,可以给

16、用户一些提示信息或者获取用户单击内容的信息 返回值: 0表示继续处理,这是缺省值。 1 表示停止处理。*当选择和当前行不同的数据行时可以触发ItemFocusChanged和RowFocusChanged事件, 当单击当前行的其他字段时可以触发 ItemFocusChanged 事件。 DoubleClicked 事件也可以触 发该 Clicked 事件。DBError在数据窗口控件中发生数据库错误时触发该事件。该事件有以下参数。SQLdbcode: long类型的错误代码,具体含义由DBMS指定。当DBMS没有指定错误代码 时, SQLdbcode 提供 4 个错误代码, -1 表示事务对象

17、参数错误而不能联结到数据库, -2 表 示不能联结到数据库, -3 表示因为其他用户的修改导致用来进行检索或修改的键值在数据 库中已经不存在而产生错误,-4表示向数据库中写blob对象时失败。SQLerrtext: string 类型,数据库指定的错误信息。SQLsyntax: string类型,当错误发生时,发送到数据库的SQL语句。buffer: DWBuffer枚举型,表示导致错误的数据所在的缓冲区。row: long类型,导致错误的数据的行号。返回值:可以用return语句任意指定返回什么数据。有特定含义的返回值是0和1。0表示 显示错误信息, 1 表示不显示错误信息。 DoubleC

18、licked鼠标左键在数据窗口控件中双击时触发该事件。该事件中的4个参数和Clicked事件中的名 称及含义完全相同,也可以直接在该事件的脚本中直接使用。该事件的返回值可以用return指定。有特殊函数的返回值是0,表示继续处理。 EditChanged 在数据窗口控件的编辑框中每次按钮都触发该事件。一般很少在该事件下编写脚本。该事件 提供三个参数。row:long 类型,当前编辑的行号。 dwo:DWObject 类型,正在编辑的对象。 data:String 类型,当前编辑框中的内容。返回值:可以用 return 指定任意返回值,0 表示继续处理。 *每次编辑时触发Error 当数据窗口对

19、象中的数据或者表达式错误时触发该事件,在分布式系统中联结发生错误时也 会触发该事件。和 DBError 事件不同的是,该事件在没有和数据库交互时就有可能触发,而 DBError事件触发时肯定和数据库发生了交互。通常在该事件中编写脚本,提供对错误的处 理。该事件提供了很多参数。errornumber: unsigned integer 类型,由 PowerBuilder 指定的错误代码号。 errortext: string类型,由PowerBuilder指定的错误信息。errorwindowmenu: string 类型,造成错误的脚本所在对象的父对象的名称。 errorobject: str

20、ing 类型,造成错误的脚本所在的对象的名称。errorscript: string 类型,造成错误的语句所在的脚本的全部内容。 errorline: unsigned integer类型,造成错误的语句在其脚本中所占的行号。action:在Error事件下的代码执行完后,该参数取值由脚本设定。可以指定的值有: ExceptionFail!表示错误处理失败(执行该值有可能触发应用的SystemError事件); ExceptionIgnore!表示忽略错误继续执行(要谨慎使用该取值,因为忽略错误有可能将再次导 致其他错误);ExceptionRetry值只能用于OLE,对于数据窗口控件,没有该

21、取值,该取值 表示再次执行刚才造成错误的功能;ExceptionSubstituteReturnValue!表示使用参数 returnvalue的返回值,而不是返回OLE服务器或数据窗口控件的错误代码,并且取消错误 状态。returnvalue:当 Action 指定为 ExceptionSubstituteReturnValue!时返回该参数的取值。 *对于数据窗口控件来说,如果在运算数据或属性表达式时发生了错误,将进行如下的错误 处理过程:a. 触发Error事件;b. 如果Error事件中没有脚本或者Action变量设置成ExceptionFail!,则触发应用的 SystemError

22、 事件;c.如果SystemError事件下也没有脚本,便会发生应用程序错误,然后终止应用程序。 所以,在该事件或者应用的SystemError事件下应该编写脚本。这样才不至于退出应用程序, 使用户没有处理的机会,甚至录入了半天的数据连个保存的机会也没有了。 返回值:该事件没有返回值,也不在该事件中使用 return 语句。itemChanged 当某单元(行和列的交叉点叫做单元)编辑后(内容改变),光标要离开时触发该事件,如使 用了 Enter按钮、单击了 Tab按钮、使用了光标键、在其他字段上单击了鼠标左键等。当编 辑完一个单元的内容而没有离开该单元,这时数据窗口失去焦点,这种情况不会触发

23、该事件(所以在LoseFocus事件中要使用函数AcceptText)。三个参数row、dwo和data的含义和 EditChanged 事件的三个参数完全相同。返回值:可以使用return语句返回任意值。0表示接受刚刚修改的数据,该值是缺省值;1 表示放弃刚才的修改,不允许焦点离开; 2 表示放弃刚才的修改,允许焦点离开。*编辑框内容有变化并离开此编辑框时触发;注意:当editchanged事件下有代码,编辑框内 容有变化且离开此编辑框时,不会触发此事件 ItemError当某单元被编辑后光标要离开时,如果单元中的新数据不能通过有效性校验,则触发该事件。 (同ItemChanged:当编辑完

24、一个单元的内容而没有离开该单元,这时数据窗口失去焦点,这 种情况不会触发该事件)该事件在 ItemChanged 事件之前触发,该事件触发就不能再触发 ItemChanged事件了。该事件中的三个参数和ItemChanged事件中的三个参数完全相同。 返回值:可以使用return语句返回任意数值,0表示放弃修改的数据,并显示错误信息, 焦点不离开该单元,该取值是缺省值; 1 表示放弃修改的数据但不显示错误信息提示,焦点 不离开该单元; 2 表示接受刚刚修改的错误数据; 3 表示放弃刚刚修改的数据,并且焦点不 离开该单元。 ItemFocusChanged当焦点离开某单元时触发该事件(不管内容有

25、没有改变)。该事件提供了 row和dwo两个参数, 含义和前面介绍的完全相同。可以使用return语句返回任意数值,0表示继续处理。*不管编辑框中的内容有没有改变,离开编辑框时触发该事件,注意:当离开数据窗口时不触发PrintEnd当打印工作完成时触发该事件。参数 PagesPrinted 可以在脚本中直接使用,是一个 long 类型 的变量,表示已经被打印的页数。 PrintPage在数据窗口每页进行打印格式处理之前触发该事件。参数Copy和PageNumber在脚本中可 以直接使用,表示该页要打印的份数和当前页的页号。返回值0 表示不要跳过当前页,1表 示跳过当前页。一般在该事件下编写脚本

26、显示打印进度信息,例如:st_l.text=正在打印第+String(pageNumber)+ 页也可以在该事件中决定是否真正要打印该页。例如,下面的脚本只打印偶数页码的页面:If Mod(pagenumber,2) = 0 Thenreturn 0Elsereturn lEnd IfPrintStart数据窗口打印开始时触发该事件。该事件中的参数PagesMax是一个long型变量,表示将要 被打印的总页数(不包括跳过的页)。返回0 表示继续处理。 RetrieveEnd当数据窗口检索完毕时触发该事件。参数rowcount是一个long型变量,表示检索完后检索 到的记录数。 Retrieve

27、Row每检索到一条记录时都触发该事件。参数row是long类型变量,记录当前检索到的数据的 序号。返回值0表示继续检索,1表示停止检索。检索大量数据之前可以设置中断标志,让 用户在检索过程中可以停止检索。RetrieveStart 当数据窗口的检索操作将要开始时触发该事件,该事件中没有参数。返回值0表示继续执行, 该值是缺省值, 1 表示不执行检索, 2 表示在检索之前不清除数据行和缓存区。通常不在该事件下编写脚本,即使编写脚本,一般也是利用返回值2 的特性来控制检索操作不清除缓存区,这样可以将检索到的数据添加到数据窗口中,并且在数据窗口中保留检索之前的数据。 RowFocusChanged当

28、前行改变时触发该事件。CurrentRow参数是一个long类型变量,保存当前记录号。该事 件下的典型编程是修改当前行标识,将当前行明显地标识出来,可以让用户清楚地知道要对 哪行进行操作,在该事件和其他事件的配合下共同修改当前行标识。*不管内容有没有改变,当前行改变时触发;在离开数据窗口时不触发*RowFocusChanging:当前行改变前触发;参数currentrow触发前所在行,newrow触发后当 前行; rowfocuschanged 的 currentrow 等于 rowfocuschanging 的 newrow ScrollHorizontal当使用光标键、Tab按钮、滚动条等

29、等在数据窗口中进行水平滚动时触发该事件。很少在该 事件上编写脚本。 ScrollVertical当在数据窗口中使用光标键、滚动条、Tab键等进行上下滚动时触发该事件。通常在该事件 中编写脚本来改变当前行。因为当上下滚动数据窗口时,如果当前行不在当前显示的区域内, 则容易给用户造成错觉,可以在该事件中编写脚本将当前页面的第一行数据设置为当前行。 使用 Describe 和 uate 函数可以实现该功能 SQLPreview当执行函数Retrieve ReselectRow和Update时,SQL语句要提交到DBMS,这时触发该事 件。该事件的参数比较复杂。request:取值为 PreviewF

30、unctionReselectRow!、PreviewFunctionRetrieve!或PreviewFunctionUpdate!分别代表触发该事件的函数是 ReselectRow、Retrieve 和 Update。 SQLtype:引起该事件的SQL语句类型。取值为PreviewDelete!、PreviewInsert!、PreviewSelect!、 PreviewUpdate! 分别表示是 Delete 、 Insert、 Select、 Update 语句。SQLsyntax: string类型,取值为提交到DBMS的SQL语句。buffer:当前SQL语句所涉及到的数据所在的

31、缓存区,取值为枚举型,Delete!、Filter!、Primary!分别表示删除缓存区、过滤缓存区和主缓存区。row:long 类型变量,表示该事件中涉及到的记录数。返回值0表示继续处理,1表示停止处理,2表示处理下一个SQL请求。UpdateEnd 当从数据窗口控件发送来的对数据库的修改都完成后触发该事件。该事件的三个参数 RowsInserted、RowsUpdated、RowsDeleted 都是 long 类型的变量,分别表示插入、修改和 删除的记录数。UpdateStart在调用了 update函数之后、开始修改之前触发该事件,该事件没有参数。返回值0表示继 续处理, 1 表示停止

32、修改。 LoseFocus数据窗口失去焦点时触发。该事件中编写脚本,主要是保证用户在数据窗口中最后输入的内容不丢失。数据窗口中的输 入内容只有当焦点改变时才真正转交给数据窗口,否则只是保存数据窗口的编辑控件。脚本 比较简单:this.AcceptText()*GetFocus:数据窗口得到焦点时触发。PB 数据窗口一【函数】SetTransObject语法: dwcontrol.SetTransObject ( transaction )功能:给数据窗口或者datastore控件dwcontrol设置事务对象transaction,缺省事务对象是 SQLCA。返回值:成功设置事务对象则返回1,

33、执行过程中发生了错误则返回-1,有任意参数为Null 时返回 Null。Retrieve语法:dwcontrol.Retrieve ( , argument, argument . )功能:使用数据窗口控件的当前事务对象检索数据库中的数据。如果数据窗口控件对应的数 据窗口对象定义了检索参数,则应该在该函数中指定检索参数,参数的个数和数据窗口对象 的检索变量个数相等,对应的数据类型相兼容。返回值:返回数据窗口控件主缓存区(PrimaryBuffer)中的记录数,如果检索数据时发生错误则返回-1,如果任意参数为Null则返回Null*该函数的参数和数据窗口对象定义的参数的顺序要相同,类型要兼容。个

34、数不能少于数据 窗口对象定义的参数,即可以等于和多于数据窗口对象定义的参数,多的参数忽略。DeleteRow语法: dwcontrol.DeleteRow ( row )功能:删除数据窗口 dwcontrol 中的第 row 行数据,如果 row 为 0 则表示删除当前行的数据。返回值:执行成功则返回 1,执行错误则返回-1,如果任意参数为 Null 则返回 Null。*该函数执行后只是将被删除的数据从数据窗口的主缓存区移放到Deleted缓冲区,在数据 库中并没有真正删除数据,当正确执行了 Update函数并且使用commit语句提交了事务后, 才真正从数据库中删除该数据InsertRow语

35、法: dwcontrol.InsertRow ( row )功能:在数据窗口 dwcontrol的第row行前插入一行空白数据。当指定row为0时,表示在 当前行之前插入一行空白数据。返回值:返回插入的数据的行号,如果执行过程中发生错误则返回1,如果任意参数为Null则返回 NullUpdate语法: dwcontrol.Update ( accept , resetflag )功能:提交数据窗口或者datastore中的数据。如果accept为True,表示在提交数据之前自 动执行AccpetText函数,否则不执行该函数,该参数缺省为True;如果resetflag为True, 表示数据提

36、交后自动清除修改标识,该参数缺省为 True。返回值:执行成功则返回 1,发生错误则返回-1,如果 dwcontrol 为 Null 则返回 NullAcceptText语法:dwcontrol.AcceptText ()功能:该函数执行时,首先对当前编辑框中的内容进行对应字段的校验规则,能够通过校验 规则,则保存在对应字段中,否则显示校验信息提示错误。需要执行该函数的原因是,当在 某字段上的编辑框中输入内容而没有移动光标到别的字段上时,其他控件获得焦点,此时编 辑框中的内容不能被保存到字段中,所以就应该在数据窗口失去焦点时执行该函数。返回值:执行成功则返回1,执行过程中发生错误则返回-1,如

37、果dwcontrol为Null则返回Null。*该函数在数据窗口的ItemChanged事件中不起作用,因为项目改变是发生在接受编辑框中内容之后ModifiedCount语法: dwcontrol.ModifiedCount ( )功能:获取数据窗口或者Datastore中被修改过但还没有提交到数据库中的记录数。返回值:返回 long 类型的数据窗口控件中被修改过的记录数,如果没有记录被修改过或者 修改后都已经保存到了数据库中则返回 0,执行过程中如果发生错误则返回-1,如果 dwcontrol 为 Null 则返回 Null。*该函数获得的修改过的记录数包括主缓存区和Filter缓存区的被修

38、改过的和新添加到数据窗口中的记录数DeletedCount语法: dwcontrol.DeletedCount ( )功能:获取数据窗口控件或者datastore控件dwcontrol中被删除的记录数。返回值:返回 long 类型的已经被删除但还没有提交到数据库中的记录数,如果执行过程中发生了错误则返回-1,如果dwcontrol为Null则返回Null,如果没有删除过记录则返回0RowsMove它可以将数据从一个缓冲区移动到另外缓冲区中。该函数的语法是:dwcontrol.RowsMove ( startrow, endrow, movebuffer, targetdw, beforerow

39、, targetbuffer )其中,dwcontrol是进行移动操作的源数据窗口; startrow和endrow是要移动数据的范围(包 括这两个行号的数据);movebuffer指要从哪个缓存区移出数据,可以是Primary!、Delete!、Filter!; targetdw是目标数据窗口控件名称;beforerow表示在目标数据窗口的哪一行之前插 入移入的数据,如果该数值比目标数据窗口的行数大,则在最后插入移入的数据;targetbuffer 是目标缓存区,取值同movebuffer 样。GetItemStatus 和 SetItemStatus使用函数dwcontrol. GetIt

40、emStatus_r( row, column, Primary!)可以获取该缓冲区内指定单元的状态,当参数 column 为 0 时,表示读取整个行的修改状态。有以下状态。NotModified! :指定单元的数据和原始数据相同,没有修改过。DataModified!:指定单元的数据和原始数据不同,修改过。New!:该数据行是新增加的,但还没有在该行上输入数据。NewModified!:该数据行是新增加的,并且已经在该行上录入了数据。这些修改标识都是由数据窗口自动维护的,一般情况下没有必要编写脚本修改这些标记,但并不是说就不能修改。PowerBuilder提供了函数SetItemStatus

41、,它的语法是:dwcontrol.SetItemStatus ( row, column, dwbuffer, status )其中,row参数指定将要修改状态的行;column参数指定将要修改状态的列(可以是整型的 列号,也可以是string类型的列名),当列号为0时表示要修改row指定的整行的状态; dwbuffer指定要修改哪个缓冲区(肯定不能是original),status为上面的四个取值中的一个, 但不是任意的取值,因为有些状态不能用该函数设置成另外一种状态,必须是能够转换的状 态。下面列出了能够转换的状态。期望的状态 New! NewModified! DataModified!

42、 NotModified!当前状态New! Yes Yes NoNewModified! No Yes NewDataModified! NewModified! Yes YesNotModified! Yes Yes Yes 表中的Yes表示可以使用SetItemStatus进行该状态设置,No表示不会产生预期的状态,如 果标明了某个特定的状态,则说明是新的状态,而不是期望的状态。例如,数据窗口 dw_1 的第1行第1列的当前状态为DataModified!,使用函数dw_l.SetItemStatus(l,l,New!)后,第 1行第1列的状态改变为NewModified!。同样对于该数据

43、窗口 dw_1,如果使用函数 dw_1.SetItemStatus(1,1,NotModified!),则会将其状态改变为 NotModified!。当从一种状态不 允许转变到另一种状态时,可以修改成其他一个中间状态,然后再进行一次转换。例如,要从new!改成NotModified,应该首先转换到DataModified!GetItemX读取数据窗口中的数据dwcontrol. GetItemX_r( row, column , dwbuffer, originalvalue )其中的X可以替换成Date、DateTime、Decimal、Number、String、Time,所以读取数据的

44、函数有6个。参数row表示要读取哪行的数据,是一个long类型数值。column代表列,可 以是string型的列名,也可以是整型的列号。dwbuffer是DWBuffer枚举型,取值Primary!、 Delete!、Filter!分别代表主缓冲区、删除缓冲区和过滤缓冲区。originalvalue为Boolean型, 表示是否读取最近一次检索时检索到的初始值,当指定dwbuffer时必须指定该参数,该参 数和dwbuffer都是可选的。函数正确执行则返回对应类型的数据,执行过程中发生错误则 返回空值(),任何参数为 Null 则返回 NullSetItem 和 SetText函数SetIt

45、em的语法格式是:dwcontrol.SetItem ( row, column, value )各个参数的含义如下。dwcontrol:数据窗口或datastore控件名称。row:要设置的数据所在行。column:要设置的数据所在的列。可以用整型列号,也可以用string型列名。value :要设置的值,应该和要设置的列的类型一致。函数正确执行则返回1,这时数据窗口中row行column列显示的数据是刚刚用该函数设定 的数据,如果函数执行过程中发生错误则返回-1。注意,该函数执行时仅仅检查函数中指定 数据的类型和字段的类型是否一致,不会进行有效性校验,包括在数据窗口中设置的校验规 则、在

46、ItemChanged 事件中编写的校验规则、在 ItemChanged 调用的校验规则都不会执行。 函数SetText的语法格式是:integer dwcontrol.SetText ( string text ) 功能是设置当前编辑框中的内容。注意,当编辑框离开当前单元时要进行有效性校验,如果 校验数据正确,则当前字段接受该数据,否则触发ItemError事件。所以,可以使用该函数给带有校验规则的字段设置数据。EG: int li_i dw_1.SetColumn(name) /使 name 列成为当前列For li_i = 1 To dw_1.RowCount()dw_1.SetRow(

47、li_i)/使第 I 行成为当前行dw_l.SetText(” 屁)/向当前编辑框中写入内容Nextdw_l.SetColumn(sex)/选中性别列,保证最后一个也要通过校验规则SetColumn、SetRow 和 GetColumn、GetRow 和 GetClickedColumn、GetClickedRow 和GetColumnName设置当前列integer dwcontrol.SetColumn ( string column)integer dwcontrol.SetColumn ( integer column)设置当前行integer dwcontrol.SetRow ( l

48、ong row )得到当前列integer dwcontrol. GetColumn_r( )得到当前行long dwcontrol. GetRow_r( )得到用户单击的列integer dwcontrol. GetClickedColumn_r( )得到用户单击的行long dwcontrol. GetClickedRow_r( )得到当前列的名string dwcontrol. GetColumnName_r( )SetFilter、Filter 和 Find这两个函数必须配对使用,首先使用函数SetFilter设置过滤规则,然后用函数Filter进行过 滤。过滤规则是boolean类型

49、的表达式,能够使用过滤规则的,将表达式为True的数据行 显示在数据窗口中,使其为False的数据行被移送到数据窗口的Filter!缓存区。在设计数据 窗口对象时也可以定义过滤规则,使用这两个函数可以根据需要来动态改变过滤规则。在设 计时,指定了过滤规则的数据窗口可以使用这两个函数再进行过滤。每次过滤都是对数据窗 口的Original!缓存区进行的,而不是在前一次过滤出来的数据基础上再次过滤。函数 SetFilter 的语法是:dwcontrol.SetFilter ( format )其中,dwcontrol是要进行过滤的数据窗口控件名称。format是过滤规则,string类型。过滤 规则

50、是由字段、常量、运算符、函数构成的boolean表达式。需要取消过滤规则显示所有的 数据时,可以指定过滤规则为空(”),如果让用户可以随便指定过滤规则,则可以使用Null 的过滤表达式,这时 PowerBuilder 提供一个和数据窗口设计时相同的过滤规则指定窗口。 该函数正确执行返回1,否则返回-1。执行完后,数据窗口中显示的数据没有发生变化,只 有当执行了 Filter函数后才按照刚刚指定的过滤规则显示数据。该函数的语法是:dwcontrol.Filter ( )dwcontrol是和SetFilter中同名的数据窗口控件名称。该函数执行正确则返回1,否则返回-1, 如果 dwcontro

51、l 为 Null 则返回 Null。函数Find也可以用来进行查询。该函数可以在数据窗口中的指定范围查找符合某些条件的 数据。该函数的语法格式是:dwcontrol.Find ( expression_r, start, end )其中,dwcontrol是要进行查找的数据窗口控件名称,expression是表达式,含义和注意事 项同SetFilter中的完全相同。start和end都是long类型变量,用行号表示的查找范围,它 们之间没有大小约束。函数返回的是在指定范围内找到的第一个符合条件的记录号,如果没 有找到或发生了错误则返回0如果参数有Null的则返回NullSetSort 和 So

52、rt 数据的排序可以在数据窗口对象设计时就指定排序规则,也可以在脚本中动态指定。使用函 数SetSort和Sort可以完成这一任务,它们和SetFilter、Filter样也必须配对使用。函数SetSort 设置排序的规则,不改变数据的显示,只有当执行了函数Sort时,数据才真正进行重新排 列。函数 SetSort 的语法是:dwcontrol.SetSort ( format )其中,dwcontrol为要进行排序的数据窗口控件的名称;format为排序规则,是string类型, 由字段、函数、ASC或DESC、逻辑联结符、常数构成。可以使用字段名,也可以使用字段 号来表示字段,字段号的格式

53、是#X,其中X为正整数。该函数正确执行返回1,否则返回-1。 和SetFilter函数类似,当指定format为空(”)时,可以取消排序,当指定format为Null时, 可以由用户指定排序规则。使用函数 SetSort 后,再使用 Sort 函数才能重新排列数据。该函数的格式是:dwcontrol.Sort ( )其中, dwcontrol 是和 SetSort 中同名的数据窗口控件名称。该函数正确执行则返回 1,否则返回-1,如果参数dwcontrol为Null,则返回Null。SelectRow选中指定的行dwcontrol.SelectRow ( row, boolean )其中, d

54、wcontrol 是数据窗口控件的名称; row 是行号,该参数为 0 则表示是对数据窗口中 的所有数据行进行操作;boolean表示是否选中,如果是True,表示选中行号row的数据行, 如果是 False 则取消。该函数正确执行返回 1,发生错误返回-1,如果参数有 Null 则返回 Null。PrintSetup、 Print、 PrintOpen、 PrintDatawindow、 PrintClose、 PrintCancelPrintSetup():打印设置PrintOpen():启动打印作业PrintOpen 函数用来打开一个作业,并返回当前可以使用的打印作业号,该打印作业号可以

55、 标识当前的打印工作。该函数的语法是:PrintOpen ( jobname )如果发生错误,该函数返回-1。打印作业名称是可选的,名字在打印队列中。在打印作业的 最后必须关闭打印作业,使 PowerBuilder 和 Windows 清除打印作业所占用的所有资源。因 此,每个启动作业的语句都有一个关闭作业的语句相对应。PrintClose()、PrintCancel():关闭打印作业有两个函数可以用来关闭打印作业。PrintClose()函数把当前页传送给打印机,并关闭当前打 印作业。语法格式为:PrintClose(printjobnumber)函数PrintCancel()取消打印作业并

56、删除当前的打印文件。这个函数可以与Print或者PrintDataWindow ()函数组合使用。用于PrintDatawindow ()的语法是: DatawindowControl.PrintCancel()用于Print()的语法是:PrintCancel(printjobnumber)PrintClose()函数和PrintCancel()函数是互相排斥的,成功调用过一个以后,不要在没有再次 打开打印作业时调用另一个函数。PrintDatawindow():该函数是以单个打印作业的形式打印数据窗口控件中的内容。PowerBuilder使用数据窗口对 象中定义的字体和布局进行打印。用这个

57、函数可以在一个打印作业中打印多个数据窗口,但 是每个数据窗口控件都从新的一页开始打印;如果要让几个数据窗口打印在同一页中,则需 要利用底层的打印函数或将要打印在同一页中的数据窗口,创建成一个composite显示样式 的数据窗口。 PrintDatawindow 函数的语法是:PrintDatawindow(printjobnumber,datawindow)其中,printjobnumber是PrintOpen函数返回的打印作业号,datawindow是要打印的数据窗 口控件的名称。除了能够和Printopen()、PrintClose()函数共同使用外,其他函数都不能和 PrintData

58、window共同使用。下面是一个完整地使用函数PrintDatawindow()进行数据窗口打 印的例子,该例子中同时打印三个数据窗口:Long ll_jobLl_job = PrintOpen(” 数据窗口打印)PrintDatawindow(ll_job,dw_1)PrintDatawindow(ll_job,dw_2)PrintDatawindow(ll_job,dw_3)PrintClose(ll_job)/关闭打印作业Print():该函数是一个通用的函数,可以用来打印PowerBuilder中许多可视对象。下面介绍打印数 据窗口时的语法,格式如下:datawindowname.Pr

59、int ( canceldialog )datawindowname为要打印的数据窗口控件名称,canceldialog是一个boolean型变量,指示 在打印时是否显示一个无模式的可以随时取消打印的窗口,该变量缺省为True。该函数正 确执行则返回1,执行过程中发生错误则返回-1。*虽然该函数和PrintDatawindow 样都可以打印数据窗口,但是它们之间是有区别的。Print 函数使用设置在数据窗口对象的打印规范来打印数据窗口,而PrintDatawindow函数使用打 印机当前的设置来打印数据窗口。PB 数据窗口二获取数据窗口信息函数 Describe使用函数Describe可以获取

60、数据窗口对象中的信息。该函数语法是:dwcontrol.Describe(propertylist)其中,dwcontrol是数据窗口控件名称,propertylist是以空格分隔的特性或运算表达式列表, 它用来报告列与图形对象的属性值。表达式可以用特定行与列的值进行运算。Describe函数 返回的是一个字符串,该字符串是对指定属性的描述,不同的属性占用不同的行(不同属性 用n分隔)。如果有无效属性则返回该属性之前的属性取值和一个惊叹号(!)。如果某个 属性没有值,则返回一个问号(?)。如:dw_1.describe(datawindow.bands datawindow.objects)

61、headertdetailtsummarytfooternemp_idtemp_id dw_1.describe(datawindow.band datawindow.objects) dw_1.describe(datawindow.bands datawindow.object) headertdetailtsummarytfooter!如果特性值容易引起混淆,例如,带有感叹号、问号、Tab键或换行符,这些符号在返回字 符串中将用引号括起来。为了测试这种情况,先给数据窗口中的标签name_t中输入内容为 name?,然后使用下面的语句:dw_1.describe(name_t.text)上

62、面的语句显示name?,这是因为如果值列表中的第一个值用引号引着,那么该特性列表 中的剩余值也用引号引着。*标签name_t和addr_t中分别输入内容为name?和zjhzdw_1.describe(name_t.text addr_t.text)name? zjhzdw_1.describe(addr_t.text name_t.text)zjhz name?*最后不显示空格(n)对列的引用 在属性描述时,经常要对列进行引用。引用列的方法有两种,或者使用列名,或者使用列号。 应尽量避免使用列号,因为列号是和创建数据窗口时选择字段的顺序相对应的。在以后的修 改中很有可能取消某些字段或者调整字

63、段的选择顺序,或者改变数据源,这时就很容易出现 错误,更糟糕的是这时很有可能没有错误信息,张冠李戴了。下面是一个使用列号进行属性描述的语句:dw_1.describe(#5.coltype)这种语法可以和函数getcolumn搭配使用,用来检索当前列号。下面是一个显示数据窗口中 所有字段类型的例程:integer li_count,li_indexli_count = integer(dw_1.describe(datawindow.column.count)for li_index = 1 to li_countmessagebox(string(li_index),dw_1.describe(# + string(li_index) + coltype) next函数 uate在使用Describe描述数据窗口对象中的相关信息时,有一个非常重要的函数不能不掌握, 就是uate。虽然函数Describe可以获取对象的信息,但是表达式的取值就不能正常读取了, 而这又是经常遇到的。所以,函数uate非常重要,它可以使函数Describe获取表达式的

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!