Windows Form下TreeView的树型结构问题

博客探讨如何在Windows Form应用中创建一个无限层级的TreeView,利用特定ID结构(2-2-2-...)来表示层次关系。通过递归函数tree()动态加载数据库中的数据。同时,作者提出了疑问,当使用parentID来构建树形结构时,如何找到每个树节点的主键,并在树中添加新节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己写的一个可以扩展5--10层的,每层可扩展99个结点的,层次清晰的树型结构

数据表:id(char),name(varchar)

id 结构为2-2-2-的结构,这样看起来层次清晰,不过缺点就是“ 新增结点的时候,父结点不知道怎么添加”

不过,作为一般的MIS系统,以及日常管理,应该足够了。

J:扩展的层次,要根据数据库的ID长度决定

node:树的一个结点

ds.tables("areas"):从数据库读取的一个数据表

 Sub tree(ByVal j As Int32, ByVal node As TreeNode)
        Dim i As Int32
        Dim pnode As TreeNode
        If j = 0 Then
            For i = 0 To ds.Tables("areas").Rows.Count - 1
                If Len(Trim(ds.Tables("areas").Rows(i)("a_id"))) = 2 Then
                    TreeView1.Nodes.Add(Trim(ds.Tables("areas").Rows(i)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(i)("a_name")))
                End If
            Next
            For Each pnode In TreeView1.Nodes
                tree(1, pnode)
            Next
        Else
            For i = 0 To ds.Tables("areas").Rows.Count - 1
                If Len(Trim(ds.Tables("areas").Rows(i)("a_id"))) = 2 * (j + 1) And Mid(node.Text, 1, 2 * j) = Mid(Trim(ds.Tables("areas").Rows(i)("a_id")), 1, 2 * j) Then
                    node.Nodes.Add(Trim(ds.Tables("areas").Rows(i)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(i)("a_name")))
                End If
            Next
            If j < 9 Then
                j = j + 1
            Else
                Exit Sub
            End If
            For Each pnode In node.Nodes

                tree(j, pnode)

            Next
        End If
       
    End Sub 

 

 

 

关于 表结构 id,    name   ,parentid 

这种方式,怎么添加一个结点呢?在树型结构中,怎么找到每个树结点的(primary key)呢?

这个我没搞明白,因为感觉挺麻烦的,有资料的可以发上来看看啊!

 

 

 

在此之前写的一个层次有限的树:

Sub initree()
        ds.Clear()
        TreeView1.Nodes.Clear()
        wserver.gettable(ds, "areas")
        Dim i, j, k, l As Int32
        Dim node0 As TreeNode = New TreeNode("中国")
        TreeView1.Nodes.Add(node0)
        For i = 0 To ds.Tables("areas").Rows.Count - 1
            '第一层结点
            If Len(Trim(ds.Tables("areas").Rows(i)("a_id"))) = 2 Then
                node0.Nodes.Add(Trim(ds.Tables("areas").Rows(i)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(i)("a_name")))
                '第二层结点
                Dim node1 As TreeNode
                For j = i To ds.Tables("areas").Rows.Count - 1
                    For Each node1 In node0.Nodes
                        If Len(Trim(ds.Tables("areas").Rows(j)("a_id"))) = 4 And Mid(node1.Text, 1, 2) = Mid(Trim(ds.Tables("areas").Rows(j)("a_id")), 1, 2) Then
                            node1.Nodes.Add(Trim(ds.Tables("areas").Rows(j)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(j)("a_name")))
                            '第三层结点
                            Dim node2 As TreeNode
                            For k = j To ds.Tables("areas").Rows.Count - 1
                                For Each node2 In node1.Nodes
                                    If Len(Trim(ds.Tables("areas").Rows(k)("a_id"))) = 6 And Mid(node2.Text, 1, 4) = Mid(Trim(ds.Tables("areas").Rows(k)("a_id")), 1, 4) Then
                                        node2.Nodes.Add(Trim(ds.Tables("areas").Rows(k)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(k)("a_name")))
                                        '添加第四层结点
                                        Dim node3 As TreeNode
                                        For l = k To ds.Tables("areas").Rows.Count - 1
                                            For Each node3 In node1.Nodes
                                                If Len(Trim(ds.Tables("areas").Rows(k)("a_id"))) = 8 And Mid(node3.Text, 1, 6) = Mid(Trim(ds.Tables("areas").Rows(k)("a_id")), 1, 6) Then
                                                    node3.Nodes.Add(Trim(ds.Tables("areas").Rows(k)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(k)("a_name")))
                                                End If
                                            Next
                                        Next
                                    End If
                                Next
                            Next
                        End If
                    Next
                Next
            End If
        Next
        TreeView1.ExpandAll()
        TreeView1.SelectedNode.Text = "中国"
    End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值