PB的数据窗口操作
PB数据窗口技巧问答
PB数据窗口技巧问答数据窗口是PowerBuilder中用于显示、获取和更新数据库表格的对象之一、在使用数据窗口进行数据操作的过程中,有一些技巧和常见问题需要注意和解决。
以下是对数据窗口技巧和问答的详细介绍。
1.如何在数据窗口中添加一个新的数据库表格?可以通过以下步骤在数据窗口中添加一个新的数据库表格:(2) 选择“Insert”菜单,然后选择“Tables”子菜单。
(3)在弹出的对话框中选择要添加的数据库表格,然后点击“OK”按钮。
2.如何在数据窗口中显示特定的数据列?可以通过以下步骤在数据窗口中显示特定的数据列:(2) 在画布区域中右键点击并选择“Insert”菜单,然后选择“Columns”子菜单。
(3)在弹出的对话框中选择要显示的数据列,然后点击“OK”按钮。
3.如何在数据窗口中设置筛选条件?可以通过以下步骤在数据窗口中设置筛选条件:(2) 在画布区域中右键点击并选择“Filter”菜单。
(3)在弹出的对话框中输入要设置的筛选条件,然后点击“OK”按钮。
4.如何在数据窗口中设置排序条件?可以通过以下步骤在数据窗口中设置排序条件:(2) 在画布区域中右键点击并选择“Sort”菜单。
(3)在弹出的对话框中选择要设置的排序条件,然后点击“OK”按钮。
5.如何在数据窗口中添加计算列?可以通过以下步骤在数据窗口中添加计算列:(3)在弹出的对话框中输入计算列的表达式和名称,然后点击“OK”按钮。
6.如何在数据窗口中设置格式化?可以通过以下步骤在数据窗口中设置格式化:(2)在画布区域中选择要设置格式化的数据列。
(3) 在属性窗口中选择“Format”选项卡,然后选择要应用的格式化类型和样式。
7.如何在数据窗口中执行增、删、改操作?可以通过以下步骤在数据窗口中执行增、删、改操作:(1) 在数据窗口画布区域中右键点击并选择“Insert”菜单,然后选择“Rows”子菜单来添加新的行。
(2) 在数据窗口画布区域中右键点击并选择“Delete”菜单来删除选定的行。
PB获取或操作数据窗口语句的方法
PB获取或操作数据窗⼝语句的⽅法1、setsqlselect⽤法:ls_select=getsqlselect //通过getsqlselect取得当前数据窗⼝的查询语句ls_where=" " //给变量ls_where赋值,将所要添加的限定条件赋给此变量,但应考虑到select⼦句与where⼦句之前的空格dw_1.setsqlselect(ls_select+ls_where) //通过setsqlselect将⽣成的查询语句更新⾄数据窗⼝dw_1.event ue_retrieve()2、dw_1.modify⽤法:Old_Select=dw_1.Describe("DataWindow.Table.SQLSelect ")ls_select=getsqlselectls_where=" "dw_1.modify("DataWindow.Table.Select='" + ls_select+ls_where + " ' ")dw_1.settransobject(SQLCA)dw_1.retrieve()dw_1.object.DataWindow.Table.Select=Old_Select更新完后可⽤以下语句取出select语句查看并调试messagebox("",string(dw_1.Describe("DataWindow.Table.SQLSelect ")))⽹上有贴⼦说此语句只能更改DW查询语句中的where⼦句,暂未证实3、dw_1.object.DataWindow.Table.Select=" " ⽤法:此种⽤法与dw_1.modify()基本相同,只是使⽤dw_1.modify()时,在()中需要使⽤双引号把其中的DataWindow.Table.Select以及其后的变量引起来,需要考虑引号的对应关系问题,⽽此种⽤法则相对简单⼀些Old_Select=dw_1.Describe("DataWindow.Table.SQLSelect ")ls_select=" select …… from ……"ls_where=" ……"ls_having=" …… "ls_groupby=" …… "dw_1.object.DataWindow.Table.Select=ls_select+ls_where+ls_having+ls_groupbydw_1.settransobject(SQLCA)dw_1.retrieve()dw_1.object.DataWindow.Table.Select=Old_Select感觉此语句最为强⼤,⽤起来也顺⼿,我喜欢注意:在动态修改sql语句时,select段可以修改,但应确保select后⾯跟随的字段个数以及类型应与建⽴数据窗⼝时选择的字段个数和类型相同,否则报错。
pb中数据窗口的应用
Pb中数据窗口的应用在通常的Server/Client方式MIS开发中,总是有没完没了的报表需要制作,调试报表花费的时间也是最多而且乏味,还常常不能满足客户的要求。
要是能够让用户自己调整报表的格式和内容,然后将它保存下来,程序下次启动时它自动调用保存了的报表格式那有多好。
本人通过如下方法最终实现了用的要求。
PB(PowerBuilder)有一种以PSR结尾的特殊的保存报表的文件格式(本文简称作PSR文件)。
根据数据窗口可以直接读取PSR文件生成报表的原理,程序通过生成PSR文件,实现动态报表格式的保存。
一、实现原理:PB中的报表其实就相当于是数据窗口。
第一步,动态报表的实现。
通过设置数据窗口对象(dataobject)中文本、列等的Resizeable 和moveable属性为1来实现对象位置的拖动控制,通过数据窗口的Modify函数实现对象值的更改(包括增加和删除)。
第二步,报表格式的保存。
在一个应用当中,数据窗口对象的名称总是唯一的,将每一个数据窗口对象转化成PSR文件存于数据库表中。
在窗口打开时,程序先校验报表格式是否存在。
如果存在,先将报表格式读取出来放在一个临时文件当中,然后设置数据窗口(datawindow)的数据对象(dataobject)为这个报表文件,然后提取数据;如果不存在,直接提取数据即可。
二、实现过程:1、建立一个数据库表用以保存报表格式文件。
表名:dyn_reportDwobjectVarchar2(20)数据窗口对象名称Primary keyRptitleVarchar2(80)报表的标题名称MemoLong raw 报表格式2、建立一个窗口w_temp。
定义实例变量如下:string is_dwtype,is_dwobject //保存报表中对象的类型及名称控件名称控件含义Dw_print数据窗口对象Cb_exit退出按钮Cb_savereport 报表格式保存按钮3、在窗口的OPEN事件中加入如下代码, 校验报表格式是否存在,如果存在读取定义好的报表格式到数据窗口。
PB 数据窗口高级( DataWindow)应用37个技巧
PB 数据窗口高级( DataWindow) 37个技巧1. 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。
2 .如何在DataWindow中实现列的自动折行我们在PowerBuilder应用程序的开发过程中, 使用DataWindow时, 经常会遇到某列的数据太长, 不能同时全部显示的情况. 若采用自动水平滚动, 操作起来又不够简便. 下面介绍一种方法, 实现列数据多行显示, 即实现列数据的自动折行.具体步骤如下:1) 在DataWindow Painter中打开此DataWindow.2) 在需设定自动折行的列上双击鼠标, 弹开此列的属性窗口.3) 选择Position标签, 选中Autosize Height 多选框.4) 选择Edit标签, 不选中Auto Horz Scroll多选框.5) 单击OK按钮, 保存所做的修改.6) 点中Detail Band (即写有Detail的灰色长带), 单击鼠标右键, 选择Properties... 菜单项.7) 选中Autosize Height多选框.8) 单击OK按钮, 保存所做的修改.9) 保存此DataWindow.注意:连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词, 不会自动进行折行.3. 在数据窗口中实现动画要实现动画,必须要有定时器,在数据窗口中已经有了一个定时器,双击数据窗口将弹出的对话框,在Timer Interval中定义大于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。
PB获取或操作数据窗口语句的方法
PB获取或操作数据窗口语句的方法
PB(PowerBuilder)是一种用于构建企业级应用程序的集成开发环境(IDE),其中包含了用于操作数据窗口的语句和方法。
以下是获取或操
作数据窗口的一些常用语句和方法:
1.获取数据窗口控件对象:
dw_control = dw_ancestor.Object.dw_controlname
这种方法可以通过数据窗口对象的祖先对象获取数据窗口控件的引用,从而进行后续的操作。
2.设置数据源:
dw_control.SetTransObject(SQLCA)
这个方法会将数据窗口的数据源设置为指定的事务对象(通常是SQLCA对象)。
3.检索数据:
dw_control.Retrieve
这个方法会执行数据窗口的检索功能,从数据源中获取数据并显示在
数据窗口中。
4.更新数据:
dw_control.Update
这个方法会将数据窗口中修改的数据更新到数据库中。
5.取消修改:
dw_control.Reset
这个方法会取消对数据窗口的所有修改,恢复到最后一次检索或更新的状态。
6.设置过滤条件:
dw_control.SetFilter(filter_expression)
这个方法可以设置数据窗口的过滤条件,只显示满足条件的记录。
7.查找记录:
dw_control.Find(filter_expression)
这个方法可以在数据窗口中查找满足条件的记录,并将其选中。
以上是一些常用的获取或操作数据窗口语句和方法,使用这些语句和方法可以方便地对数据窗口进行管理和控制。
PB的数据窗口操作
PB的数据窗口操作PB(PowerBuilder)是一种基于面向对象的集成开发环境(IDE),主要用于构建企业级应用程序。
在PB中,数据窗口是一项非常重要的功能,可以用于对数据的处理、展示和修改。
下面将从数据窗口的基本操作、高级特性和数据窗口设计原则等方面,详细介绍PB的数据窗口操作。
一、数据窗口的基本操作1. 创建数据窗口:在PB中,可以通过向导或手动创建数据窗口。
创建数据窗口是通过选择数据源(数据库表、视图或存储过程)、选择数据窗口类型(Grid、Tabular等)和设置窗口布局等步骤完成的。
2.数据绑定:在数据窗口中,可以通过数据绑定将数据源与数据窗口中的控件关联起来。
通过设置数据绑定属性,可以实现数据的读取、展示和修改等功能。
3.数据检索:使用数据窗口可以方便地进行数据检索。
通过设置查询条件、排序方式和数据过滤等属性,可以按照需求从数据库中检索数据,并在数据窗口中显示出来。
4.数据更新:除了展示数据,数据窗口还可以用于数据的更新。
通过设置数据窗口的更新属性,可以实现数据的插入、修改和删除等操作。
同时,PB还提供了事务管理和数据验证等功能,确保数据的完整性和一致性。
5.数据导航:在数据窗口中,可以轻松地实现数据的导航功能。
通过设置数据窗口的导航属性,可以方便地浏览数据,并进行上一条、下一条、第一页和最后一页等操作。
6.数据格式化:PB提供了丰富的数据格式化选项,可以对数据窗口中的数据进行格式化和显示。
例如,可以设置日期格式、货币格式和数值格式等,以便更好地展示和分析数据。
二、数据窗口的高级特性1.动态数据窗口:PB允许动态创建和操作数据窗口。
通过使用动态数据窗口,可以在运行时动态改变数据窗口的结构和属性。
这对于动态查询和灵活的数据展示非常有用。
2.嵌套数据窗口:PB支持嵌套数据窗口的使用。
通过将一个数据窗口嵌套在另一个数据窗口内部,可以实现复杂的数据关联和显示。
例如,可以在父数据窗口中显示子数据窗口的数据。
PB 数据窗口高级( DataWindow)应用37个技巧
PB 数据窗口高级( DataWindow) 37个技巧1. 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录而不能修改,利用Column 的Protect 属性可以很方便的做到这一点,方法如下:将每一列的Protect 属性设置为:If( IsRowNew(), 0, 1) )在PowerScript 中可以动态修改Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。
2 .如何在DataWindow中实现列的自动折行我们在PowerBuilder应用程序的开发过程中, 使用DataWindow时, 经常会遇到某列的数据太长, 不能同时全部显示的情况. 若采用自动水平滚动, 操作起来又不够简便. 下面介绍一种方法, 实现列数据多行显示, 即实现列数据的自动折行.具体步骤如下:1) 在DataWindow Painter中打开此DataWindow.2) 在需设定自动折行的列上双击鼠标, 弹开此列的属性窗口.3) 选择Position标签, 选中Autosize Height 多选框.4) 选择Edit标签, 不选中Auto Horz Scroll多选框.5) 单击OK按钮, 保存所做的修改.6) 点中Detail Band (即写有Detail的灰色长带), 单击鼠标右键, 选择Properties... 菜单项.7) 选中Autosize Height多选框.8) 单击OK按钮, 保存所做的修改.9) 保存此DataWindow.注意:连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词, 不会自动进行折行.3. 在数据窗口中实现动画要实现动画,必须要有定时器,在数据窗口中已经有了一个定时器,双击数据窗口将弹出的对话框,在Timer Interval中定义大于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。
PB数据窗口技巧问答
PB数据窗口技巧问答一、控制数据窗口的显示方式1.使用数据窗口的打开方式:数据窗口可以在工具栏上选择打开方式,如:只读、可更新、可插入等。
3.使用数据窗口对象属性:在对象属性中设置数据窗口的显示方式,如设置为只读或可更新。
二、使用过滤器1. 使用过滤器自动过滤:在PowerBuilder中,可以通过在数据窗口对象的过滤器属性中设置过滤条件,自动过滤查询结果。
2.使用过滤器窗口:在运行时,可以使用过滤器窗口手动设置过滤条件,实时过滤查询结果。
三、使用计算列1.创建计算列:计算列用于在数据窗口中显示计算结果。
可以通过在数据窗口对象的计算列属性中设置计算表达式来创建计算列。
2. 使用计算列函数:PowerBuilder提供了一系列的计算列函数,可以通过在计算列属性中设置函数来实现复杂的计算操作。
四、使用排序功能1.使用数据窗口控制台进行排序:在数据窗口控制台中,可以使用排序按钮对查询结果进行排序。
2.使用数据窗口对象属性进行排序:在数据窗口对象的排序属性中设置排序条件,可以在运行时自动对查询结果进行排序。
五、使用数据窗口查询功能1.使用查询按钮:在数据窗口中添加查询按钮,可以方便用户执行查询操作。
2.使用自定义查询功能:可以在数据窗口对象的SQL属性中设置自定义查询语句,从而实现更高级的查询操作。
七、使用导航功能1.使用导航按钮:在数据窗口中添加导航按钮,可以方便用户浏览查询结果。
2. 使用导航函数:PowerBuilder提供了一系列的导航函数,可以通过调用这些函数实现数据的导航操作。
八、使用图形功能1.添加图形控件:可以在数据窗口中添加图形控件,用于显示图形数据。
2. 使用图形函数:PowerBuilder提供了一系列的图形函数,可以通过调用这些函数实现图形数据的处理和显示。
九、使用数据窗口布局功能1.使用数据窗口布局:可以在数据窗口对象的布局属性中设置布局方式,实现不同的显示效果。
2.使用数据窗口常规属性:在常规属性中,可以设置数据窗口的大小、位置、标题等。
在PB中巧用下拉数据窗口
在PB 中巧用下拉数据窗口---- PowerBuilder 作为目前比较流行的一种开发工具,有其独到之处,那就是数据窗口(DataWindow)。
可以说,数据窗口是PowerBuilder 的核心,在对数据库的开发过程中,无论是录入、查询、统计还是报表,都离不开数据窗口。
但是,除了数据窗口,PB 还提供了下拉数据窗口(DropDown DataWindow),下拉数据窗口的使用,使数据窗口更灵活,更方便,下面举例介绍在数据窗口中使用下拉数据窗口的一些技巧。
---- 在用数据窗口作数据录入时,经常用到代码录入,即对经常输入的某些值设置代码,录入时直接录入代码即可。
例如,有两个表,主表main_table 和代码表code_table,结构如下:main_table字段名类型长度描述Id integer 标识号Name char 8 姓名Sex char 4 性别City Varchar 30 城市Unit Varchar 40 单位---- 下面,详细讨论如何使用下拉数据窗口:一、静态设计下拉数据窗口---- 首先对主表和代码表设计两个数据窗口dw_main 和dw_code,其中dw_main 包括字段id,name,sex,city 和unit; dw_code 包括字段code 和data。
假设unit 字段有几个常用值可使用代码录入,则在设计dw_main 时,用鼠标右键点击字段unit,在下拉菜单中选择Properties...(属性),则系统会弹出unit 列的属性对话框,在其中选择Edit (编辑)项,并在Style(风格)下拉列表框中选择DropDownDW 项,然后在下面的Options(选项)框中作具体的选项配置:在DataWindow 下拉框中选择已设计好的代码数据窗口dw_code 作为下拉数据窗口;在DisplayColumn(显示列)下拉框中选择code 字段;在Data Column(数据列)下拉框中选择data 字段,这表示显示的是code 字段的内容,而实际存于表main_table 中的是data 字段的内容。
如何在PB数据窗口中修改数据---设置数据窗口的更新属性
如何在PB数据窗口中修改数据---设置数据窗口的更新属性数据窗口对象非常强大的原因之一就是能够很容易地修改数据库。
当用户修改了数据窗口中的数据,插入了新的数据行或者删除了数据行以后,只要调用update()函数就可以将修改了的数据保存到数据库中。
但是,这需要一个前提,就是必须设置数据窗口的修改属性。
数据窗口要修改数据表,首先清楚数据窗口只能修改一个数据表。
当数据窗口的数据来源于不止一个数据表时,可以用脚本控制数据窗口的修改属性来对数据表逐个进行修改,这种技术在后面有关章节介绍。
下面介绍一次修改一个数据表的设定方法。
当数据窗口是用来接受用户的手工录入数据时,应该设置两方面的属性才能确保数据窗口能够用来修改数据表。
一个是修改数据窗口的修改属性,另一个是用户可以修改的字段的相关属性值。
首先介绍数据窗口的修改属性的设置。
在数据窗口画板中,使用菜单项Rows->Update Properties,弹出如图所示的窗口。
数据窗口的所有修改属性都集中在该窗口中。
如果数据窗口对应的数据表中定义了主键或者惟一性索引,则数据窗口创建时缺省的就是允许修改,并且正确设置了所有的修改属性。
否则就需要手工进行设置。
前面介绍过,当增加、删除或者重新选择了字段时,PowerBuilder将数据窗口的修改属性置为不允许,这时也应该进行手工设置。
首先应该选中Allow Updates选项,只有选中该选项,才允许继续进行其他属性的设定。
在Allow Updates右面的下拉列表框叫做Table to Update,只能在该下拉列表框中选择一个,并且必须选择一个数据表名,选中的表就是要被更新的表。
选中了Allow Updates属性后,接下来就要指定在数据窗口中哪些列被更新。
在Updateable Columns列表框中用鼠标单击被更新的字段。
当数据窗口中的字段来自不止一个数据表时,这时一定要选择同一个表中的字段,因为一个数据窗口一次只能更新一个数据表。
PB数据窗口教程
Powerbuilder创建数据窗口规范与注意事项导言:数据窗口是powerbuilder中一个最重要的控件,且是powerbuilder独有的一个控件,他存在于用户与数据库之间,能够方便的帮助用户进行sql语句对数据库进行操作,使开发人员能够节约大量时间与精力,然而相对数据窗口的强大,powerbuilder软件本身就显得略有不足,相对其他开发软件而言会有更多的bug。
下面就数据窗口的创建与标准布局做一些讲解。
1.新建数据窗口时常见的处理流程a)新建数据窗口1)选择表和要编辑、要显示的字段。
2)设置检索参数3)设置where条件b)显示处理(不分先后)1)去掉无需编辑、无需显示的,但要存储、处理数据的字段2)调整Header、Detail区域字体大小3)设置显示格式format掩码1.直接掩码写死2.根据条件设置掩码c)输入控制1)设置字段是否可以编辑1.去掉无需编辑、需要显示的字段的焦点2.根据条件设置字段是否可以编辑2)设置字段的编辑风格1.edit标签页下style typea)editb)editmaskc)radiobuttonsd)checkboxe)dropdowndwf)dropdownlistbox3)设置字段掩码(如果无显示掩码,则以编辑掩码显示)1.数值(“0.00”、“###0.00”)2.日期(“yyyy-mm-dd”、“yyyy-mm-dd hh:mm:ss”)d)设置数据窗口的更新属性一、创建powerbuilder数据窗口时的注意事项1.简化数据窗口输出列在powerbuilder中,数据传输的流量问题是值得注意的一个问题,每一个数据从数据库到数据窗口都是需要流量作为代价的。
因此,在创建数据库的时候,能够尽可能的少引入列是一个应当遵守的原则。
理论上,能够不读取的字段就不要将其加入数据窗口中,以减少网络传输。
2.列visible属性设为false后改回自动移动到最后的处理方法。
60个PB数据窗口技巧
60个PB数据窗口技巧数据窗口是一种用于展示数据的工具,它可以帮助用户更好地理解和分析数据。
下面是60个PB数据窗口技巧,帮助您更高效地使用数据窗口。
1.在数据窗口左下角的栏中输入关键词,可以快速筛选显示您所需的数据。
2.使用鼠标右键单击数据窗口的列头,可以自定义列的显示与隐藏。
3.在数据窗口的列头拖动可以更改列的顺序和宽度。
4.在数据窗口的列头双击,可以按该列进行排序。
5. 使用Ctrl键与鼠标左键选择多列,可以同时对这些列进行操作。
6.点击数据窗口的行头,可以选择整行。
7. 使用Shift键与鼠标左键选择多行,可以同时对这些行进行操作。
8.双击数据窗口的行头,可以自动调整该行的高度,使其适应内容。
9.在数据窗口的列头右键单击,可以进行更多的列操作,如冻结列、设置列格式等。
10. 使用Ctrl+Enter键,可以在当前单元格中插入换行符。
11. 使用Ctrl+D键,可以复制当前单元格的内容到下一个单元格。
12.在数据窗口的列头左键单击,可以选择一整列。
13. 使用Ctrl+Shift键与鼠标左键选择多个非连续的列。
14.在数据窗口的列头上方的空白区域右键单击,可以选择整个数据窗口。
15.在数据窗口左上角的复选框,可以选择或取消选择整个数据窗口。
16. 使用Ctrl+C键,可以复制选中的单元格或整行到剪贴板。
17. 使用Ctrl+V键,可以粘贴剪贴板中的内容到当前单元格或行。
18. 使用Shift+Enter键,可以在当前单元格下方插入一行。
19. 使用Ctrl+K键,可以在当前单元格中插入一个链接。
20. 使用Ctrl+Space键,可以选择整列。
21. 使用Shift+Space键,可以选择整行。
22.在数据窗口的列头右键单击,可以选择“筛选”,进行高级筛选操作。
23.在数据窗口的列头右键单击,可以选择“合并”,将相邻的相同内容的单元格合并为一个。
24.在数据窗口的列头右键单击,可以选择“拆分”,将合并的单元格拆分回原来的单元格。
PB动态创建数据窗口
PB动态创建数据窗口动态创建数据窗口在实际应用中,经常需要根据用户需求来动态创建数据窗,一般方法是这样的。
在一个window中加入一个数据窗控件,如dw_new,但是该数据窗没有dataobject,(空白的)就可以用以下语法来创建:dw_new.create(ls_syntax,ls_error)//创建语法,错误信息ls_syntax可以用以下三种方法来形成:一、动态由sql语法创建://连接到pb的example数据库stringls_sql,ls_syntax,ls_errorls_syntax=''selectfromdepartment''ls_syntax=sqlca.SyntaxFromSQL(ls_sql,''style(type=grid)'',ls_ error)iflen(ls_error)>0thenmessagebox(''Error'',''SyntaxFromSQLError:~r''+ls_error) elsedw_new.create(ls_syntax,ls_error)iflen(ls_error)>0thenMessageBox("Error","Createhavetheseerrors:~r"+ls_error) elsedw_new.settransobject(sqlca)dw_new.retrieve()endifendif二、由另一个数据窗的syntax来创建stringls_syntax,ls_errorls_syntax=dw_test.describe(''datawindow.syntax'')dw_new.create(ls_syntax,ls_error)ifls_error''''thenmessagebox(''CreateError'',ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()endif三、读取psr文件来创建stringls_syntax,ls_error,ls_retls_ret=char(13)+char(10)//回车键intli_fileNumlongli_lengthli_FileNum=FileOpen("efef.psr",Streammode!,read!,shared!,R eplace!)ifli_filenum>0thenFileSeek(li_FileNum,158,FromBeginning!)li_length=fileRead(li_filenum,ls_syntax)endiffileclose(li_filenum)ifli_length=0thenreturnls_syntax="release5;"+ls_ret+ls_syntax//截掉ls_syntax中的数据部分, 5.0以"sparse(names="dept_name?)"作为参考位置//6.0以html(作为参考位置longpos1,pos2pos1=pos(ls_syntax,''sparse(names="'',1)pos2=pos(ls_syntax,''"'',pos1+16)ls_syntax=left(ls_syntax,pos1)+mid(ls_syntax,pos1+1,pos2-pos1+1)dw_New.create(ls_syntax,ls_error)ifls_error''''thenmessagebox(''CreateError'',ls_error)elsedw_new.settransobject(sqlca)dw_new.retrieve()endif//pb6,pb7的代码可以参照pb5自己写,只是文件头和数据窗结束标记不同而已。
PB关于数据窗口的使用
实验五数据窗口的使用一、实验目的1、进一步加深对数据窗口的了解,熟悉数据窗口画板的使用和数据窗口对象属性的调整方法。
2、掌握数据窗口对象的标签和字段的属性的调整方法。
3、了解数据窗口对象的各种编辑样式的特点、编程和使用方法。
4、掌握数据窗口各种常用操作(插入、删除、更新等)的程序设计方法。
二、实验环境1.PowerBuilder9.0/10.0,Windows 98/2000,Microsoft SQLSERVER2000。
2.在实验之前先建立一个PBDW文件夹(例如:d:\ PBDW)用来存放本次实验所建立的设计文件与文档。
三、实验内容1、使用PowerBuilder创建Access或SQL Server2000数据库,数据库名称为pb_dw。
2、制作一个学科管理的数据窗口,如图1所示。
该窗口中有一个反映学科信息的数据窗口,有2个前后查看记录的按钮,以及对数据库进行更新、插入、删除和退出的4个图片按钮。
在“学科类型”或“学科名称”字段上单击鼠标,会弹出如图2所示的下拉列表框,提供数据的选择,避免了每次输入字符串,使用十分方便。
四、实验预习与准备1、创建一个新的工作空间。
2、创建一个新的目标、应用库和应用对象。
3、本例中需要创建2个数据窗口对象,一个为窗口上见到的学科信息数据窗口对象d_subjectinfo,另一个为学科名称下拉列表框中引用的学科名称数据窗口对象d_subtitle。
首先创建d_subtitle,步骤如下。
(1)单击“New”图标按钮,弹出“New”对话框。
(2)选择DataWindow选项页,双击"Tabular”图标,弹出“Choose Data Source for Tabular DataWindow”对话框。
(3)选择“Quick Select”数据源方式,单击“Next”按钮,弹出“Quick Select”对话框。
(4)在Table列表框中选择subtitle表,这时在其右边的Columns列表框中列出了subtitle 表的2个字段的名称,单击“Add All”按钮,就将这2个字段加到了下面的区域中。
PowerBuilder中数据窗口使用
PowerBuilder中数据窗口使用技巧PowerBuilder(以下简称PB)是一个非常优秀的数据库前端开发工具,其数据窗口(DataWindow)控件充分体现了PB与数据库系统的紧密结合,堪称前端工具的典范。
本文介绍了使用PB设计数据窗口的一些小窍门,希望能对使用PB的开发者有所帮助。
一、校验表达式(Validation Expression)的设置校验表达式是PB提供的一个优良特性。
但您是否觉得表达式的输入过于烦琐呢?一般而言,校验表达式的输入和修改要经历下面4步:1. 选取要编辑的列(Column);2. 按鼠标右键,选择"Properties",将弹出"Column Object"窗口;3. 在窗口中选择"Validation"标签,输入所需的校验表达式;4. 输入完毕后,按"OK"按钮。
这种输入方式有两个缺点:1. 过于烦琐,每输入一个表达式都要经过4步。
这一点在每列的校验表达式都基本相同时尤其明显。
2. 无法统一查看和对比各列的校验表达式,不利于查错。
其实PB提供了一个更加灵活的,专门用于输入校验表达式的工具。
在编辑数据窗口时,选择"rows"菜单的"Column Specifications"项,将会弹出"Column Specifications"窗口。
在窗口中,可以直接设置每一列的校验表达式二、"选择工具"的使用在数据窗口中,有时需要修改所有列的颜色或字体,一般的操作都是一个一个选取。
其实PB 提供了一个非常好的选择工具,用来选择数据窗口中的对象。
这个工具位于"Edit"菜单下的"Select"项中.选择工具一共有7个功能,其中前5个适合用热键直接操作选项功能三、多用户安全访问数据库的实现大多数情况下,您的应用程序将在网络环境下运行。
pb数据窗口设置操作
pb数据窗⼝设置操作1 使DataWindow列只能追加不能修改如何使DataWindow中的数据只能追加新记录⽽不能修改,利⽤ Column 的 Protect 属性可以很⽅便的做到这⼀点,⽅法如下:将每⼀列的 Protect 属性设置为:If( IsRowNew(), 0, 1) )在 PowerScript 中可以动态修改 Protect 属性:dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")这样,DataWindow 中只有新追加的记录可修改,⽽其他记录是只读的。
2 如何在DataWindow中实现列的⾃动折⾏我们在PowerBuilder应⽤程序的开发过程中, 使⽤DataWindow时, 经常会遇到某列的数据太长, 不能同时全部显⽰的情况. 若采⽤⾃动⽔平滚动, 操作起来⼜不够简便. 下⾯介绍⼀种⽅法, 实现列数据多⾏显⽰, 即实现列数据的⾃动折⾏.具体步骤如下:1) 在DataWindow Painter中打开此DataWindow.2) 在需设定⾃动折⾏的列上双击⿏标, 弹开此列的属性窗⼝.3) 选择Position标签, 选中Autosize Height 多选框.4) 选择Edit标签, 不选中Auto Horz Scroll多选框.5) 单击OK按钮, 保存所做的修改.6) 点中Detail Band (即写有Detail的灰⾊长带), 单击⿏标右键, 选择Properties... 菜单项.7) 选中Autosize Height多选框.8) 单击OK按钮, 保存所做的修改.9) 保存此DataWindow.注意:连在⼀起的汉字(中间没有标点或空格分隔), 系统将认为是⼀个单词, 不会⾃动进⾏折⾏.3 在数据窗⼝中实现动画要实现动画,必须要有定时器,在数据窗⼝中已经有了⼀个定时器,双击数据窗⼝将弹出的对话框,在Timer Interval中定义⼤于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。
PB数据窗口及事件
Pb数据窗口1、Pb数据窗口介绍(结合实例进行讲解):数据窗口控件对应到数据窗口对象显示数据。
数据窗口对象分为:常用的数据窗口类型:Composite 复合报表数据窗口Crosstab 交叉报表数据窗口Freeform 自由模式数据窗口Graph 图形报表数据窗口Grid 网格数据窗口Group 分组数据窗口n-up 多列显示数据窗口分别举例说明各个数据窗口:杏林妙手中的体检报告中保护上述数据窗口类型。
2、数据窗口数据源类型介绍:Quick select、sql select、query、external、stored procedure 分别为:通过单表查询,通过多表查询,通过查询对象,通过自定义的字段,通过存储过程。
3、数据窗口控件常用函数介绍:Setredraw(boolean):设置是否自动刷新报表,true 自动刷新,false不自动刷新。
Describe(string):获取数据窗口指定对象的属性,string为数据窗口表达式。
例如:“t_1.text”等。
Modify(string):设置数据窗口指定对象的属性,和describe配合使用,string为数据窗口表达式。
例如“t_1.text=‟123‟”描述查找相关设置的方法。
Getitemstring(int,string)、Getitemstring(int,int):获取数据窗口指定行的字符串列的值,参数:行号,列名(或列值)。
Setitem (int,string,string)、Setitemstring(int,int,string):设置数据窗口指定行的字符串列的值,参数:行号,列名(或列值),设置值。
(还有获取其他数据类型的类似函数不做赘述!,还可以通过object.列名[行号] 来获取和设置指定行列的值)Deleterow(int):删除行指定行的操作,和循环配合使用的注意事项。
Insertrow(0):插入行,参数0表示在最后一行插入Rowcount():当前数据窗口的行数。
pb 数据窗口 取合计栏数字的方法
pb数据窗口取合计栏数字的方法在使用PowerBuilder时,我们常常需要从数据窗口中获取合计栏数字。
然而,有时候我们会遇到问题,例如在取合计栏数字时遇到困难,或者不知道如何正确地执行这个操作。
本文将介绍一种简单的方法,以解决这个问题。
一、打开数据窗口并获取合计栏首先,我们需要打开一个数据窗口并获取它的合计栏。
通常,在数据窗口的“属性”窗口中,我们可以找到“合计栏”的选项。
选中我们需要获取的合计栏,并记住它的名称。
二、编写代码获取合计栏数字接下来,我们需要编写代码来获取合计栏数字。
通常,我们可以在数据窗口的事件处理器中添加相应的代码。
例如,我们可以使用数据窗口对象的`Fetch()`方法来获取数据,并在循环中处理每一行数据。
以下是一个简单的示例代码,展示了如何获取数据窗口中的合计栏数字:```powerbuilder//假设数据窗口名称为data_window//假设要获取的合计栏名称为total_column//获取第一行数据data_window.First();whilenotdata_window.eof//处理每一行数据...//这里我们只做一个简单的示例,并没有处理具体的数据内容//获取合计栏数字total=data_window.fields[total_column].AsInt();//将合计栏数字赋值给变量total//移动到下一行数据data_window.Next();endwhile;//释放资源并关闭数据窗口data_window.Close();```这段代码首先获取了第一行数据,并在循环中处理每一行数据。
在处理每一行数据时,我们使用`Fetch()`方法获取该行的字段值,并将该行的合计栏数字赋值给变量`total`。
最后,我们释放了资源并关闭了数据窗口。
三、注意事项在使用上述方法时,请注意以下几点:1.请确保数据窗口中的数据已经被正确加载到合计栏中。
如果没有正确加载数据,或者没有设置合计栏,那么上述代码可能无法正确获取合计栏数字。
PB数据窗口绝对技巧
PB数据窗口绝对技巧PB数据窗口绝对技巧1、如何让存储文件目录的列,显示图片?选择对应的column的display as picture属性为true。
2、如何复制grid类型的所选择的行的数据到系统剪切板?string ls_selectedls_selected=dw_1.Object.DataWindow.Selected.Dataclipbord(ls_selected)3:如何改变GRID数据窗口列位置(新手常见)先preview,然后在预览窗口拖动位置即可。
4、如何设置DW的底色?在DW的editsource中改变color的值。
5、如何将Grid风格改成自由格式?在DW的editsource中将processing=1的1改为0。
6、要新建一个表A但风格和现有表B风格一样,怎么将A表快速设置成表B风格?复制B表C,在C表的DW中的editsource中将表名和字段名改成A表的,即可。
7、如何实现gird风格的datawindow的多栏表头?添加text到header带区,并设置band属性为foreground保存,edit source修改tex t的x和width属性表达式如下:x="100~t integer(describe('firstcol.x')" width="100~tinteger(describe('lastcol.x')) - int eger(describe('firstcol.x')) +integer(describe('lastcol.width'))8、如何过滤dddw编辑风格的显示值为指定值的记录?dw_1.setfilter("lookupdisplay('column_name')='"+ls_display_ value_your+"'")dw_1.filter()9、如何设置datawindow的某一列为空?string ls_temp[]setnull(ls_temp)dw_1.object.columnname.primary.current=ls_temp10、如何设置datawindow的单双行不同颜色间隔?在detail带区的color属性表达式中写上if(mod (getrow(),2)=1 ,rgb(255,0,0),rgb(0,25 5,0)),如果是当前行以第三种颜色表示,表达式如下:if(getrow()=current(), rgb(255,0,0),if(m od(getrow(),2)=1 ,rgb(0,0,255),rgb(0,255,0)))11、如何获取指定名称的datawindowobject?DWObject ldwo_use,ldwo_abc ldwo_use = dw_1.Object ldwo_abc = ldwo_use._ _get_attribute("t_1",FALSE)//t_1为datawindow中text对象的名称12、如何缩放datawindow的打印大小?dw_1.object.datawindow.zoom=150 or dw_1.object.datawindow.zoom=7513、如何在已过滤后的数据基础上对datawindow进行过滤?dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your _join+your_new_filter) dw_1.filter()14、如何在datawindow中显示动态时间?建立一个计算域,表达式为string(datetime(today(),now()),'yyyy年mm月dd日hh点mm分ss秒'),同时设置datawindow的属性dw_1.Object.DataWindow.Timer_Interval=50 015、如何让带用title bar的datawindow控件的标题栏呈活动窗口的颜色?外部函数定义:funcation logn SetActiveWindow(long hwnd ) Library "user32.dll"datawindow控件的clicked事件代码:setactivewindow(handle(this))16、如何设置datawindow的当前行指示图标?在datawindow中建立一个计算列,expression为'',并将该计算列移动为datawindow 的第一个列,在datawindow控件的rowfocuschanged事件中写入代码:SetRowFocusIndicator(hand!)或setrowfucsindicator(p_1)//p_1为窗口上的picture控件名17、如何通过代码打开dddw?定义外部函数引用声明:SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInf o) LIBRARY "user32.dll"代码如下:constant integer VK_F4 = 115dw_1.SetFocus()dw_1.SetColumn( "dept_head_id" ) // 设置当前dddwkeybd_event( VK_F4,0,0,0 ) // 按下F4键keybd_event( VK_F4,0,2,0 ) // 释放F4键18、如何打印datawindow的内容到文件中?dw_1.object.datawindow.print.fileName ="c:\emp.prn"dw_1.print()19、如何设置dddw的初始值?dw_1.object.columnname.Initial="your_initial_value"20、如何只显示不同的数据?dw_1.filter("isnull(columnname[-1]) and columnname<>columnname[-1]")dw_1.filter()21、如何让带有title bar的datawindow不可以移动?在datawindow的自定义事件ue_nchittest(pbm_nchittest)中写入如下代码:return 122、如何在N-UP显示风格中建立基于第N栏中的列的计算列?如column有两列,number和price ,并显示为两栏,则第一栏的cost计算列的expr ession为number*price,第二栏的cost_1计算列的expression为number[1]*price[1] 23、如何清空ddlb或edit.codetable中项目?dw_1.Object.columnname.Values=""24、如何实现指定的column的字体旋转90度?dw_1.object.columnname.font.Escapement ="900"25、如何获取datawindow的sql代码?可以通过以下四种方法获取sql代码:string szselectszselect=dw_1.describe("datawindow.table.select")szselect=dw_1.describe("datawindow.table.sqlselect")szselect=dw_1.describe("datawindow.table.select.attribute") szselect=dw_1.getsqlselect()26、如何获取datawindow对象占有的虚拟存储的容量?使用datawindow.storage属性举例:在datawindow控件的retrieverow事件中,写入如下代码:long lstoragelstorage=long(dw_1.object.datawindow.storage)if lstorage>50000 then dbcancel()27、如何连续在同一张纸打印两个数据窗口?dw_1.object.datawindow.print.filename="temp.prn"dw_2.object.datawindow.print.filename="temp.prn"dw_1.print()dw_2.print()28、如何设置datawindow分组后每个分组中的记录号?建立一个计算列,expression为getrow() - first(getrow() for group 1)+129、如何实现在datawindow中只有新增的行,才可以编辑?在所有的column的protect属性表达式中写入以下表达式:if(isrownew(),'0','1')30、除了循环以外,有没有更好的方法统计数据窗口中处于选中状态的行数?一般习惯于使用循环来统计数据窗口中处于选中状态的行数,有没有更好的方法?其实此问题在应用上用处不大,讨论一下,活跃一下思维还是有好处的。
PB的数据窗口操作
ls1= dwo.Primary[row]★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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
★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 NoNewModified! No \ Yes NewDataModified! NewModified! Yes \ YesNotModified! 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_idw_1.SetColumn("name") //使name列成为当前列For li_i = 1 To dw_1.RowCount()dw_1.SetRow(li_i) //使第I行成为当前行dw_1.SetText("屁") //向当前编辑框中写入内容Nextdw_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进行过滤。