Foxtable(狐表)用户栏目专家坐堂 → 递归生成目录树的效率问题


  共有13309人关注过本帖树形打印复制链接

主题:递归生成目录树的效率问题

帅哥哟,离线,有人找我吗?
有点甜
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/19 17:16:00 [显示全部帖子]

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")


tr.BuildTree("表A","生产单号|产品编码")

tr.Nodes.Add("生产单")
Dim btr As object = tr.baseControl
Dim nd As object = btr.Nodes("生产单")
For Each cnd As object In btr.Nodes
    If cnd.name <> nd.Name Then
        nd.Nodes.Add(cnd)
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/19 19:32:00 [显示全部帖子]

 代码

 

Dim dt As DataTable = DataTables("表a")
e.Sender.StopRedraw
Dim pnd As WinForm.TreeNode = e.Node
For Each arys As String() In dt.GetValues("生产单号|产品编码", "", "生产单号,产品编码")
    If pnd.Name <> arys(0) Then
        pnd = e.Node.Nodes.Add(arys(0))
    End If
    pnd.Nodes.Add(arys(1))
Next
e.Sender.ResumeRedraw


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/20 23:14:00 [显示全部帖子]

 类似代码

 

 

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim Nd = tr.Nodes.Add("生产单")

Dim dt As DataTable = DataTables("表a")

Dim nds As new List(Of WinForm.TreeNode)
For i As Integer = 0 To 3
    nds.Add(nd)
Next
For Each arys As String() In dt.GetValues("生产单号|产品编码|第七列", "", "生产单号,产品编码,第七列")
    Dim flag As Boolean = False
    For i As Integer = 0 To arys.Length - 1
        If nds(i+1).Name <> arys(i) OrElse flag Then
            flag = True
            nds(i+1) = nds(i).Nodes.Add(arys(i))
        End If
    Next
Next


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/27 16:45:00 [显示全部帖子]

'---在各表名下生成目录树节点
e.Sender.StopRedraw
Dim pnd As WinForm.TreeNode = e.Node
If e.Node.level = 1 Then  '如果是表名节点
    e.Node.Nodes.Clear  '清空原有节点
    Dim tbName As String = e.Node.Name
    Dim dr As DataRow = DataTables("表B").Find("表名 = '" & tbName & "'")
    If dr IsNot Nothing Then
        Dim Cols As String = dr("目录树列")
        Dim Cols_sort As String = Cols.replace("|",",")
            
        Dim nds As new List(Of WinForm.TreeNode)
        For i As Integer = 0 To Cols.Split("|").Length
            nds.Add(e.Node)
        Next
        For Each arys As String() In DataTables(tbName).GetValues(Cols, "", Cols_sort)
            Dim flag As Boolean = False
            For i As Integer = 0 To arys.Length - 1
                If nds(i+1).Name <> arys(i) OrElse flag Then
                    flag = True
                    nds(i+1) = nds(i).Nodes.Add(arys(i))
                End If
            Next
        Next
       
        e.Node.Expand
    End If
End If
e.Sender.ResumeRedraw

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/27 17:21:00 [显示全部帖子]

'---在各表名下生成目录树节点
e.Sender.StopRedraw
Dim pnd As WinForm.TreeNode = e.Node
If e.Node.level = 1 Then  '如果是表名节点
    e.Node.Nodes.Clear  '清空原有节点
    Dim tbName As String = e.Node.Name
    Dim dr As DataRow = DataTables("表B").Find("表名 = '" & tbName & "'")
    If dr IsNot Nothing Then
        Dim Cols As String = dr("目录树列")
        Dim Cols_sort As String = Cols.replace("|",",")
       
        Dim nds As new List(Of WinForm.TreeNode)
        For i As Integer = 0 To Cols.Split("|").Length
            nds.Add(e.Node)
        Next
        If nds.Count > 2 Then
            For Each arys As String() In DataTables(tbName).GetValues(Cols, "", Cols_sort)
                Dim flag As Boolean = False
                For i As Integer = 0 To arys.Length - 1
                    If nds(i+1).Name <> arys(i) OrElse flag Then
                        flag = True
                        nds(i+1) = nds(i).Nodes.Add(arys(i))
                    End If
                Next
            Next
        Else
            For Each arys As String In DataTables(tbName).GetValues(Cols, "", Cols_sort)
                nds(1) = nds(0).Nodes.Add(arys)
            Next
        End If
       
        e.Node.Expand
    End If
End If
e.Sender.ResumeRedraw

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/30 14:18:00 [显示全部帖子]

 buildTree就是单纯的递归,没什么异样。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/11/30 15:22:00 [显示全部帖子]

 测试了下,速度也不是很慢,跟buildtree应该是差不了多少的啊

 回到顶部