如何实现带树形结构的组合框和列表框
问题详述
在对产品或客户进行分类时,类别需要多层分类结构,也就是常见的树形结构,但access的组合框和列表框都不支持树形结构,只能通过Treeview这个ActiveX控件来实现,不知有没有方法能够在组合框和列表框中实现树形结构呢?
专家解答
组合框和列表框的行来源属性可为表或查询,由于组合框和列表框本身的限制,无法直接实现树形结构,所以只能在行来源属性上想办法。创建一个查询,然后通过函数来将数据的内容转换成树形结构的格式,由于组合框和列表框的数据来源于查询,所以就间接地实现了带树形结构的组合框和列表框。
首先创建一个通用函数,用来实现树形结构的查询结果,详细代码如下。
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
然后创建一个查询,查询中使用了上面这个自定义函数进行数据格式转换,查询的语法如下。
SELECT GetNodeText([depth],[NextId],[classname]) AS NodeText, *
FROM SoftClass
ORDER BY SoftClass.RootID, SoftClass.OrderID;
最后创建一个新的窗体,在窗体上放置一个组合框及列表框,它们的行来源都设置如下。
SELECT qryClass.NodeText, qryClass.ClassID FROM qryClass;
打开窗体到“窗体视图”状态,可看到带树形结构的组合框和列表框的效果,如图4-30所示。
图4-30 带树形结构的组合框和列表框
专家点评
这个例子从查询上实现了树形结构,但在组合框和列表框的实现上还并不完全具备Treeview的所有属性,如双击结点进行展开和收缩、结点图标等。如果要实现展开和收缩功能,需要对组合框和列表框再进行编程,判断当前选择的项目是子结点还是父结点,然后相应改变组合框和列表框行来源对应的查询的内容,再刷新组合框和列表框来实现结点的展开和收缩功能。(责任编辑:admin)
- ·Access窗体居中显示技巧
- ·Access中Tab键的使用说明【技巧】
- ·Access粘贴对象到Tab选卡上的技巧
- ·Access在窗体上显示当前记录和总记录数
- ·Access隐藏组合框的小箭头
- ·Access窗体属性表
- ·【技巧】Access选项组边框变为圆角边框
- ·Access函数me.sfmsub.form 提示子窗体
- ·Access中使用缩放对话框显示文本框文字
- ·access技巧-中文显示星期几的简单方法
- ·Access控件是否可见,可编辑,锁定的技巧
- ·根据查找窗体设定的条件筛选主窗体的数
- ·父子窗体的语法介绍
- ·access实现组合框联动详细教程
- ·Web Service在Access中的应用技巧
- ·Access窗体最大化,最小化等操作