如何实现带树形结构的组合框和列表框

如何实现带树形结构的组合框和列表框,第1张

如何实现带树形结构的组合框和列表框,第2张

问题的阐述

在对产品或客户进行分类时,类目需要多层分类结构,这就是常见的树形结构。但是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的所有属性,比如双击节点可以展开和收缩,节点图标等。如果要展开和收缩,需要对组合框和列表框重新编程,判断当前选中的项目是子节点还是父节点,然后相应改变组合框和列表框的行来源对应的查询内容,再刷新组合框和列表框来展开和收缩节点。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 如何实现带树形结构的组合框和列表框

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情