如何實現(xiàn)帶樹形結(jié)構(gòu)的組合框和列表框
問題詳述
在對產(chǎn)品或客戶進(jìn)行分類時,類別需要多層分類結(jié)構(gòu),也就是常見的樹形結(jié)構(gòu),但access的組合框和列表框都不支持樹形結(jié)構(gòu),只能通過Treeview這個ActiveX控件來實現(xiàn),不知有沒有方法能夠在組合框和列表框中實現(xiàn)樹形結(jié)構(gòu)呢?
專家解答
組合框和列表框的行來源屬性可為表或查詢,由于組合框和列表框本身的限制,無法直接實現(xiàn)樹形結(jié)構(gòu),所以只能在行來源屬性上想辦法。創(chuàng)建一個查詢,然后通過函數(shù)來將數(shù)據(jù)的內(nèi)容轉(zhuǎn)換成樹形結(jié)構(gòu)的格式,由于組合框和列表框的數(shù)據(jù)來源于查詢,所以就間接地實現(xiàn)了帶樹形結(jié)構(gòu)的組合框和列表框。
首先創(chuàng)建一個通用函數(shù),用來實現(xiàn)樹形結(jié)構(gòu)的查詢結(jié)果,詳細(xì)代碼如下。
Public Function GetNodeText(rlngDepth As Long, rlngNextId As Long, rstrClassName As String) As String
Dim sqlClass As String
Dim strTemp As String
Dim tmpDepth As Integer
Dim i As Integer
Dim arrShowLine(20) As Boolean
For i = 0 To UBound(arrShowLine)
arrShowLine(i) = False
Next
tmpDepth = rlngDepth
If rlngNextId > 0 Then
arrShowLine(tmpDepth) = True
Else
arrShowLine(tmpDepth) = False
End If
strTemp = ""
If tmpDepth = 2 Then
End If
If tmpDepth > 0 Then
For i = 1 To tmpDepth
strTemp = strTemp & " "
If i = tmpDepth Then
If rlngNextId > 0 Then
strTemp = strTemp & "├ "
Else
strTemp = strTemp & "└ "
End If
Else
If i = 1 Then
strTemp = strTemp & "│"
Else
strTemp = strTemp & " "
End If
End If
Next
End If
GetNodeText = strTemp & rstrClassName
End Function
然后創(chuàng)建一個查詢,查詢中使用了上面這個自定義函數(shù)進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,查詢的語法如下。
SELECT GetNodeText([depth],[NextId],[classname]) AS NodeText, *
FROM SoftClass
ORDER BY SoftClass.RootID, SoftClass.OrderID;
最后創(chuàng)建一個新的窗體,在窗體上放置一個組合框及列表框,它們的行來源都設(shè)置如下。
SELECT qryClass.NodeText, qryClass.ClassID FROM qryClass;
打開窗體到“窗體視圖”狀態(tài),可看到帶樹形結(jié)構(gòu)的組合框和列表框的效果,如圖4-30所示。
圖4-30 帶樹形結(jié)構(gòu)的組合框和列表框
專家點評
這個例子從查詢上實現(xiàn)了樹形結(jié)構(gòu),但在組合框和列表框的實現(xiàn)上還并不完全具備Treeview的所有屬性,如雙擊結(jié)點進(jìn)行展開和收縮、結(jié)點圖標(biāo)等。如果要實現(xiàn)展開和收縮功能,需要對組合框和列表框再進(jìn)行編程,判斷當(dāng)前選擇的項目是子結(jié)點還是父結(jié)點,然后相應(yīng)改變組合框和列表框行來源對應(yīng)的查詢的內(nèi)容,再刷新組合框和列表框來實現(xiàn)結(jié)點的展開和收縮功能。(責(zé)任編輯:admin)
- ·Access窗體居中顯示技巧
- ·Access中Tab鍵的使用說明【技巧】
- ·Access粘貼對象到Tab選卡上的技巧
- ·Access在窗體上顯示當(dāng)前記錄和總記錄數(shù)
- ·Access隱藏組合框的小箭頭
- ·Access窗體屬性表
- ·【技巧】Access選項組邊框變?yōu)閳A角邊框
- ·Access函數(shù)me.sfmsub.form 提示子窗體
- ·Access中使用縮放對話框顯示文本框文字
- ·access技巧-中文顯示星期幾的簡單方法
- ·Access控件是否可見,可編輯,鎖定的技巧
- ·根據(jù)查找窗體設(shè)定的條件篩選主窗體的數(shù)
- ·父子窗體的語法介紹
- ·access實現(xiàn)組合框聯(lián)動詳細(xì)教程
- ·Web Service在Access中的應(yīng)用技巧
- ·Access窗體最大化,最小化等操作