技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 1460
|
2#

樓主 |
發(fā)表于 2005-12-1 21:04:00
|
只看該作者
第二小時(shí)
第二小時(shí):學(xué)習(xí)怎樣將樹控件和數(shù)據(jù)庫(kù)中的數(shù)據(jù)綁起來(lái)
在第一小時(shí)里,我們學(xué)習(xí)了怎樣直接用代碼填充樹控件,但在實(shí)際使用中,這種方法的應(yīng)用性不大,只有將樹控件與數(shù)據(jù)庫(kù)中的數(shù)據(jù)結(jié)合起來(lái),才能有真正的應(yīng)用。其實(shí)綁定數(shù)據(jù)庫(kù)的方法和直接用代碼填充是大同小異的,我們要做的只是將Add的參數(shù)里,原來(lái)我們手工輸入的變換一下,讓程序知道去數(shù)據(jù)庫(kù)中找數(shù)據(jù)。
目的:將數(shù)據(jù)庫(kù)中的數(shù)據(jù)與樹控件綁定
背景:我們想在樹控件中顯示銷售客戶的層級(jí)列表,這個(gè)銷售客戶的分層是這樣的,先按“大區(qū)”,再按“省份”,最后到“客戶”我們?cè)跀?shù)據(jù)庫(kù)中建立了三個(gè)表,字段如下:
大區(qū)表:大區(qū)ID,大區(qū)名稱
省份表:省份ID,省份名稱,所屬大區(qū)
客戶表:客戶ID,客戶名稱,所屬省份
這三個(gè)表互相建立了關(guān)系
1、新建一個(gè)窗體,在窗體上放置兩個(gè)控件,一個(gè)是Treeview,一個(gè)是Imagelist
2、設(shè)置這兩個(gè)控件的屬性在這里和第一小時(shí)唯一的區(qū)別是我們?cè)贗magelist控件的設(shè)置時(shí),導(dǎo)入了兩個(gè)圖標(biāo),一個(gè)KEY為K1,一個(gè)為K2,原來(lái)樹控件的Node圖標(biāo)是可以變化的,我們準(zhǔn)備某個(gè)項(xiàng)沒(méi)有選中時(shí)的圖標(biāo)是一個(gè)沒(méi)有打開的文件夾,選中時(shí)是一個(gè)打開的文件夾,以區(qū)別。
3、編寫代碼,如下:
Private Sub Form_Load()
'* -----------------------------------------------------------------
'* 用數(shù)據(jù)庫(kù)表(查詢也一樣)中數(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è)置最頂級(jí)的"爺"
'* ---------------------------
Set nodindex = TreeView.Nodes.Add(, , "爺", "銷售客戶", "K1", "K2")
nodindex.Sorted = True
'* -----------------------------------------------------------------
'*這里的設(shè)置跟第一小時(shí)里基本是一樣的
'*但最后多了一個(gè)"K2"的參數(shù),"K1"代表的是未被選中時(shí)的圖標(biāo),"K2"代表是被選中后的圖標(biāo)
'*仔細(xì)觀察一下,你會(huì)發(fā)現(xiàn)選中和沒(méi)選中的圖標(biāo)是不一樣的,一個(gè)是一個(gè)文件夾,一個(gè)是一個(gè)打開的文件夾
'* -----------------------------------------------------------------
'設(shè)置第二級(jí)"父"
'* ---------------------------
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
'* -----------------------------------------------------------------
'*第一行意思是打開一個(gè)表去尋找數(shù)據(jù)(查詢也是可以的)
'*關(guān)鍵在與Add參數(shù)的變化
'*大家看第三個(gè)參數(shù),在第一小時(shí)里,這里是"父1",這里用Rec.Fields("大區(qū)ID")來(lái)代替"1",意思是用表的編號(hào)來(lái)代替手工編號(hào)
'*第四個(gè)參數(shù)也是一樣,直接用表中的名稱字段來(lái)取代原來(lái)我們手工的命名
'* -----------------------------------------------------------------
'設(shè)置第三級(jí)"子"
'* ---------------------------
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
'* -----------------------------------------------------------------
'*不用再解釋了吧
'*要注意的是,定義第一個(gè)參數(shù)的時(shí)候,不是用"父" & Rec.Fields("大區(qū)ID"),而是用"父" & Rec.Fields("所屬大區(qū)")
'*這個(gè)意思是:用省份表中關(guān)聯(lián)大區(qū)表的字段,而不是直接用大區(qū)表的ID
'* -----------------------------------------------------------------
'設(shè)置第四級(jí)"孫"
'* ---------------------------
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")
nodind |
|