快速掌握TREEVIEW控件

        理解層級概念,層級理論上可以有無限級,一般用到四,五級也夠用了。最上級的只能有一個,我們把它叫做,接下來是,再是,再是,接下來是曾孫”......,彙總如下:爺,父,子,孫,曾孫,這裏是5級關係,除了只能有一個外,其餘可以有無限個。記住這些,下面要用。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


           
第一小時:學習直接用代碼將數據填充到樹控件中。
           
爲什麼要先學習直接用代碼將數據填充到樹控件中?因爲這種方法是最簡單的,代碼也最容易理解,學習樹控件,先將這個學會,已經掌握了一半,所以先不要急着想怎麼將表中的數據填充到樹控件中,在第一小時裏,樹控件和表完全沒有關係。
           
目的:我們要在樹控件中建立如下的一個3層級關係
              
水果
                |
                |__
蘋果
                |  |__
紅富士
                |  |__
國光
                |
                |__
葡萄
                   |__
紅提子
                   |__
青提子
           
解釋:水果包含2種,一種是蘋果,一種是葡萄,蘋果又包含2種,一種是紅富士,一種是國光,葡萄也如此。
           
在這裏:是水果,是蘋果,葡萄,是紅富士,國光,紅提子,青提子。概括如下:
           
爺(只能有一個):水果
           
父(這裏有2個):父1:蘋果;父2:葡萄
           
子(這裏有4個):子1:紅富士(父1蘋果的子);子2:國光(父1蘋果的子);子3:紅提子(父2葡萄的子);子4:青提子(父2葡萄的子)
                  
            1
、新建一個窗體,在窗體上放置兩個控件,一個是Treeview,一個是Imagelist
            如何找到這兩個控件?
            Treeview
控件在工具箱的榔頭加扳手圖標(其他控件)中選“Microsoft Treeview Control,Version 6.0"
            Imagelist
控件在工具箱的榔頭加扳手圖標(其他控件)中選“Microsoft Imagelist Control,Version 6.0"
            Treeview
控件大家都明白幹什麼用的,Imagelist控件是幹什麼用呢?原來這個控件是放圖標用的,如果你想在樹控件中顯示圖標的,這個圖標都將儲存在ImageList控件中。

            2、設置這兩個控件的屬性
           
首先要講清楚控件的屬性設置有2一種是設置這個控件在ACCESS中的屬性,比如名稱等。一種是設置這個控件本身的屬性。要設置這個控件在ACCESS中的屬性,選中控件後按鼠標右鍵選屬性就可以了。跟我們平時設置文本框什麼的一樣。要設置這個控件本身的屬性,只要雙擊這個控件就可以了。
            1
)設置Treeview控件在ACCESS中的名稱屬性,將名稱設置爲“Treeview"
            2
)設置Imagelist控件在ACCESS中的名稱屬性,將名稱設置爲“Image"
            2)
設置Imagelist控件本身的屬性,雙擊控件後,在彈出來的設置框中選“Images",單擊“Insert
            Picture"
按鈕,在你電腦中選擇你需要的圖標。在“Key:”欄中填入“K<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1”。其他默認設置不用改。
            3
)設置Treeview控件本身的屬性,雙擊控件後,在彈出來的設置框中選“General”,在這個選項面版中有很多項設置,大多數是設置樹控件的顯示格式,你自己慢慢研究。這裏我們將第一項“Style"7在第五項“Imagelist"選項中將我們放置的Imagelist控件“Image"選上。這項設置就將圖標和樹控件聯繫了起來。

            3、寫代碼將數據填充到樹控件中
           
代碼寫在哪裏?我們希望窗體一打開,數據就自動填充在樹控件中,所以這個代碼就寫在窗體的加載事件中,代碼及解釋如下:
            Private Sub Form_Load()
            '* -----------------------------------------------------------------
            '*
用代碼將數據填充到樹控件中
            '* -----------------------------------------------------------------
              Dim Nodeindex As Node
            '*------------------------------------------------------------------
            '*
解釋:定義Node
            '*Node
是樹控件的對象
            '*
每個Node都有三個東西,圖標,文本,索引值
            '*
圖標和文本都是實際顯示出來的,索引值是隱含的
            '*------------------------------------------------------------------
                '
設置最頂級的”:
            '* ---------------------------
              
  Set Nodeindex = TreeView.Nodes.Add(, , "", "水果", "K1")
                Nodeindex.Sorted = True
            '*------------------------------------------------------------------
            '*
樹控件填充數據的方法是Nodes.Add
            '*括號內是Add方法的參數
            '*
在這裏是索引值,水果是將顯示的文本,“K1”是圖標的索引值
            '*
Sorted是指Node的排序,True就是指採用排序,默認是按拼音
            '*
第一,二個參數是空的
            '*
具體的參數設置以後你可以慢慢詳細研究
            '*------------------------------------------------------------------
             
               
                '
設置第二級
            '* ---------------------------
               Set Nodeindex = TreeView.Nodes.Add("
", tvwChild, "1", "蘋果",
            "K1")
               Nodeindex.Sorted = True
                
               Set Nodeindex = TreeView.Nodes.Add("
", tvwChild, "2", "葡萄",
            "K1")
               Nodeindex.Sorted = True
            '*------------------------------------------------------------------
            '*
第一個參數是指這一層對應上層
            '*tvwChild
參數是規定格式,指相對來說,這一層是爺的子層
            '*“
1”是索引值,因爲2個,而索引值是唯一的所以要編號,用1”2”分開
            '*“
蘋果”“葡萄是要顯示的文本,K1是顯示圖標的索引值
            '*
現在知道爲什麼在層設置時,第一,第二個參數是空的,因爲這是最頂層
            '*------------------------------------------------------------------
               
                '
設置第三級
            '* ---------------------------
               Set Nodeindex = TreeView.Nodes.Add("
1", tvwChild, "1", "紅富士",
            "K1")
               Nodeindex.Sorted = True
                
               Set Nodeindex = TreeView.Nodes.Add("
1", tvwChild, "2", "國光",
            "K1")
               Nodeindex.Sorted = True
               Set Nodeindex = TreeView.Nodes.Add("
2", tvwChild, "3", "紅提子",
            "K1")
               Nodeindex.Sorted = True
               Set Nodeindex = TreeView.Nodes.Add("
2", tvwChild, "4", "青提子",
            "K1")
               Nodeindex.Sorted = True
            '*------------------------------------------------------------------
            '*
第一個參數12”是指這一層對應上層的,但要注意對應的是1”還是2”
            '*tvwChild參數是規定格式,指相對來說,這一層是父的子層
            '*“
1”是索引值,因爲4個,而索引值是唯一的,所以要編號,用“1234”分開
            '*“
紅富士等是要顯示的文本,K1是顯示圖標的索引值
            '*------------------------------------------------------------------
            End Sub
           
就這麼多代碼,總共十幾行,就可以在樹控件中顯示數據了,很簡單吧。第一小時結束。
           
第二小時:學習怎樣將樹控件和數據庫中的數據綁起來
           
在第一小時裏,我們學習了怎樣直接用代碼填充樹控件,但在實際使用中,這種方法的應用性不大,只有將樹控件與數據庫中的數據結合起來,纔能有真正的應用。其實綁定數據庫的方法和直接用代碼填充是大同小異的,我們要做的只是將Add的參數裏,原來我們手工輸入的變換一下,讓程序知道去數據庫中找數據。

            目的:將數據庫中的數據與樹控件綁定
           
背景:我們想在樹控件中顯示銷售客戶的層級列表,這個銷售客戶的分層是這樣的,先按大區,再按省份,最後到客戶我們在數據庫中建立了三個表,字段如下:
           
大區表:大區ID,大區名稱
           
省份表:省份ID,省份名稱,所屬大區
           
客戶表:客戶ID,客戶名稱,所屬省份
           
這三個表互相建立了關係
            1
、新建一個窗體,在窗體上放置兩個控件,一個是Treeview,一個是Imagelist
            2
、設置這兩個控件的屬性在這裏和第一小時唯一的區別是我們在Imagelist控件的設置時,導入了兩個圖標,一個KEYK1,一個爲K2,原來樹控件的Node圖標是可以變化的,我們準備某個項沒有選中時的圖標是一個沒有打開的文件夾,選中時是一個打開的文件夾,以區別。
            3
、編寫代碼,如下:
            Private Sub Form_Load()
            '* -----------------------------------------------------------------
            '*
用數據庫表(查詢也一樣)中數據填充樹控件
            '* -----------------------------------------------------------------
                Dim Rec As New ADODB.Recordset
                Dim stRecQL As String
                Dim Item As Integer
                Dim i As Integer
                Dim nodindex As Node
            '* -----------------------------------------------------------------
            '*
定義各類
            '* -----------------------------------------------------------------

               
              
                '
設置最頂級的""
            '* ---------------------------
                Set nodindex = TreeView.Nodes.Add(, , "
", "銷售客戶", "K1", "K2")
                nodindex.Sorted = True
            '* -----------------------------------------------------------------
            '*
這裏的設置跟第一小時裏基本是一樣的
            '*
但最後多了一個"K2"的參數,"K1"代表的是未被選中時的圖標,"K2"代表是被選中後的圖標
            '*
仔細觀察一下,你會發現選中和沒選中的圖標是不一樣的,一個是一個文件夾,一個是一個打開的文件夾
            '* -----------------------------------------------------------------
               
                '
設置第二級""
            '* ---------------------------
                Rec.Open "
大區表", CurrentProject.Connection, adOpenKeyset,
            adLockOptimistic, adCmdTableDirect
                For i = 0 To Rec.RecordCount - 1
                    Set nodindex = TreeView.Nodes.Add("
", tvwChild, "" &
            Rec.Fields("
大區ID"), Rec.Fields("大區名稱"), "K1", "K2")
                    nodindex.Sorted = True
                    Rec.MoveNext
                Next
                Rec.Close
            '* -----------------------------------------------------------------
            '*
第一行意思是打開一個表去尋找數據(查詢也是可以的)
            '*
關鍵在與Add參數的變化
            '*
大家看第三個參數,在第一小時裏,這裏是"1",這裏用Rec.Fields("大區ID")來代替"1",意思是用表的編號來代替手工編號
            '*
第四個參數也是一樣,直接用表中的名稱字段來取代原來我們手工的命名
            '* -----------------------------------------------------------------

                '設置第三級""
            '* ---------------------------
               Rec.Open "
省份表", CurrentProject.Connection, adOpenKeyset,
            adLockOptimistic, adCmdTableDirect
                For i = 0 To Rec.RecordCount - 1
                    Set nodindex = TreeView.Nodes.Add("
" & Rec.Fields("所屬大區"),
            tvwChild, "
" & Rec.Fields("省份ID"), Rec.Fields("省份名稱"), "K1", "K2")
                    nodindex.Sorted = True
                    Rec.MoveNext
                Next
                Rec.Close
            '* -----------------------------------------------------------------
            '*
不用再解釋了吧
            '*
要注意的是,定義第一個參數的時候,不是用"" & Rec.Fields("大區ID"),而是用"" &
            Rec.Fields("
所屬大區")
            '*
這個意思是:用省份表中關聯大區表的字段,而不是直接用大區表的ID
            '* -----------------------------------------------------------------

                '設置第四級""
            '* ---------------------------
               
            Rec.Open "
客戶表", CurrentProject.Connection, adOpenKeyset,
            adLockOptimistic, adCmdTableDirect
                For i = 0 To Rec.RecordCount - 1
                    Set nodindex = TreeView.Nodes.Add("
" & Rec.Fields("所屬省份"),
            tvwChild, "
" & Rec.Fields("客戶ID"), Rec.Fields("客戶名稱"), "K1", "K2")
                    nodindex.Sorted = True
                    Rec.MoveNext
                Next
                Rec.Close
               
            '* -----------------------------------------------------------------
            '*
到此你應該完全明白了
            '* -----------------------------------------------------------------

            End Sub
           
第二小時結束

            第三小時:將樹控件與窗體結合
           
我們做樹控件,當然不可能單單爲了顯示層級數據,我們希望跟窗體結合,當我們單擊樹控件中的某個客戶時,窗體上能相應的轉到這個客戶的資料。
           
目的:將樹控件與窗體結合
            1
、我們還是沿用第二個小時裏的例子,但在建立窗體時,將窗體的數據來源設爲客戶表,並在窗體中放置好客戶表的字段。
            2
、寫入如下代碼:
            Private Sub Treeview_NodeClick(ByVal Node As Object)
            '* -----------------------------------------------------------------
            '*
樹控件的鼠標點擊事件爲NodeClick
            '* -----------------------------------------------------------------
            Dim str As String
            '* -----------------------------------------------------------------
            '*
定義一個篩選
            '* -----------------------------------------------------------------
            If Node.Text = "
銷售客戶" Or Node.Key Like "*" Or Node.Key Like "*"
            Then
            str = ""
            '* -----------------------------------------------------------------
            '*
在第一小時裏,我們說了Node有三個東西,圖標,文本,索引值
            '*
文本就是text,索引值就是Key
            '
這裏將就是說當我們點擊"",""""層的時候,不篩選窗體
            '*
這個條件也可寫成:If Node.key = "" Or Node.Key Like "*" Or Node.Key Like
            "
*" Then
            '* -----------------------------------------------------------------
            Else
            str = "[
客戶名稱]='" & Node.Text & "'"
            End If
            Me.Form.FilterOn = True
            Me.Form.Filter = str
            '*
按指定的條件進行窗體篩選
            End Sub
           
明白了吧,所謂結合窗體,實際不過是進行窗體篩選而已。第三小時結束(5分鐘也夠了,哈哈)

 

 

示例下載

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章