日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

treeview调用数据库成树

發(fā)布時間:2023/12/10 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 treeview调用数据库成树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目的:將數(shù)據(jù)庫中的數(shù)據(jù)與樹控件綁定
背景:我們想在樹控件中顯示銷售客戶的層級列表,這個銷售客戶的分層是這樣的,先按“大區(qū)”,再按“省份”,最后到“客戶”我們在數(shù)據(jù)庫中建立了三個表,字段如下:
大區(qū)表:大區(qū)ID,大區(qū)名稱
省份表:省份ID,省份名稱,所屬大區(qū)
客戶表:客戶ID,客戶名稱,所屬省份
這三個表互相建立了關(guān)系

?

1、新建一個窗體,在窗體上放置兩個控件,一個是Treeview,一個是Imagelist
2、設(shè)置這兩個控件的屬性在這里和第一小時唯一的區(qū)別是我們在Imagelist控件的設(shè)置時,導(dǎo)入了兩個圖標(biāo),一個KEY為K1,一個為K2,原來樹控件的Node圖標(biāo)是可以變化的,我們準(zhǔn)備某個項沒有選中時的圖標(biāo)是一個沒有打開的文件夾,選中時是一個打開的文件夾,以區(qū)別。
3、編寫代碼,如下:

?

Private Sub Form_Load()
'* -----------------------------------------------------------------
'* 用數(shù)據(jù)庫表(查詢也一樣)中數(shù)據(jù)填充樹控件
'* -----------------------------------------------------------------
????Dim Rec As New ADODB.Recordset
????Dim stRecQL As String
????Dim Item As Integer
????Dim i As Integer
????Dim nodindex As Node
'* -----------------------------------------------------------------
'* 定義各類
'* -----------------------------------------------------------------?
???
????'設(shè)置最頂級的"爺"
'* ---------------------------
????Set nodindex = TreeView.Nodes.Add(, , "爺", "銷售客戶", "K1", "K2")
????nodindex.Sorted = True
'* -----------------------------------------------------------------
'*這里的設(shè)置跟第一小時里基本是一樣的
'*但最后多了一個"K2"的參數(shù),"K1"代表的是未被選中時的圖標(biāo),"K2"代表是被選中后的圖標(biāo)
'*仔細觀察一下,你會發(fā)現(xiàn)選中和沒選中的圖標(biāo)是不一樣的,一個是一個文件夾,一個是一個打開的文件夾
'* -----------------------------------------------------------------
????
????'設(shè)置第二級"父"
'* ---------------------------
????Rec.Open "大區(qū)表", CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
????For i = 0 To Rec.RecordCount - 1
????????Set nodindex = TreeView.Nodes.Add("爺", tvwChild, "父" & Rec.Fields("大區(qū)ID"), Rec.Fields("大區(qū)名稱"), "K1", "K2")
????????nodindex.Sorted = True
????????Rec.MoveNext
????Next
????Rec.Close
'* -----------------------------------------------------------------
'*第一行意思是打開一個表去尋找數(shù)據(jù)(查詢也是可以的)
'*關(guān)鍵在與Add參數(shù)的變化
'*大家看第三個參數(shù),在第一小時里,這里是"父1",這里用Rec.Fields("大區(qū)ID")來代替"1",意思是用表的編號來代替手工編號
'*第四個參數(shù)也是一樣,直接用表中的名稱字段來取代原來我們手工的命名
'* -----------------------------------------------------------------

?

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

?

????'設(shè)置第四級"孫"
'* ---------------------------
????
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
????
'* -----------------------------------------------------------------
'*到此你應(yīng)該完全明白了
'* -----------------------------------------------------------------

?

End Sub

?

第二小時結(jié)束

第三小時:將樹控件與窗體結(jié)合
我們做樹控件,當(dāng)然不可能單單為了顯示層級數(shù)據(jù),我們希望跟窗體結(jié)合,當(dāng)我們單擊樹控件中的某個客戶時,窗體上能相應(yīng)的轉(zhuǎn)到這個客戶的資料。

?

目的:將樹控件與窗體結(jié)合
1、我們還是沿用第二個小時里的例子,但在建立窗體時,將窗體的數(shù)據(jù)來源設(shè)為“客戶表”,并在窗體中放置好客戶表的字段。
2、寫入如下代碼:

?

Private Sub Treeview_NodeClick(ByVal Node As Object)
'* -----------------------------------------------------------------
'*樹控件的鼠標(biāo)點擊事件為NodeClick
'* -----------------------------------------------------------------
Dim str As String
'* -----------------------------------------------------------------
'*定義一個篩選
'* -----------------------------------------------------------------
If Node.Text = "銷售客戶" Or Node.Key Like "父*" Or Node.Key Like "子*" Then
str = ""
'* -----------------------------------------------------------------
'*在第一小時里,我們說了Node有三個東西,圖標(biāo),文本,索引值
'*文本就是text,索引值就是Key
'這里將就是說當(dāng)我們點擊"爺","父"或"子"層的時候,不篩選窗體
'*這個條件也可寫成: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

?

明白了吧,所謂結(jié)合窗體,實際不過是進行窗體篩選而已。第三小時結(jié)束(5分鐘也夠了,哈哈)

?

學(xué)習(xí)很有樂趣,但寫文章卻很無聊,如果你通過這篇文章學(xué)會了樹控件的基本使用,跟個貼吧,也好讓我有點成就感。

?

轉(zhuǎn)載于:https://www.cnblogs.com/ince/p/8983137.html

總結(jié)

以上是生活随笔為你收集整理的treeview调用数据库成树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。