如何实现带树形结构的组合框和列表框
问题的阐述
在对产品或客户进行分类时,类目需要多层分类结构,这就是常见的树形结构。但是access的组合框和列表框都不支持树形结构,只能通过Treeview这种ActiveX控件来实现。不知道有什么方法可以在组合框和列表框中实现树形结构?
专家回答
组合框和列表框的行来源属性可以是表或查询。由于组合框和列表框的限制,树形结构无法直接实现,只能在行源属性上想办法。创建一个查询,然后通过函数将数据的内容转换成树形结构格式。因为组合框和列表框的数据来自查询,所以间接实现了树形结构的组合框和列表框。
首先,创建一个通用函数,实现树形结构的查询结果。详细代码如下。
公共函数GetNodeText(rlngDepth为Long,rlngNextId为Long,rstrClassName为String)为String
将sqlClass显示为字符串
Dim strTemp作为字符串
Dim tmpDepth为整数
将I标注为整数
Dim arrShowLine(20)为布尔值
对于i = 0至下界(arrShowLine)
arrShowLine(i) = False
然后
tmpDepth = rlngDepth
如果rlngNextId > 0,则
arrShowLine(tmpDepth) = True
其他
arrShowLine(tmpDepth) = False
如果…就会结束
strTemp = " "
如果tmpDepth = 2,则
如果…就会结束
如果tmpDepth > 0,则
对于i = 1至tmpDepth
strTemp = strTemp & " "
如果i = tmpDepth,则
如果rlngNextId > 0,则
strtemp = strtemp &“├”
其他
strtemp = strtemp &“└”
如果…就会结束
其他
如果i = 1,那么
strTemp = strTemp & "│"
其他
strTemp = strTemp & " "
如果…就会结束
如果…就会结束
然后
如果…就会结束
GetNodeText = strTemp & rstr class name
结束功能
然后创建一个查询,该查询使用上面的自定义函数进行数据格式转换。查询的语法如下。
选择GetNodeText([深度],[NextId],[类名])作为节点文本,*号
来自软式课堂
按软分类排序。RootID,SoftClass。OrderID
最后,创建一个新表单,在表单上放置一个组合框和一个列表框,并如下设置它们的行来源。
选择qryClass。NodeText,qryClass。qryClass中的ClassID
打开窗体到窗体视图,可以看到树形结构的组合框和列表框的效果。
专家评论
这个例子实现了来自查询的树形结构,但是在组合框和列表框的实现中没有Treeview的所有属性,比如双击节点可以展开和收缩,节点图标等。如果要展开和收缩,需要对组合框和列表框重新编程,判断当前选中的项目是子节点还是父节点,然后相应改变组合框和列表框的行来源对应的查询内容,再刷新组合框和列表框来展开和收缩节点。
0条评论