会员登录 - 用户注册 - 网站地图 Office中国(office-cn.net),专业Office论坛
当前位置:主页 > 技巧 > Access技巧 > 窗体控件 > 正文

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

时间:2005-02-09 10:39 来源:Access专家门诊200问 作者:tmtony『… 阅读:

问题详述

在对产品或客户进行分类时,类别需要多层分类结构,也就是常见的树形结构,但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)

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价: