PB中TreeView控制項提示

來源:互聯網
上載者:User

PowerBuilder中的TreeView 控制項為樹狀遊覽,類似於WINDOWS的資源管理員,其特點是資訊項呈樹狀階層,能更清晰地表現主、細目關係 ,操作非常方便。在應用中可將其與DataWindow 配合使用, 一個提供資訊的分類體系,一個提供具體資訊,達到珠連碧合的奇妙效果。它特別適用於多級資訊的分類檢索, 是多級菜單所無法比似的,它的表現形式深受程式設計人員和廣大使用者的喜愛,在許多應用軟體中都能看到她的英姿。

  在PowerBuilder下,TreeView 控制項的應用較其它控制項要複雜得多,剛接觸它時往往有些不知所措。但如果將它的機理搞清楚,掌握它也不是很難的事。下面我結合長白公司圖書分類檢索的執行個體,把TreeView 控 件的使用方法和大家探討一下。

  一、應用TreeView 控制項的一般步驟

  1、 建立一個應用,並設好與資料庫的介面,這是操作資料庫的前提。

  2、 在應用中建一應用視窗W_1,在其上加入二個名為dw_3和dw_4的datawindow控制對象和一個名為TV_1的TreeView對象。

  3、 修改DW_3屬性

  General:把Datawindow object name填寫一個已存在的名為DW_date的datawindow(注意:它與datawindow控制對象是不同的),用於產生樹視圖項,將其Visible項設為不可見。

  4、 修改DW_4屬性

  General:把Datawindow object name填寫一個已存在的名為DW_TS的datawindow對象,用於顯示查詢出的具體內容。

  5、 編輯TV_1的屬性

  TreeView的樹視圖項不能直接編輯,必須在Script中編寫程式。

  Picture:在Picture Name中加入四個不同的表徵圖,用於代表樹視圖中的兩個層次(一、二級)、兩種狀態(未選、選中)。

  General:可根據具體應用設定是否選中,其中:

  Delete Items:運行中是否允許刪除表項。

  Disable PragDrog: 運行中是否允許拖放表項。

  Edit Labels: 運行中是否允許單擊表項來改變表項的標題。

  Show Buttons:是否在表項放顯示+-按鈕,有示相對的擴充和收縮。

  Hide Selection:當該控制項失去焦點時,選中項是否以高亮度顯示。

  Show Line:表項間是否加一豎線。

  Lines At Root:所有根層表項是否用豎線串連。

  Indentation:子表項相對於父表項的向右縮排度。

  6、 編寫TV_1的Script

  這裡是TreeView控制項的關鍵,也是痛點。

  二、TreeView 控制項的資訊構成及建立

  樹視圖項TreeViewItem是TreeView 控制項的基本資料單位,樹視圖項的產生一般有二種方法,一種是先產生根層視圖項,再在應用中動態產生下級視圖項,另一種是把全部樹視圖項一次和成。兩種方法各有優點,請根據具體情況選用,本例中採用後一種方法。

  1、 樹視圖項TreeViewItem的主要屬性

  Label:String 型,樹視圖項的顯示資訊。

  Data:Any型,樹視圖項的內部值。

  Level:Integer型,樹視圖項在樹視圖中層級。

  Children:Boolean 型,它決定該項是否有下一層(中書名)。

  PictureIndex:Integer 型,該項非選中時所用的表徵圖在表徵圖隊列中的編號。

  SelectedPictureIndex:Integer型,該項選中時所用的表徵圖在表徵圖隊列中的編號。

  2、 產生TreeViewItem項用到的函數

  InsertItemFirst():將加入項作為第一項

  InsertItemLast():將加入項作為最後一項

  InsertItem():將加入項插入到指定項的後面

  InsertItemSort():按順序放置。

  3、 TreeView的常用事件

  Constructor: 該事件在控制項建立時觸發,可在這裡構造TreeViewItem。

  Click:單擊TreeViewItem項時,執行查詢程式。

  Double Click: 雙擊TreeViewItem項時,執行查詢程式。

  ItemPopulate 事件: 該事件在某TreeViewItem項首次展開時觸發, 觸發的同時系統會將 該TreeViewItem項的控制代碼通過參數handle 傳遞過來。它主要用來產生對應項的下層資訊項。主要用於第一種方法。

  三、 事件代碼

  1、樹狀檢視控制項TV_1的constructor事件代碼 wanqi 1999.6.28

integer li_rowcount,li_row
string li_current_dn,li_last_dn,li_current_ei,li_last_ei
//聲明二個樹視圖的執行個體變數
treeviewitem itvi_level_one,itvi_level_two
//long ii_h_l_one
//long ii_h_l_two
dw_3.settransobject(sqlca)//dw_3
為隱含的資料視窗,存有產生樹的資料
li_rowcount=dw_3.retrieve()//行數
dw_3.setsort("lb,pm")
dw_3.sort()
//產生樹視圖的各級樹視圖項
for li_row=1 to li_rowcount
li_current_dn=dw_3.object.lb[li_row]
//DW_3對象中"LB類別"
li_current_ei=dw_3.object.pm[li_row]
//DW_3對象中"PM品名"
if isnull (li_current_ei) then
li_current_ei=""
end if

if li_current_dn< >li_last_dn then
//IF LB不與一級視圖項重複
//設定一級樹視圖項
itvi_level_one.label=dw_3.object.LB[li_row]
//視圖項的顯示資訊
itvi_level_one.level=1 //層級
itvi_level_one.data=li_current_dn
//視圖項的內部資訊
itvi_level_one.pictureindex=1
//沒選中時所用的表徵圖序號
itvi_level_one.selectedpictureindex=3
//選中時使用的表徵圖序號
itvi_level_one.children=(li_current_ei< >' ')
//樹視圖是否有下一級
ii_h_l_one=this.insertitemlast(0,itvi_level_one)
//將項加入到一級樹的最後一項
end if
//設定二級樹視圖項
if li_current_dn< >li_last_ei then
if li_current_ei<>' ' then
itvi_level_two.label=dw_3.object.pm[li_row]
itvi_level_two.level=2
itvi_level_two.data=li_current_dn
itvi_level_two.pictureindex=2
itvi_level_two.selectedpictureindex=4
itvi_level_two.data=li_current_ei
itvi_level_two.children=false
ii_h_l_two=this.insertitemlast
(ii_h_l_one,itvi_level_two)
//將項加入到二級樹的最後一項
end if
end if
li_last_dn=li_current_dn//設比較項
li_last_ei=li_current_ei
next

  2、tv_1控制項的clicked事件代碼

string s1
treeviewitem ii
this.getitem(handle,ii)
s1=string(ii.label)

choose case ii.level
case 1
//過濾類別
dw_4.setfilter("lb='"+s1+"'")
dw_4.filter()
case 2
dw_4.setfilter("pm='"+s1+"'")
dw_4.filter()
//過濾書名
end choose

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.