




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PB-数据窗口控件 数据窗口控件-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.Primaryrow: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.currentrow,column 该语句的格式是: dwcontrol.object.databuffer.whichvaluerow,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后,用户就能够拖动数据窗口。 ControlMenu 是否显示控制菜单,缺省为 False。该属性当 TitleBar属性为 True时才有效。 MaxBox 和 MinBox 是否显示最大和最小控制按钮,缺省为 False。当属性 TitleBar为 True时, 该属性有效。属性 TitleBar和 ControlMenu、MinBox、MaxBox 共同控制数据窗 口的外观是否像窗口的外观。 HscrollBar 和 VscrollBar 这两个属性用来控制数据窗口控件的横向和纵向滚动条是否显示。设置为 True 时,滚动条可以根据需要自动显示,数据够显示时则不出现滚动条。 LiveScroll 该属性是一个比较重要的属性,缺省为 True,表示当拖动垂直滚动滑块时,数 据窗口中的行也跟随滚动;属性为 False时表示拖动垂直滚动滑块时,数据窗 口中的行不跟随滚动,放开垂直滚动滑块后,数据窗口中的数据才滚动到适当 数据行上。建议选中该属性,这样当数据很多时,用户就可以拖动垂直滚动小 滑块来快速浏览数据了。 HsplitScroll 该属性是一个非常有实际用途的属性。该属性决定是否显示分割滚动条,缺省 为 False。当数据窗口比较宽,要显示水平滚动条时,建议将该属性设置为 True。 RightToLeft 该属性为 True时表示数据窗口中的所有字符都从右向左显示。缺省为 False。 当设置该属性为 True时,还必须要操作系统的支持,该属性才能起作用。 Resizeable 用户是否可以调整数据窗口的大小,缺省为 False。 Border 是否显示边框,默认为 True,只有在 True的情况下 BorderStyle才起作用 BorderStyle 取值为枚举型,用来定义数据窗口边框样式。有四个取值: StyleBox!、StyleLowered!、StyleRaised!、StyleShadowBox!,缺省边框类型 为 StyleLowered。 Icon 用来给数据窗口指定标题条左上角的图形,缺省为 Windows标志图。 【事件】 Clicked 鼠标左键在数据窗口控件上任意位置单击时触发该事件。该事件中有 4个参数, 可以在脚本中直接使用。 xpos:表示和数据窗口最左侧的距离的整数。 ypos:表示和数据窗口最上部的距离的整数,不包括标题条。 row:表示用户所单击的行号的 long型数。 dwo:用户单击对象,是 DWObject类型。 在该事件的脚本中使用这些参数,可以给用户一些提示信息或者获取用户单击 内容的信息。 返回值:0 表示继续处理,这是缺省值。1 表示停止处理。 *当选择和当前行不同的数据行时可以触发 ItemFocusChanged和 RowFocusChanged事件,当单击当前行的其他字段时可以触发 ItemFocusChanged事件。DoubleClicked 事件也可以触发该 Clicked事件。 DBError 在数据窗口控件中发生数据库错误时触发该事件。该事件有以下参数。 SQLdbcode:long 类型的错误代码,具体含义由 DBMS指定。当 DBMS没有指定 错误代码时,SQLdbcode 提供 4个错误代码,-1 表示事务对象参数错误而不能 联结到数据库,-2 表示不能联结到数据库,-3 表示因为其他用户的修改导致用 来进行检索或修改的键值在数据库中已经不存在而产生错误,-4 表示向数据库 中写 blob对象时失败。 SQLerrtext:string 类型,数据库指定的错误信息。 SQLsyntax:string 类型,当错误发生时,发送到数据库的 SQL语句。 buffer:DWBuffer 枚举型,表示导致错误的数据所在的缓冲区。 row:long 类型,导致错误的数据的行号。 返回值:可以用 return语句任意指定返回什么数据。有特定含义的返回值是 0 和 1。0 表示显示错误信息,1 表示不显示错误信息。 DoubleClicked 鼠标左键在数据窗口控件中双击时触发该事件。该事件中的 4个参数和 Clicked事件中的名称及含义完全相同,也可以直接在该事件的脚本中直接使 用。 该事件的返回值可以用 return指定。有特殊函数的返回值是 0,表示继续处理。 EditChanged 在数据窗口控件的编辑框中每次按钮都触发该事件。一般很少在该事件下编写 脚本。该事件提供三个参数。 row:long 类型,当前编辑的行号。 dwo:DWObject 类型,正在编辑的对象。 data:String 类型,当前编辑框中的内容。 返回值:可以用 return指定任意返回值,0 表示继续处理。 *每次编辑时触发 Error 当数据窗口对象中的数据或者表达式错误时触发该事件,在分布式系统中联结 发生错误时也会触发该事件。和 DBError事件不同的是,该事件在没有和数据 库交互时就有可能触发,而 DBError事件触发时肯定和数据库发生了交互。通 常在该事件中编写脚本,提供对错误的处理。该事件提供了很多参数。 errornumber:unsigned integer 类型,由 PowerBuilder指定的错误代码号。 errortext:string 类型,由 PowerBuilder指定的错误信息。 errorwindowmenu:string 类型,造成错误的脚本所在对象的父对象的名称。 errorobject:string 类型,造成错误的脚本所在的对象的名称。 errorscript:string 类型,造成错误的语句所在的脚本的全部内容。 errorline:unsigned integer 类型,造成错误的语句在其脚本中所占的行号。 action:在 Error事件下的代码执行完后,该参数取值由脚本设定。可以指定 的值有:ExceptionFail!表示错误处理失败(执行该值有可能触发应用的 SystemError事件);ExceptionIgnore!表示忽略错误继续执行(要谨慎使用 该取值,因为忽略错误有可能将再次导致其他错误);ExceptionRetry 值只能 用于 OLE,对于数据窗口控件,没有该取值,该取值表示再次执行刚才造成错 误的功能;ExceptionSubstituteReturnValue!表示使用参数 returnvalue的返 回值,而不是返回 OLE服务器或数据窗口控件的错误代码,并且取消错误状态。 returnvalue:当 Action指定为 ExceptionSubstituteReturnValue!时返回该 参数的取值。 *对于数据窗口控件来说,如果在运算数据或属性表达式时发生了错误,将进行 如下的错误处理过程: a.触发 Error事件; b.如果 Error事件中没有脚本或者 Action变量设置成 ExceptionFail!,则触 发应用的 SystemError事件; c.如果 SystemError事件下也没有脚本,便会发生应用程序错误,然后终止应 用程序。 所以,在该事件或者应用的 SystemError事件下应该编写脚本。这样才不至于 退出应用程序,使用户没有处理的机会,甚至录入了半天的数据连个保存的机 会也没有了。 返回值:该事件没有返回值,也不在该事件中使用 return语句。 ItemChanged 当某单元(行和列的交叉点叫做单元)编辑后(内容改变),光标要离开时触发 该事件,如使用了 Enter按钮、单击了 Tab按钮、使用了光标键、在其他字段 上单击了鼠标左键等。当编辑完一个单元的内容而没有离开该单元,这时数据 窗口失去焦点,这种情况不会触发该事件(所以在 LoseFocus事件中要使用函 数 AcceptText)。三个参数 row、dwo 和 data的含义和 EditChanged事件的三 个参数完全相同。 返回值:可以使用 return语句返回任意值。0 表示接受刚刚修改的数据,该值 是缺省值;1 表示放弃刚才的修改,不允许焦点离开;2 表示放弃刚才的修改, 允许焦点离开。 *编辑框内容有变化并离开此编辑框时触发;注意:当 editchanged事件下有代 码,编辑框内容有变化且离开此编辑框时,不会触发此事件 ItemError 当某单元被编辑后光标要离开时,如果单元中的新数据不能通过有效性校验, 则触发该事件。(同 ItemChanged:当编辑完一个单元的内容而没有离开该单元, 这时数据窗口失去焦点,这种情况不会触发该事件)该事件在 ItemChanged事件 之前触发,该事件触发就不能再触发 ItemChanged事件了。该事件中的三个参 数和 ItemChanged事件中的三个参数完全相同。 返回值:可以使用 return语句返回任意数值, 0 表示放弃修改的数据,并显 示错误信息,焦点不离开该单元,该取值是缺省值;1 表示放弃修改的数据但 不显示错误信息提示,焦点不离开该单元;2 表示接受刚刚修改的错误数据;3 表示放弃刚刚修改的数据,并且焦点不离开该单元。 ItemFocusChanged 当焦点离开某单元时触发该事件(不管内容有没有改变)。该事件提供了 row和 dwo两个参数,含义和前面介绍的完全相同。可以使用 return语句返回任意数 值,0 表示继续处理。 *不管编辑框中的内容有没有改变,离开编辑框时触发该事件,注意:当离开数 据窗口时不触发 PrintEnd 当打印工作完成时触发该事件。参数 PagesPrinted可以在脚本中直接使用,是 一个 long类型的变量,表示已经被打印的页数。 PrintPage 在数据窗口每页进行打印格式处理之前触发该事件。参数 Copy和 PageNumber 在脚本中可以直接使用,表示该页要打印的份数和当前页的页号。返回值 0表 示不要跳过当前页,1 表示跳过当前页。一般在该事件下编写脚本显示打印进 度信息,例如: st_1.text=“正在打印第“+String(pageNumber)+ “页“ 也可以在该事件中决定是否真正要打印该页。例如,下面的脚本只打印偶数页 码的页面: If Mod(pagenumber,2) = 0 Then return 0 Else return 1 End If PrintStart 数据窗口打印开始时触发该事件。该事件中的参数 PagesMax是一个 long型变 量,表示将要被打印的总页数(不包括跳过的页)。返回 0表示继续处理。 RetrieveEnd 当数据窗口检索完毕时触发该事件。参数 rowcount是一个 long型变量,表示 检索完后检索到的记录数。 RetrieveRow 每检索到一条记录时都触发该事件。参数 row是 long类型变量,记录当前检索 到的数据的序号。返回值 0表示继续检索,1 表示停止检索。检索大量数据之 前可以设置中断标志,让用户在检索过程中可以停止检索。 RetrieveStart 当数据窗口的检索操作将要开始时触发该事件,该事件中没有参数。返回值 0 表示继续执行,该值是缺省值,1 表示不执行检索,2 表示在检索之前不清除数 据行和缓存区。通常不在该事件下编写脚本,即使编写脚本,一般也是利用返 回值 2的特性来控制检索操作不清除缓存区,这样可以将检索到的数据添加到 数据窗口中,并且在数据窗口中保留检索之前的数据。 RowFocusChanged 当前行改变时触发该事件。CurrentRow 参数是一个 long类型变量,保存当前 记录号。该事件下的典型编程是修改当前行标识,将当前行明显地标识出来, 可以让用户清楚地知道要对哪行进行操作,在该事件和其他事件的配合下共同 修改当前行标识。 *不管内容有没有改变,当前行改变时触发;在离开数据窗口时不触发 *RowFocusChanging:当前行改变前触发;参数 currentrow触发前所在行, newrow触发后当前行;rowfocuschanged 的 currentrow等于 rowfocuschanging的 newrow ScrollHorizontal 当使用光标键、Tab 按钮、滚动条等等在数据窗口中进行水平滚动时触发该事 件。很少在该事件上编写脚本。 ScrollVertical 当在数据窗口中使用光标键、滚动条、Tab 键等进行上下滚动时触发该事件。 通常在该事件中编写脚本来改变当前行。因为当上下滚动数据窗口时,如果当 前行不在当前显示的区域内,则容易给用户造成错觉,可以在该事件中编写脚 本将当前页面的第一行数据设置为当前行。使用 Describe和 Evaluate函数可 以实现该功能 SQLPreview 当执行函数 Retrieve、ReselectRow 和 Update时,SQL 语句要提交到 DBMS,这 时触发该事件。该事件的参数比较复杂。 request:取值为 PreviewFunctionReselectRow!、PreviewFunctionRetrieve! 或 PreviewFunctionUpdate!分别代表触发该事件的函数是 ReselectRow、Retrieve 和 Update。 SQLtype:引起该事件的 SQL语句类型。 取值为 PreviewDelete!、PreviewInsert!、PreviewSelect!、PreviewUpdate! 分别表示是 Delete 、Insert、Select、Update 语句。 SQLsyntax:string 类型,取值为提交到 DBMS的 SQL语句。 buffer:当前 SQL语句所涉及到的数据所在的缓存区,取值为枚举型, Delete!、Filter!、Primary!分别表示删除缓存区、过滤缓存区和主缓存区。 row:long 类型变量,表示该事件中涉及到的记录数。 返回值 0表示继续处理,1 表示停止处理,2 表示处理下一个 SQL请求。 UpdateEnd 当从数据窗口控件发送来的对数据库的修改都完成后触发该事件。该事件的三 个参数 RowsInserted、RowsUpdated、RowsDeleted 都是 long类型的变量,分 别表示插入、修改和删除的记录数。 UpdateStart 在调用了 update函数之后、开始修改之前触发该事件,该事件没有参数。返回 值 0表示继续处理,1 表示停止修改。 LoseFocus 数据窗口失去焦点时触发。 该事件中编写脚本,主要是保证用户在数据窗口中最后输入的内容不丢失。数 据窗口中的输入内容只有当焦点改变时才真正转交给数据窗口,否则只是保存 数据窗口的编辑控件。脚本比较简单:this.AcceptText() *GetFocus:数据窗口得到焦点时触发。 【函数】 SetTransObject 语法:dwcontrol.SetTransObject ( transaction ) 功能:给数据窗口或者 datastore控件 dwcontrol设置事务对象 transaction,缺省事务对象是 SQLCA。 返回值:成功设置事务对象则返回 1,执行过程中发生了错误则返回-1,有任 意参数为 Null时返回 Null。 Retrieve 语法:dwcontrol.Retrieve ( , argument, argument . . . ) 功能:使用数据窗口控件的当前事务对象检索数据库中的数据。如果数据窗口 控件对应的数据窗口对象定义了检索参数,则应该在该函数中指定检索参数, 参数的个数和数据窗口对象的检索变量个数相等,对应的数据类型相兼容。 返回值:返回数据窗口控件主缓存区(PrimaryBuffer)中的记录数,如果检索 数据时发生错误则返回-1,如果任意参数为 Null则返回 Null *该函数的参数和数据窗口对象定义的参数的顺序要相同,类型要兼容。个数不 能少于数据窗口对象定义的参数,即可以等于和多于数据窗口对象定义的参数, 多的参数忽略。 DeleteRow 语法:dwcontrol.DeleteRow ( row ) 功能:删除数据窗口 dwcontrol中的第 row行数据,如果 row为 0则表示删除 当前行的数据。 返回值:执行成功则返回 1,执行错误则返回-1,如果任意参数为 Null则返回 Null。 *该函数执行后只是将被删除的数据从数据窗口的主缓存区移放到 Deleted缓冲 区,在数据库中并没有真正删除数据,当正确执行了 Update函数并且使用 commit语句提交了事务后,才真正从数据库中删除该数据 InsertRow 语法:dwcontrol.InsertRow ( row ) 功能:在数据窗口 dwcontrol的第 row行前插入一行空白数据。当指定 row为 0时,表示在当前行之前插入一行空白数据。 返回值:返回插入的数据的行号,如果执行过程中发生错误则返回-1,如果任 意参数为 Null则返回 Null Update 语法:dwcontrol.Update ( accept , resetflag ) 功能:提交数据窗口或者 datastore中的数据。如果 accept为 True,表示在 提交数据之前自动执行 AccpetText函数,否则不执行该函数,该参数缺省为 True;如果 resetflag为 True,表示数据提交后自动清除修改标识,该参数缺 省为 True。 返回值:执行成功则返回 1,发生错误则返回-1,如果 dwcontrol为 Null则返 回 Null AcceptText 语法:dwcontrol.AcceptText ( ) 功能:该函数执行时,首先对当前编辑框中的内容进行对应字段的校验规则, 能够通过校验规则,则保存在对应字段中,否则显示校验信息提示错误。需要 执行该函数的原因是,当在某字段上的编辑框中输入内容而没有移动光标到别 的字段上时,其他控件获得焦点,此时编辑框中的内容不能被保存到字段中, 所以就应该在数据窗口失去焦点时执行该函数。 返回值:执行成功则返回 1,执行过程中发生错误则返回-1,如果 dwcontrol 为 Null则返回 Null。 *该函数在数据窗口的 ItemChanged事件中不起作用,因为项目改变是发生在接 受编辑框中内容之后 ModifiedCount 语法:dwcontrol.ModifiedCount ( ) 功能:获取数据窗口或者 Datastore中被修改过但还没有提交到数据库中的记 录数。 返回值:返回 long类型的数据窗口控件中被修改过的记录数,如果没有记录被 修改过或者修改后都已经保存到了数据库中则返回 0,执行过程中如果发生错 误则返回-1,如果 dwcontrol为 Null则返回 Null。 *该函数获得的修改过的记录数包括主缓存区和 Filter缓存区的被修改过的和 新添加到数据窗口中的记录数 DeletedCount 语法:dwcontrol.DeletedCount ( ) 功能:获取数据窗口控件或者 datastore控件 dwcontrol中被删除的记录数。 返回值:返回 long类型的已经被删除但还没有提交到数据库中的记录数,如果 执行过程中发生了错误则返回-1,如果 dwcontrol为 Null则返回 Null,如果 没有删除过记录则返回 0 RowsMove 它可以将数据从一个缓冲区移动到另外缓冲区中。该函数的语法是: dwcontrol.RowsMove ( startrow, endrow, movebuffer, targetdw, beforerow, targetbuffer ) 其中,dwcontrol 是进行移动操作的源数据窗口;startrow 和 endrow是要移动 数据的范围(包括这两个行号的数据);movebuffer 指要从哪个缓存区移出数据, 可以是 Primary!、Delete!、Filter!;targetdw 是目标数据窗口控件名称; beforerow表示在目标数据窗口的哪一行之前插入移入的数据,如果该数值比 目标数据窗口的行数大,则在最后插入移入的数据;targetbuffer 是目标缓存 区,取值同 movebuffer一样。 GetItemStatus 和 SetItemStatus 使用函数 dwcontrol.GetItemStatus ( row, column, Primary! )可以获取该 缓冲区内指定单元的状态,当参数 column为 0时,表示读取整个行的修改状态。 有以下状态。 NotModified! :指定单元的数据和原始数据相同,没有修改过。 DataModified!:指定单元的数据和原始数据不同,修改过。 New!:该数据行是新增加的,但还没有在该行上输入数据。 NewModified!:该数据行是新增加的,并且已经在该行上录入了数据。 这些修改标识都是由数据窗口自动维护的,一般情况下没有必要编写脚本修改 这些标记,但并不是说就不能修改。PowerBuilder 提供了函数 SetItemStatus,它的语法是: dwcontrol.SetItemStatus ( row, column, dwbuffer, status ) 其中,row 参数指定将要修改状态的行;column 参数指定将要修改状态的列(可 以是整型的列号,也可以是 string类型的列名),当列号为 0时表示要修改 row指定的整行的状态;dwbuffer 指定要修改哪个缓冲区(肯定不能是 original),status 为上面的四个取值中的一个,但不是任意的取值,因为有 些状态不能用该函数设置成另外一种状态,必须是能够转换的状态。下面列出 了能够转换的状态。 期望的状态 New! NewModified! DataModified! NotModified! 当前状态 New! Yes Yes No NewModified! No Yes New DataModified! NewModified! Yes Yes NotModified! Yes Yes Yes 表中的 Yes表示可以使用 SetItemStatus进行该状态设置,No 表示不会产生预 期的状态,如果标明了某个特定的状态,则说明是新的状态,而不是期望的状 态。例如,数据窗口 dw_1的第 1行第 1列的当前状态为 DataModified!,使用 函数 dw_1.SetItemStatus(1,1,New!)后,第 1行第 1列的状态改变为 NewModified!。同样对于该数据窗口 dw_1,如果使用函数 dw_1.SetItemStatus(1,1,NotModified!),则会将其状态改变为 NotModified!。当从一种状态不允许转变到另一种状态时,可以修改成其他一 个中间状态,然后再进行一次转换。例如,要从 new!改成 NotModified,应该 首先转换到 DataModified! GetItemX 读取数据窗口中的数据 dwcontrol.GetItemX( row, column , dwbuffer, originalvalue ) 其中的 X可以替换成 Date、DateTime、Decimal、Number、String、Time,所 以读取数据的函数有 6个。参数 row表示要读取哪行的数据,是一个 long类型 数值。column 代表列,可以是 string型的列名,也可以是整型的列号。 dwbuffer是 DWBuffer枚举型,取值 Primary!、Delete!、Filter!分别代表主 缓冲区、删除缓冲区和过滤缓冲区。originalvalue 为 Boolean型,表示是否 读取最近一次检索时检索到的初始值,当指定 dwbuffer时必须指定该参数,该 参数和 dwbuffer都是可选的。函数正确执行则返回对应类型的数据,执行过程 中发生错误则返回空值(“),任何参数为 Null则返回 Null SetItem 和 SetText 函数 SetItem的语法格式是: dwcontrol.SetItem ( row, column, value ) 各个参数的含义如下。 dwcontrol:数据窗口或 datastore控件名称。 row:要设置的数据所在行。 column:要设置的数据所在的列。可以用整型列号,也可以用 string型列名。 value:要设置的值,应该和要设置的列的类型一致。 函数正确执行则返回 1,这时数据窗口中 row行 column列显示的数据是刚刚用 该函数设定的数据,如果函数执行过程中发生错误则返回-1。注意,该函数执 行时仅仅检查函数中指定数据的类型和字段的类型是否一致,不会进行有效性 校验,包括在数据窗口中设置的校验规则、在 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(li_i) /使第 I行成为当前行 dw_1.SetText(“屁“) /向当前编辑框中写入内容 Next dw_1.SetColumn(“sex“) /选中性别列,保证最后一个也要通过校验规则 SetColumn、SetRow 和 GetColumn、GetRow 和 GetClickedColumn、GetClickedRow 和 GetColumnName 设置当前列 integer dwcontrol.SetColumn ( string column) integer dwcontrol.SetColumn ( integer column) 设置当前行 integer dwcontrol.SetRow ( long row ) 得到当前列 integer dwcontrol.GetColumn ( ) 得到当前行 long dwcontrol.GetRow ( ) 得到用户单击的列 integer dwcontrol.GetClickedColumn ( ) 得到用户单击的行 long dwcontrol.GetClickedRow ( ) 得到当前列的名 string dwcontrol.GetColumnName ( ) SetFilter、Filter 和 Find 这两个函数必须配对使用,首先使用函数 SetFilter设置过滤规则,然后用函 数 Filter进行过滤。过滤规则是 boolean类型的表达式,能够使用过滤规则的, 将表达式为 True的数据行显示在数据窗口中,使其为 False的数据行被移送到 数据窗口的 Filter!缓存区。在设计数据窗口对象时也可以定义过滤规则,使 用这两个函数可以根据需要来动态改变过滤规则。在设计时,指定了过滤规则 的数据窗口可以使用这两个函数再进行过滤。每次过滤都是对数据窗口的 Original!缓存区进行的,而不是在前一次过滤出来的数据基础上再次过滤。 函数 SetFilter的语法是: dwcontrol.SetFilter ( format ) 其中,dwcontrol 是要进行过滤的数据窗口控件名称。format 是过滤规则, string类型。过滤规则是由字段、常量、运算符、函数构成的 boolean表达式。 需要取消过滤规则显示所有的数据时,可以指定过滤规则为空(“),如果让用 户可以随便指定过滤规则,则可以使用 Null的过滤表达式,这时 PowerBuilder提供一个和数据窗口设计时相同的过滤规则指定窗口。该函数正 确执行返回 1,否则返回-1。执行完后,数据窗口中显示的数据没有发生变化, 只有当执行了 Filter函数后才按照刚刚指定的过滤规则显示数据。 该函数的语法是: dwcontrol.Filter ( ) dwcontrol是和 SetFilter中同名的数据窗口控件名称。该函数执行正确则返 回 1,否则返回-1,如果 dwcontrol为 Null则返回 Null。 函数 Find也可以用来进行查询。该函数可以在数据窗口中的指定范围查找符合 某些条件的数据。该函数的语法格式是: dwcontrol.Find ( expression, start, end ) 其中,dwcontrol 是要进行查找的数据窗口控件名称,expression 是表达式, 含义和注意事项同 SetFilter中的完全相同。start 和 end都是 long类型变量, 用行号表示的查找范围,它们之间没有大小约束。函数返回的是在指定范围内 找到的第一个符合条件的记录号,如果没有找到或发生了错误则返回 0,如果 参数有 Null的则返回 Null SetSort 和 Sort 数据的排序可以在数据窗口对象设计时就指定排序规则,也可以在脚本中动态 指定。使用函数 SetSort和 Sort可以完成这一任务,它们和 SetFilter、Filter 一样也必须配对使用。函数 SetSort设置排序的规则,不 改变数据的显示,只有当执行了函数 Sort时,数据才真正进行重新排列。 函数 SetSort的语法是: dwcontrol.SetSort ( format ) 其中,dwcontrol 为要进行排序的数据窗口控件的名称;format 为排序规则, 是 string类型,由字段、函数、ASC 或 DESC、逻辑联结符、常数构成。可以使 用字段名,也可以使用字段号来表示字段,字段号的格式是#X,其中 X为正整 数。该函数正确执行返回 1,否则返回-1。 和 SetFilter函数类似,当指定 format为空(“)时,可以取消排序,当指定 format为 Null时,可以由用户指定排序规则。 使用函数 SetSort后,再使用 Sort函数才能重新排列数据。 该函数的格式是: dwcontrol.Sort ( ) 其中,dwcontrol 是和 SetSort中同名的数据窗口控件名称。该函数正确执行 则返回 1,否则返回-1,如果参数 dwcontrol为 Null,则返回 Null。 SelectRow 选中指定的行 dwcontrol.SelectRow ( row,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年济宁市任城区事业单位公开招聘工作人员(教育类)(125人)考前自测高频考点模拟试题及答案详解(名校卷)
- 2025年春季湖南长沙市雨花区雨花实验第四小学实习教师招聘的考前自测高频考点模拟试题及答案详解一套
- 2025年福建省泉州市晋江市农业农村局公开招聘1人考前自测高频考点模拟试题完整答案详解
- 2025年甘肃省兰州大学物理科学与技术学院诚聘英才模拟试卷有答案详解
- 2025年吉林省特岗教师招聘考试职位表考前自测高频考点模拟试题及答案详解(典优)
- 2025年生态补偿机制在城乡一体化发展中的生态保护作用报告
- 2025年教育行业教育培训机构教学质量监控与提升研究报告
- 在婚礼上父亲致辞
- 4团团圆圆过中秋 教学设计-道德与法治二年级上册统编版
- 2025广西桂林产业发展集团有限公司招聘2人笔试历年参考题库附带答案详解
- 国家能源集团陆上风电项目通 用造价指标(2025年)
- 融媒体中心保密方案
- 输油管线牺牲阳极法阴极保护施工方案
- 篮球教学室内课件
- 2025年四川省高考历史试卷(含答案)
- 2025党考试题及答案
- 乳牙龋齿护理配合过程
- 2025至2030中国轨道交通行业发展分析及投资前景与战略规划报告
- 健康教育和健康促进课件
- 新东方合同协议书
- 2025年北京海淀区九年级中考二模数学试卷试题(含答案详解)
评论
0/150
提交评论