vbTreeView控件應(yīng)用實(shí)例_第1頁
vbTreeView控件應(yīng)用實(shí)例_第2頁
vbTreeView控件應(yīng)用實(shí)例_第3頁
vbTreeView控件應(yīng)用實(shí)例_第4頁
vbTreeView控件應(yīng)用實(shí)例_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、vb TreeView 控件應(yīng)用實(shí)例2009-11-14 20:52TreeView控件應(yīng)用實(shí)例:將 TreeView綁定到Biblio.mdb 數(shù)據(jù)庫應(yīng)用示例:DataTree.vbp本章的代碼示例是從應(yīng)用示例DataTree.vbp which is listed in the Samples directory中得到的。可將數(shù)據(jù)庫中的數(shù)據(jù)綁定到TreeView控件。下面的示例將 TreeView控件綁定到Biblio數(shù)據(jù)庫,該數(shù)據(jù)庫可以在Visual Basic CD中找到。該應(yīng)用實(shí)例將Publishers表作為樹節(jié)點(diǎn)的第一層。如果一個(gè)出版商對應(yīng)于一個(gè)或多個(gè)書名,則這些書名將作為該出版商

2、的子節(jié)點(diǎn)加入樹中。圖2.42 與數(shù)據(jù)綁定的TreeVew控件下面的代碼用到了如下對象:Data Access Object Library ( 3.5)名為"frmDataTree ”的 Form 對象名為"tvwDB'的 TreeView 控件名為"cmdLoad 的 CommandButton 控件將Biblio.mdb 數(shù)據(jù)庫綁定到 TreeView 控件在工程中添加對 數(shù)據(jù)訪問對象(DAO 3.0 )的引用。為Database 和Node對象創(chuàng)建模塊級的變量。在Form Load 事件中,用 OpenDatabase 語句將 Database 對象

3、變量設(shè)置為 Biblio 數(shù)據(jù) 庫。用Nodes集合的Add方法創(chuàng)建頂層的節(jié)點(diǎn)對象。在CommandButton的Click 事件中,創(chuàng)建兩個(gè) Recordset 變量,并將它們設(shè)置為 Publishers 和 Titles 表。用“Do Un til ”語句為表中的每個(gè)出版商創(chuàng)建一個(gè)Node對象。對每個(gè)出版商,在 Titles 記錄集中檢查匹配的 PublD字段;為每個(gè)匹配項(xiàng)添加一個(gè)子節(jié) 點(diǎn)。在工程中添加對數(shù)據(jù)訪問對象(DAO 3.5)的引用要將數(shù)據(jù)庫綁定到 TreeView 控件,必須先添加對當(dāng)前版本的數(shù)據(jù)訪問對象(DAO的引用。為Database 對象和Node對象創(chuàng)建模塊級的變量由于需

4、要在一個(gè)會(huì)話中多次訪問Biblio.mdb 數(shù)據(jù)庫,如果創(chuàng)建一個(gè)模塊級的Database對象,保持一個(gè)打開數(shù)據(jù)庫,將有助于提高效率。此后,不需要打開數(shù)據(jù)庫即可訪問它。在窗 體的聲明部分,鍵入如下內(nèi)容:Private mDbBiblio As Database如果希望該數(shù)據(jù)庫還可被其它模塊使用,可以用Public 語句,并重命名該變量,以表明它是全局的,例如 gDbBiblio 。在創(chuàng)建Node對象時(shí),在Set語句中(如下所示)使用 Node類型的變量。Dim TempNode As NodeSet TempNode = tvwDB.Nodes.Add()雖然可以在添加 Node對象時(shí)創(chuàng)建變量,

5、更有效的方式是聲明一個(gè)模塊級的Node對象變量,并用它創(chuàng)建所有的Node對象。在上述聲明部分再鍵入:Private mNode As Node用OpenDatabase語句將Database 對象變量設(shè)置為 Biblio 數(shù)據(jù)庫Form對象的Load事件中可以初始化 Database 變量。代碼如下:Set mDbBiblio = DBE ngi ne.Ope nDatabase("BIBLIO.MDB")在成功地初始化 Database對象變量后,就可以在該模塊的代碼中的任何位置自由地訪問它 了。Form Load 事件:用 Nodes集合的 Add方法創(chuàng)建頂層的 Nod

6、e對象至此,Database對象變量已經(jīng)被初始化為Biblio數(shù)據(jù)庫,現(xiàn)在可以創(chuàng)建樹中的第一個(gè)節(jié)點(diǎn),并將打開的數(shù)據(jù)庫的名稱賦予它。首先必須用Node集合的Add方法創(chuàng)建第一個(gè) Node對象。還要使用 Set語句將其賦給 mNode對象變量,如下所示:Set mNode = tvwDB.Nodes.Add()'創(chuàng)建第一個(gè)節(jié)點(diǎn)。mNode.Text = mDbBiblio.Name注意,在上面的代碼中,在創(chuàng)建Node的同時(shí)用Set語句將其賦給了 mNode對象變量。由 于mNode變量現(xiàn)在包含了新創(chuàng)建的 Node對象,可以對該 Node對象的屬性進(jìn)行賦值。在 上述情況下,Database的

7、名稱(即 Database 對象的Name屬性)已經(jīng)被賦給了新節(jié)點(diǎn)的 Text屬性。Comma ndButton Click 事件:創(chuàng)建兩個(gè) Recordset 變量,并將它們分別設(shè)置為Publishers和Titles 表本應(yīng)用實(shí)例假定存在名為"cmdLoad的按鈕,并且當(dāng)用戶單擊它時(shí),置入Biblio 數(shù)據(jù)庫中的兩個(gè)表到TreeView 控件中。為此,必須首先在該按鈕的Click事件中聲明兩個(gè) DAO對象變量。第一個(gè)變量 rsPublishers 用來包含Publishers 表。第二個(gè)變量 rsTitles 用 來包含Titles表。下面的代碼聲明了這兩個(gè)變量,并用OpenRe

8、cordSet方法將表賦給變量:Dim rsPublishers As RecordsetDim rsTitles As RecordsetSet rsPublishers = mDbBiblio. _Open Recordset("Publishers", dbOpe nDyn aset)Set rsTitles = mDbBiblio. _OpenRecordset("titles", dbOpenDynaset)用Do Un til語句為表中的每個(gè)出版商創(chuàng)建一個(gè)Node對象現(xiàn)在有兩個(gè)打開的記錄集,可以遍歷每個(gè)記錄集,創(chuàng)建Node對象,并為該對象的T

9、ext屬 性賦予合適的值。首先,必須遍歷Publishers 表,并為該表中的每個(gè)出版商創(chuàng)建一個(gè) Node 對象。下列簡化了的代碼可以用一句話概括為,“逐個(gè)處理每個(gè)記錄,直到記錄集的末尾:創(chuàng)建 Node變量,并將Title字段的值賦給其 Text屬性,移到下一記錄并重復(fù)”:Do Un til rsPublishers.EOFSet mNode = tvwDB.Nodes.Add(1, tvwChild)mNode.Text = rsPublishers!NamersPublishers.MoveNextLoop注意,在上面的Add方法中用了兩個(gè)參數(shù)。 第一個(gè)參數(shù)(1)是我們希望添加入節(jié)點(diǎn)的 N

10、ode 的Index屬性。也就是說,希望所有的出版商節(jié)點(diǎn)成為第一個(gè) (根)節(jié)點(diǎn)(在Form的Load 事件中創(chuàng)建的)的子節(jié)點(diǎn)。第二個(gè)參數(shù)使用了常數(shù)(tvwChild),該常數(shù)指定新的 Node將成為編號為“ 1”的Node的子節(jié)點(diǎn)。對每個(gè)出版商,在 Titles 記錄集中檢查匹配的 PubID字段;為每個(gè)匹配項(xiàng)添加一個(gè)子節(jié)占八、上面的代碼將Publishers表的內(nèi)容作為第一層填入TreeView 中。然而,我們還希望能夠進(jìn)入更深一層,為每個(gè)出版商節(jié)點(diǎn)增加子節(jié)點(diǎn)。每個(gè)子節(jié)點(diǎn)代表該出版商印刷的一本書。為了做到這一點(diǎn),如果有了對新創(chuàng)建的出版商節(jié)點(diǎn)(mNode)的引用,只要遍歷 Titles 記錄集

11、,并檢查每條記錄的PublD字段即可。如果該字段與Publishers記錄集中的PublD字段相匹配,則該書是由當(dāng)前的出版商出版的。但是,在能夠?yàn)閙Node添加節(jié)點(diǎn)之前,還必須先將 mNode的Index 屬性賦給一個(gè)變量 (intlndex),如下所示:intln dex = mNode .In dex然后就可以在Add方法中使用該變量了, Add方法需要用來加入子節(jié)點(diǎn)的Node對象的Index屬性:Set mNode = tvwDB.Nodes.Add(i ntln dex, tvwChild)如下簡化的代碼可被表述為"直到Recordset的結(jié)尾:創(chuàng)建子Node對象,并將Tit

12、le 字段的值賦給它的Text屬性;移動(dòng)到下一記錄并重復(fù)上述操作”:Do Un til rsTitles.EOFIf rsPublishers!PublD = rsTitles!PublD The nSet mNode = tvwDB.Nodes.Add(i ntln dex, tvwChild)mNode.Text = rsTitles!Title 'Text屬性。End IfLoop完成代碼上面的代碼顯示了用兩個(gè)相關(guān)的表填成一個(gè)表的基本策略。全部代碼如下:'必須設(shè)置對 DAO 3.5的引用。'在聲明部分,聲明模塊級的對象變量:Private mDbBiblio As

13、 DatabasePrivate mNode As NodePrivate Sub Form_Load()'在Form_Load事件中,設(shè)置對象變量,' 并創(chuàng)建TreeView 控件的第一個(gè) Node對象。Set mDbBiblio = DBE ngi ne.Workspaces(O). _Ope nDatabase("BIBLIO.MDB")tvwDB.Sorted = TrueSet mNode = tvwDB.Nodes.Add()mNode.Text = "Publishers"mNode.Tag = mDbBiblio.Name

14、 ' 設(shè)置 Tag 屬性。mNode .Im age = "closed"'設(shè)置 Image屬性End SubPrivate Sub cmdLoad_Click()'聲明DAO對象變量,'并將記錄集賦予它們。Dim rsPublishers As RecordsetDim rsTitles As RecordsetSet rsPublishers = mDbBiblio. _Open Recordset("Publishers", dbOpe nDyn aset)Set rsTitles = mDbBiblio. _Ope

15、nRecordset("titles", dbOpenDynaset)'移到第一條記錄。rsPublishers.MoveFirst用于索引的變量。Dim intln dex As In teger'直到最后一條記錄(EOF):添加一個(gè)Node對象,'并用Name字段作為新'Node 對象的文本。Do Un til rsPublishers.EOFSet mNode = tvwDB.Nodes.Add(1, tvwChild)mNode.Text = rsPublishers!Name mNode.Tag = "Publisher&

16、quot; 'Tag標(biāo)識該表。' 為Key賦予唯一的ID mNode.Key = CInt(rsPublishers!PublD) & " ID"' 將變量intlndex設(shè)置為新創(chuàng)建Node的Index 屬性。' 用該變量將子Node對象加入當(dāng)前Node。in tI ndex = mNode .In dex'對這條記錄,在 Title 表中查找與 Titles 記錄集' 中出現(xiàn)相同PubID的記錄。如果找到這樣的記錄,' 則在TreeView控件中加入Node對象,并將用所' 找到記錄的Title 、

17、ISBN和Author 字段為新 'Node對象的屬性賦值。Do Until rsTitles.EOFIf rsPublishers!PublD = rsTitles!PublD The nSet mNode = tvwDB.Nodes. _Add(i ntln dex, tvwChild)mNode.Text = rsTitles!Title '文本。mNode.Key = rsTitles!ISBN '唯一的 ID。mNode.Tag = "Authors"'表名。mNode.Image = "leaf"'圖象

18、。End IfrsTitles.MoveNext 'Titles中的下一條記錄。Loop將rsTitles重新設(shè)置為Titles的第一條記錄。rsTitles.MoveFirst移動(dòng)到下一條Publisher 記錄。rsPublishers.MoveNextLoopEnd Sub增加代碼使用SQL語句創(chuàng)建較小的“ Titles ”記錄集,可以對這個(gè)示例加以改進(jìn)。下面的代碼創(chuàng)建 只包含相同PublD值的記錄的記錄集:Set rsTitles = mDbBiblio.Ope nRecordset _("select * from Titles Where PublD = &quo

19、t; & _rsPublishers!PubID)然后該代碼就只需對較小的記錄集進(jìn)行循環(huán),因而效率比較高。修改后的代碼如下:Private Sub cmdLoad_Click()Dim rsPublishers As RecordsetDim rsTitles As RecordsetSet rsPublishers = mDbBiblio. _Open Recordset("Publishers", dbOpe nDyn aset)Dim in tl ndexDo Un til rsPublishers.EOFSet mNode = tvwDB.Nodes.Add(1, tvwChild)mNode.Text = rsPublishers!NamemNode.Tag = "Publisher"'標(biāo)識表。mNode.Key = rsPublishers!PubID & "

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論