摘 要: 文章介紹了樹形視圖控件(也稱為樹狀瀏覽控件)的常用事件、常用函數(shù)及使用的具體步驟,并以借書管理系統(tǒng)為例,詳細地介紹了樹形視圖的具體實現(xiàn)與應(yīng)用。通過靈活使用樹形視圖控件,在PB開發(fā)中,可以使應(yīng)用程序的功能更加強大,更加直觀地表示數(shù)據(jù)項。
關(guān)鍵詞: PowerBuilder 樹型視圖控件 數(shù)據(jù)窗口
1.引言
PowerBuilder是一款優(yōu)秀的企業(yè)級數(shù)據(jù)庫前端應(yīng)用開發(fā)工具,它提供簡潔友好的用戶界面、功能強大的數(shù)據(jù)窗口技術(shù)和性能優(yōu)越的數(shù)據(jù)庫訪問能力,所以受到很多程序開發(fā)人員的喜愛,是當前流行的數(shù)據(jù)庫前端開發(fā)工具之一。而在PowerBuilder的眾多控件之中,樹形視圖控件能直觀地表示數(shù)據(jù)項,所以在開發(fā)各種管理系統(tǒng)時,經(jīng)常會用到這種控件,但是這種控件使用時比較復(fù)雜,故本文在介紹樹形視圖的常用事件、常用函數(shù)及使用方法之后,通過具體的實例進行講解。
2.樹形視圖簡介
如果你想顯示具有層次關(guān)系的數(shù)據(jù),那么樹形視圖控件是最適合的控件。它就像Windows系統(tǒng)中的資源管理器,通過資源管理器,可以在左邊的列表中以層次結(jié)構(gòu)列出驅(qū)動器、目錄及子目錄,而用戶可以通過單擊層次結(jié)構(gòu)中的加號(+)、減號(-)展開或者折疊目錄。要想管理大量數(shù)據(jù),樹形視圖是最好的工具,因為用戶只需要簡單地單擊鼠標左鍵就可以選擇自己想要的數(shù)據(jù),這種表示方法使用戶一目了然。
在PowerBuilder中,樹形視圖(TreeView)和樹形視圖項(TreeViewItem)是樹狀瀏覽控件的兩個對象。其中樹型視圖對象可以在窗口畫筆中通過點擊鼠標的方式創(chuàng)建,而樹型視圖項則必須通過編程來聲明及定義它們的屬性[1]。樹狀瀏覽控件的常規(guī)屬性很多課本都有介紹,在此不再贅述。下面介紹它的常用事件和常用函數(shù)。
2.1常用事件
Constructor(構(gòu)造事件):在控件創(chuàng)建時觸發(fā)該事件,一般在構(gòu)造事件里構(gòu)造樹視圖項。
Click(單擊事件):單擊樹視圖項時,執(zhí)行查詢程序。
2.2常用函數(shù)[1]
Insert Item First ( ): 將加入項作為第一個子項;
Insert Item Last ( ): 將加入項作為最后一個子項;
Insert Item( ) :將加入項放在指定的子項后面;
InsertI tem Sort ( ) :按排序的順序放置加入項。
3.樹形視圖的使用步驟
第一步,添加TreeView控件,設(shè)置該控件的常規(guī)屬性。
第二步,編寫事件處理程序為樹瀏覽控件添加樹視圖項。在添加樹視圖項時,有兩種方法:第一種方法是一次性地向樹形視圖控件添加全部層次的項目。第二種方法是先添加所需層次的項目,而其他項目在需要時再進行添加。
(注意:要正確地運行,就必須建立數(shù)據(jù)庫,設(shè)置好數(shù)據(jù)源,而且能連接數(shù)據(jù)庫。通常連接數(shù)據(jù)庫的代碼是放在應(yīng)用程序里的。)
4.樹形視圖使用實例
下面以借書管理系統(tǒng)為例,先建立圖書信息數(shù)據(jù)庫,該庫中包含圖書信息表。圖書信息表包含圖書編號(bookid)、圖書類型(typeid)、圖書名稱(title)、作者(author)等字段。該表中的每本書都對應(yīng)到樹中的一個節(jié)點。樹形視圖控件跟數(shù)據(jù)窗口控件一起使用更加能體現(xiàn)出數(shù)據(jù)的層次性,適用于大量數(shù)據(jù)的管理。故在此,我們新建一個應(yīng)用程序book,并新建一個窗口w_tree、數(shù)據(jù)窗口dw_book和dw_tree。數(shù)據(jù)窗口dw_book的數(shù)據(jù)列為圖書信息表中的所有列,數(shù)據(jù)窗口dw_tree的數(shù)據(jù)列為圖書信息表中的圖書編號和圖書類型列。窗口w_tree中包含一個樹狀瀏覽控件和一個數(shù)據(jù)窗口控件。數(shù)據(jù)窗口控件用來顯示圖書的信息,其dataobject=“dw_book”。為樹狀瀏覽控件設(shè)置好常規(guī)屬性后,就可以編寫事件程序代碼了。
在樹形視圖控件中,樹形視圖項是非常重要,也是很關(guān)鍵的,它是在程序中逐項加入的,可以用InsertItem()系列函數(shù)中的其中一種將樹形視圖項加入到樹形視圖中。在將樹形視圖項加入到樹形視圖時,本文分別使用了三種方法:第一種方法是采用直接插入的方法加入根節(jié)點;第二種方法是采用游標插入第二層;第三種方法是通過數(shù)據(jù)存儲插入第三層。下面介紹事件處理程序代碼:
首先,在窗口的OPEN()中添加以下代碼:
dw_1.settransobject(sqlca)
dw_1.retrieve()
其次,在樹控件tv_1的構(gòu)造事件中添加如下代碼:
TreeViewItem t_node // 定義樹視圖項目 對象
integer lev0,lev1,lev2,rc,i // lev0第一層,lev1第二層,rc行數(shù),
string c_typeid,s_id,s_typeid
//數(shù)據(jù)存儲
datastore ds
ds=create datastore
ds.dataobject="dw_tree"
ds.settransobject(sqlca)
ds.retrieve()
rc=ds.rowcount() //總行數(shù)
//插入第一層:根節(jié)點(直接插入)
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)
//插入第三層:編號 (通過數(shù)據(jù)存儲插入)
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) //展開第一層下的節(jié)點
close c; // 關(guān)閉游標
destroy ds; // 銷毀數(shù)據(jù)存儲ds, 釋放空間
最后,在樹狀瀏覽控件的click事件中編寫如下代碼:
TreeViewItem t_node
string str
integer lev
this.getitem(handle,t_node) //得到樹控件點擊項
lev=t_node.level //獲得點擊項的層次
str=t_node.label //獲得節(jié)點名稱
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.結(jié)語
PowerBuilder是一款優(yōu)秀的企業(yè)級數(shù)據(jù)庫前端應(yīng)用開發(fā)工具,是當前最流行的數(shù)據(jù)庫前端開發(fā)工具之一。在PB中,樹狀瀏覽控件能夠很好地體現(xiàn)出數(shù)據(jù)間的層次關(guān)系,靈活地使用樹狀瀏覽控件會使程序界面更加美觀。本文在介紹了樹狀瀏覽控件的常用事件、常用函數(shù)及使用方法的基礎(chǔ)上,以借書管理系統(tǒng)為例,詳細地介紹了樹形視圖的具體實現(xiàn)與應(yīng)用。
參考文獻:
[1]周詠梅.PB中樹形視圖的實現(xiàn)與數(shù)據(jù)庫表結(jié)構(gòu)的設(shè)計.軟件技術(shù),2004.
[2]樊金生,張翠肖.PowerBuilder 10.5實用教程.科學(xué)出版社.