以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]展开某一层级的节点  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=169892)

--  作者:chnfo
--  发布时间:2021/7/5 20:48:00
--  [求助]展开某一层级的节点
有一个树,节点数上万个。希望只展开到第N(如3)层。如果用遍历,如果节点的level<3,则expand。但效率很低…,差不多4秒。有什么办法快点?
--  作者:有点蓝
--  发布时间:2021/7/5 21:27:00
--  
和level有什么关系?

Dim tr As WinForm.TreeView
tr = Forms("窗口1").Controls("TreeView1")
For Each td As WinForm.TreeNode In tr.Nodes
    td.Expand
    For Each td2 As WinForm.TreeNode In td.Nodes
        td2.Expand
    Next
Next

--  作者:chnfo
--  发布时间:2021/7/5 21:38:00
--  
如果指定展开第N层呢?不用level?
--  作者:有点蓝
--  发布时间:2021/7/5 22:18:00
--  
做个递归

Dim tr As WinForm.TreeView
tr = Forms("窗口1").Controls("TreeView1")
Dim n As Integer = 4
For Each td As WinForm.TreeNode In tr.Nodes
    td.Expand
    Functions.Execute("abc",td,n)
Next

递归函数abc
Dim td As WinForm.TreeNode =args(0)
Dim n As Integer = args(1) - 1
If n > 0 Then
    For Each td2 As WinForm.TreeNode In td.Nodes
        td2.Expand
        Functions.Execute("递归",td2,n)
    Next
End If

--  作者:客人
--  发布时间:2021/7/6 9:36:00
--  
感觉效率还是有点低。
目前实测节点数17000个。其中一级节点21个,二级节点305个,三级2930个,四级14197

用递归方法,第一级展开1秒以内(这个很好),第二级展开就要3秒了,第三级展开就要8秒了。如果层级再深或节点数再多,可能就等不起了

--  作者:有点蓝
--  发布时间:2021/7/6 9:38:00
--  
加上停止绘制:http://www.foxtable.com/webhelp/topics/2439.htm,不行没有其它办法了
--  作者:chnfo
--  发布时间:2021/7/6 9:38:00
--  
递归跟遍历几乎没有什么区别.假定要展开的层级为K

        For Each nod As WinForm.TreeNode In trv1.AllNodes
            If nod.Level < k Then
                nod.Expand
            End If
        Next

--  作者:有点蓝
--  发布时间:2021/7/6 9:40:00
--  
如果目录树层级有4级,要递归4级,当然没有区别。如果目录树层级有10级,要递归4级,和遍历所有节点的区别就大了,而且是很大
--  作者:chnfo
--  发布时间:2021/7/6 10:04:00
--  
如果是那样的话,可能就用其它的方法了

        dim lst as new list(of WinForm.TreeNode)    \'\'因为就算树节点有10万行,遍历的速度也很快
        For Each nd As WinForm.TreeNode In trv1.AllNodes
            If nd.Level < k Then
                lst.add(nd)
            End If
        Next

        For Each nd As WinForm.TreeNode In lst 
                nd.Expand 
        Next