APP下载

TreeView在借书管理系统中的实现与应用

2013-12-29周小平

考试周刊 2013年36期

摘 要: 文章介绍了树形视图控件(也称为树状浏览控件)的常用事件、常用函数及使用的具体步骤,并以借书管理系统为例,详细地介绍了树形视图的具体实现与应用。通过灵活使用树形视图控件,在PB开发中,可以使应用程序的功能更加强大,更加直观地表示数据项。

关键词: PowerBuilder 树型视图控件 数据窗口

1.引言

PowerBuilder是一款优秀的企业级数据库前端应用开发工具,它提供简洁友好的用户界面、功能强大的数据窗口技术和性能优越的数据库访问能力,所以受到很多程序开发人员的喜爱,是当前流行的数据库前端开发工具之一。而在PowerBuilder的众多控件之中,树形视图控件能直观地表示数据项,所以在开发各种管理系统时,经常会用到这种控件,但是这种控件使用时比较复杂,故本文在介绍树形视图的常用事件、常用函数及使用方法之后,通过具体的实例进行讲解。

2.树形视图简介

如果你想显示具有层次关系的数据,那么树形视图控件是最适合的控件。它就像Windows系统中的资源管理器,通过资源管理器,可以在左边的列表中以层次结构列出驱动器、目录及子目录,而用户可以通过单击层次结构中的加号(+)、减号(-)展开或者折叠目录。要想管理大量数据,树形视图是最好的工具,因为用户只需要简单地单击鼠标左键就可以选择自己想要的数据,这种表示方法使用户一目了然。

在PowerBuilder中,树形视图(TreeView)和树形视图项(TreeViewItem)是树状浏览控件的两个对象。其中树型视图对象可以在窗口画笔中通过点击鼠标的方式创建,而树型视图项则必须通过编程来声明及定义它们的属性[1]。树状浏览控件的常规属性很多课本都有介绍,在此不再赘述。下面介绍它的常用事件和常用函数。

2.1常用事件

Constructor(构造事件):在控件创建时触发该事件,一般在构造事件里构造树视图项。

Click(单击事件):单击树视图项时,执行查询程序。

2.2常用函数[1]

Insert Item First ( ): 将加入项作为第一个子项;

Insert Item Last ( ): 将加入项作为最后一个子项;

Insert Item( ) :将加入项放在指定的子项后面;

InsertI tem Sort ( ) :按排序的顺序放置加入项。

3.树形视图的使用步骤

第一步,添加TreeView控件,设置该控件的常规属性。

第二步,编写事件处理程序为树浏览控件添加树视图项。在添加树视图项时,有两种方法:第一种方法是一次性地向树形视图控件添加全部层次的项目。第二种方法是先添加所需层次的项目,而其他项目在需要时再进行添加。

(注意:要正确地运行,就必须建立数据库,设置好数据源,而且能连接数据库。通常连接数据库的代码是放在应用程序里的。)

4.树形视图使用实例

下面以借书管理系统为例,先建立图书信息数据库,该库中包含图书信息表。图书信息表包含图书编号(bookid)、图书类型(typeid)、图书名称(title)、作者(author)等字段。该表中的每本书都对应到树中的一个节点。树形视图控件跟数据窗口控件一起使用更加能体现出数据的层次性,适用于大量数据的管理。故在此,我们新建一个应用程序book,并新建一个窗口w_tree、数据窗口dw_book和dw_tree。数据窗口dw_book的数据列为图书信息表中的所有列,数据窗口dw_tree的数据列为图书信息表中的图书编号和图书类型列。窗口w_tree中包含一个树状浏览控件和一个数据窗口控件。数据窗口控件用来显示图书的信息,其dataobject=“dw_book”。为树状浏览控件设置好常规属性后,就可以编写事件程序代码了。

在树形视图控件中,树形视图项是非常重要,也是很关键的,它是在程序中逐项加入的,可以用InsertItem()系列函数中的其中一种将树形视图项加入到树形视图中。在将树形视图项加入到树形视图时,本文分别使用了三种方法:第一种方法是采用直接插入的方法加入根节点;第二种方法是采用游标插入第二层;第三种方法是通过数据存储插入第三层。下面介绍事件处理程序代码:

首先,在窗口的OPEN()中添加以下代码:

dw_1.settransobject(sqlca)

dw_1.retrieve()

其次,在树控件tv_1的构造事件中添加如下代码:

TreeViewItem t_node // 定义树视图项目 对象

integer lev0,lev1,lev2,rc,i // lev0第一层,lev1第二层,rc行数,

string c_typeid,s_id,s_typeid

//数据存储

datastore ds

ds=create datastore

ds.dataobject="dw_tree"

ds.settransobject(sqlca)

ds.retrieve()

rc=ds.rowcount() //总行数

//插入第一层:根节点(直接插入)

t_node.label="图书编码"

lev0=tv_1.insertitemfirst(0,t_node)

//游标

declare c cursor for select distinct typeid from bookinfo; //声明游标

open c; //打开游标

fetch c into :c_typeid; //使用游标

do while sqlca.sqlcode=0

//插入第二层:类型 (通过游标插入)

t_node.label=c_typeid

lev1=tv_1.insertitemlast(lev0,t_node)

//插入第三层:编号 (通过数据存储插入)

for i=1 to rc

s_typeid=ds.getitemstring(i,"typeid") // 图书类型

s_id=ds.getitemstring(i,"bookid") // 图书编号

if s_typeid=c_typeid then

t_node.label=s_id

lev2=tv_1.insertitemlast(lev1,t_node)

end if

next

fetch c into :c_typeid; // 通过游标取下一个类型的值

loop

tv_1.expanditem(lev0) //展开第一层下的节点

close c; // 关闭游标

destroy ds; // 销毁数据存储ds, 释放空间

最后,在树状浏览控件的click事件中编写如下代码:

TreeViewItem t_node

string str

integer lev

this.getitem(handle,t_node) //得到树控件点击项

lev=t_node.level //获得点击项的层次

str=t_node.label //获得节点名称

choose case lev

case 1 // 点击项为第一层,显示所有的信息

dw_1.setfilter("typeid like '%'")

dw_1.filter()

case 2 // 点击项为第二层,显示该层下所有的信息

dw_1.setfilter("typeid='"+str+"'")

dw_1.filter()

dw_1.setsort("bookid A")

dw_1.sort()

case 3 // 点击项为第三层,显示该层下所有的信息

dw_1.setfilter("bookid=?耷?謖"+str+"?謖"?謖)

dw_1.filter()

end choose

5.结语

PowerBuilder是一款优秀的企业级数据库前端应用开发工具,是当前最流行的数据库前端开发工具之一。在PB中,树状浏览控件能够很好地体现出数据间的层次关系,灵活地使用树状浏览控件会使程序界面更加美观。本文在介绍了树状浏览控件的常用事件、常用函数及使用方法的基础上,以借书管理系统为例,详细地介绍了树形视图的具体实现与应用。

参考文献:

[1]周咏梅.PB中树形视图的实现与数据库表结构的设计.软件技术,2004.

[2]樊金生,张翠肖.PowerBuilder 10.5实用教程.科学出版社.