数据库第16章 数据窗口控件.docx

上传人:b****2 文档编号:2132849 上传时间:2022-10-27 格式:DOCX 页数:16 大小:53.74KB
下载 相关 举报
数据库第16章 数据窗口控件.docx_第1页
第1页 / 共16页
数据库第16章 数据窗口控件.docx_第2页
第2页 / 共16页
数据库第16章 数据窗口控件.docx_第3页
第3页 / 共16页
数据库第16章 数据窗口控件.docx_第4页
第4页 / 共16页
数据库第16章 数据窗口控件.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据库第16章 数据窗口控件.docx

《数据库第16章 数据窗口控件.docx》由会员分享,可在线阅读,更多相关《数据库第16章 数据窗口控件.docx(16页珍藏版)》请在冰豆网上搜索。

数据库第16章 数据窗口控件.docx

数据库第16章数据窗口控件

第16章数据窗口控件

数据窗口控件是应用程序在窗口中展示数据窗口对象的唯一途径,数据窗口控件与数据窗口对象的结合构成了应用程序访问和操作数据库数据的主要手段。

两者的结合在提供强大功能的同时,不可避免地也带来了非常大的复杂性。

与其它PowerBuilder对象一样,数据窗口控件也有一组属性、事件和函数,不过它们的数量相当庞大,掌握起来有一定的难度。

数据窗口对象常用属性可以通过数据窗口控件的对象函数来访问,使用属性表达式,应用程序几乎可以操纵数据窗口的所有属性。

数据窗口控件与其它控件(比如单选钮、复选框、单行/多行编辑框、各种列表框等)一样,是附属于窗口的一个对象,它像座桥梁一样把窗口和数据窗口对象联系起来。

通过数据窗口控件,程序能够显示、修改、控制数据窗口对象,并且响应用户的操作。

数据窗口控件功能十分强大,具有众多的事件、属性和函数。

数据窗口的属性、事件和函数是灵活运用数据窗口的基础,我们在这一章的内容中主要学习数据窗口控件使用方法(事件、属性、函数)。

一、运用数据窗口的一般步骤

无论用PowerBuilder开发何种数据库应用程序,在应用程序中运用数据窗口的一般方法都是相似的,基本步骤为:

1.使用数据窗口画笔创建数据窗口对象;

2.在窗口上放置数据窗口控件;

 

3.通过属性设置或编码将数据窗口控件与数据窗口对象联系起来;dw_1.dataobject=”d_student”

4.设置数据窗口控件的属性,以控制它的外观和行为;

5.将数据窗口控件与事务对象联系起来(使用数据窗口控件的对象函数SetTransObject()或SetTrans());即将数据窗口和数据库连接起来。

6.从数据库中读数据:

使用数据窗口控件的对象函数Retrieve()把数据库中的数据装入数据窗口中;

7.编写某些数据窗口控件事件的事件处理程序,响应用户的操作;

9.保存数据:

需要时使用数据窗口控件的对象函数Update()保存用户对数据的修改。

16.1数据窗口中操纵数据

当使用数据窗口控件的Retrieve()函数从数据库中提取数据后,数据被存入了数据窗口的缓冲区中,程序对数据窗口中数据的操作均在缓冲区中完成。

用户在向数据窗口中输入数据时,他并没有直接把数据输入到数据窗口的缓冲区中,而是把数据输入到悬浮在数据窗口当前单元上面的编辑控件中,当用户移动了输入焦点或代码中使用AcceptText()函数操作之后,系统验证输入数据的有效性,通过有效性验证的数据才被放置到数据窗口控件的缓冲区中。

下面介绍数据窗口控件缓冲区和编辑控件的相关知识。

DATAWINDOW的四个缓站区

在PowerBuilder中,DataWindow是用户前端用来存储、操纵数据的对象。

在每一个DataWindow对象中有4个数据缓冲区,用来存储查询到的数据。

用户在DataWindow中对数据处理系统内部的操作实际上都是将数据在这几个缓冲区中进行的修改和移动,最后在用户提交数据库时,系统根据这四个缓冲区中的信息形成SQL的IN-SERT,UPDATE,DELETE等语句。

这四个缓冲区是:

PrimaryBuffer(主缓冲区)

这个缓冲区是存放填充窗口中DataWindow控件中数据的,调用DataWindow的Retrieve()函数和InsertRow()函数可以将数据填入这个缓冲区中。

当使用有关DataWindow删除和过滤函数时,相应记录将从这一缓冲区中删除。

而在执行DataWindow的Update()函数时,PowerBuilder将查看这一缓冲区中的记录,以形成SQLINSERT和UPDATE语句。

DeleteBuffer(删除缓冲区)

这个缓冲区保存的是从主缓冲区中删除的记录,执行Update()函数时,系统根据这一缓冲区的记录形成DELETE语句。

FilterBuffer(过滤缓冲区)

这个缓冲区存储的是不满足过滤条件的数据。

OriginalBuffer(原始缓冲区)

这一缓冲区存储的是DataWindow从数据库中读到的(执行retrieve()函数时得到的)全部记录。

当保存数据数据库时,根据主缓冲区生成的UPDATE语句和根据删除缓冲区生成的DELETE语句都要依据这一缓冲区来构造这些SQL语句中的Where子句。

原始缓冲区由PowerBuilder内部维护,Power-Builder所提供的任何函数都无法改变它的值。

 

二、编辑控件

使用数据窗口控件时,需要理解的最重要概念之一是编辑控件(EditControl)。

请注意,这里讲述的编辑控件不是放置在窗口上的编辑框。

当数据窗口中的列可以编辑时,系统自动创建一个编辑控件“漂浮”在得到输入焦点的可编辑项上,这个编辑控件没有边框,从外观上我们只能看到插入指针在闪动。

当用户按Tab键或通过单击改变输入焦点时,编辑控件随之移动到得到焦点的项上,同时编辑控件根据该项的设置及相应列的编辑风格调整自己的大小和显示。

因此,本质上用户是在编辑控件中键入、编辑、修改数据。

我们知道,编辑控件是个文本型控件,在它里面输入的所有数据都被当作字符串保存。

列的编辑风格控制着数据的显示和操作方式。

当用户按Tab键或通过单击改变输入焦点时,数据窗口接受编辑控件中的数据(当然数据要通过适当的有效性检查,后文将介绍检查步骤),并将其置入相应的数据项中(放到数据窗口的主缓冲区中)。

有时候,程序需要在编辑控件中的数据被放到主缓冲区之前获取用户在编辑控件中输入的值,此时,可以使用数据窗口控件的对象函数GetText()达到目的。

GetText()函数的语法为:

dwcontrol.GetText()

无论编辑控件当前所在行的数据类型是什么,GetText()函数都返回一个字符串。

应用程序负责适当的数据类型转换。

如果数据窗口中没有可编辑列,那么GetText()函数返回空串。

一般来说。

GetText()函数在数据窗口控件的ItemChanged和ItemError事件的事件处理程序中调用。

16.2设置数据窗口控件的属性

与粘贴到窗口上的其它控件类似,数据窗口控件也有一组属性,通过设置这组属性我们可以决定数据窗口控件的外观和行为,比如,数据窗口控件是否带有标题栏,是否带有水平和垂直滚动条,若带有标题栏,那么标题栏上是否带极小化、极大化和关闭按钮、是否带有控制菜单,以及运行时是否允许用户改变数据窗口的大小等。

数据窗口控件的属性可以在设计窗口时设置。

也可以在程序中设置。

下面我们学习怎样在程序中控制数据窗口的属性:

一、dataobject属性

该属性设置与数据窗口控件联系的数据窗口对象名字。

是一个字符型的变量。

我们可以在程序中通过控制该属性,动态地显示数据。

例如:

下列w_1上,有一数据窗口控件dw_1,有两个按纽cb_student,cb_subject,单击cb_student显示学生”d_student“数据,单击cb_subject显示课程”d_sbject”数据。

 

在cb_student的clicked事件中:

dw_1.dataobject=”d_student”

dw_1.settransobject(sqlca)

dw_1.retrieve()

在cb_subject的clicked事件中:

dw_1.dataobject=”d_subject”

dw_1.settransobject(sqlca)

dw_1.retrieve()

二、enabled属性

boolean类型,指示控件是否可以操作。

三、visible属性

boolean类型,指定该控件是否可见。

四、HscrollBar、VscrollBar属性

Boolean类型,指明垂直滚动条、水平滚动条是否可见。

五、x,y,Width,Height

指定数据窗口窗口的位置和大小。

 

六、HsplitScroll

Boolean类型

TRUE显示切分工具条

FALSE不显示切分工具条。

Dw_1.hsplitscroll=true

七、Object

DWObject

该属性用于在程序中操纵数据窗口对象,例如列对象、文本对象、按纽对象等。

Dw_1.object.

16.3数据的直接存取

通过数据窗口控件的Object属性,我们可以使用表达式存取数据窗口对象的数据,这种直接操作,实际上将存于数据窗口中的数据象数组一样进行引用。

就可以存取少量或大量的数据,不需要调用函数。

一、已知列名

1.访问主缓冲区的数据

dwcontrol.Object.columnname{[rownum]}

其中:

dwcontrol是数据窗口控件名称

Object是关键字

columnname是列名或计算列名称

rownum是行号

例1:

下面的语句将把dw_1的第一行、emp_name列的值设置为“马杰”:

dw_1.Object.emp_name[1]="马杰"

示例2.下面的语句把数据窗口emp_name列的所有数据放置到字符串数组ls_namearray[]中:

stringls_namearray[]

ls_namearray=dw_1.Object.emp_name.primary

2.访问其他缓冲区的数据(过滤缓冲区、删除缓冲区)

语法:

dwcontrol.Object.columnname{.buffer}{[rownum]}

其中:

buffer指定对哪个缓冲区操作,有效值为:

Primary:

缺省值,访问主缓冲区的数据

Delete:

访问删除缓冲区的数据

Filter:

访问过滤缓冲区的数据

例3.下面的语句得到过滤缓冲区emp_name列所有行的值:

stringls_namearray[]

ls_namearray=dw_1.Object.emp_name.Filter

例4.下面的语句得到删除缓冲区中emp_name列所有行的当前值:

stringls_namearray[]

ls_namearray=dw_1.Object.emp_name.Delete

例5.下面的语句得到删除缓冲区中emp_name列、第14行的当前值:

stringls_name

ls_name=dw_1.Object.emp_name.Delete[14]

例6.下面的语句得到过滤缓冲区中emp_name列、第14行的当前值:

stringls_name

ls_name=dw_1.Object.emp_name.filter[14]

二、不知列名

例9.访问主缓冲区的数据

dwcontrol.object.#列号[rowcount]

例8.下面表达式得到主缓冲区中第1行、第2列单元的当前数据值:

stringemp_name

emp_name=dw_1.Object.#2[1]

2.访问其他缓冲区的数据

dwcontrol.Object.#列号.buffer[rownum]

例10.下面表达式得到删除缓冲区中第1行、第2列单元的当前数据值:

stringemp_name

emp_name=dw_1.Object.#2.delete[1]

16.4数据窗口函数

数据窗口控件提供了丰富的对象函数,这些函数在增强数据窗口功能的同时,也方便了应用程序的开发,加快了开发进度。

数据窗口控件的对象函数多达150个,包括了操纵数据窗口的方法面面,我们只介绍其中使用频繁、不可或缺的函数。

一、插入行与删除行插入行

1.插入行

InsertRow()函数在数据窗口的主缓冲区中插入一个空行,其语法格式为:

Longdwcontr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1