Foxtable(狐表)用户栏目专家坐堂 → 关于treeview的难题


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

主题:关于treeview的难题

帅哥哟,离线,有人找我吗?
唐尸三摆手
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/12/7 16:48:00 [显示全部帖子]

输入的时候,必须按顺序输入,也就是父在子之前。

 

 

实际操作避免不了先输入子,再输入父的,比如做自行车的企业,好多零件是先有的,只是后面工序的颜色、装配和包装不一样而已,有没有更稳定的方案?

我用_Identify也不行


 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/12/8 17:49:00 [显示全部帖子]

其实我这个后台表大约有40万行数据,能不能只显示选定的某一个或某几个根节点的字符,然后展开

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/12/9 9:00:00 [显示全部帖子]

因为数据量太大。所以准备放弃这种一键生成的方案,转为下图:

 


图片点击可在新窗口打开查看此主题相关图片如下:screenshot2.jpg
图片点击可在新窗口打开查看

 

左侧为LISTBOX控件,右侧为treeview控件。先在左侧生成需要展示数据的列表,然后单击或双击触发事件,右侧的treeview控件显示以左侧选中数据为根节点的数据,希望这样能够减轻数据访问的压力。

 

老大不知道这种思路是否可行?


 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/12/9 9:09:00 [显示全部帖子]

那您能提示一下如何生成单一根节点的目录树吗,也就是给定一个根节点的字符,然后生成整个目录树

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/12/9 9:52:00 [显示全部帖子]

测试数据如下:

第一列  第二列

a          a1
a          bbb1
b          bbb1
b          d1
bbb1     dddddddd

 

代码如下:

 

Forms("窗口1").open()
Dim trv As WinForm.TreeView = Forms("窗口1").Controls("TreeView1")
Dim tnd As WinForm.TreeNode
trv.Nodes.Clear()
For Each dr As DataRow In DataTables("表A").DataRows   
    Dim lst As New List(of String)
    lst.Add(dr("第二列"))
    Do
        lst.Insert(0,dr("第一列"))
        dr = DataTables("表B").Find("第二列 = '" & dr("第一列") & "'")
        If dr is Nothing Then
            Exit Do
        End If
    Loop
    Dim Nodes As Object = trv.Nodes
    For Each val As String In lst
        If Nodes.Contains(val) = False Then
            nodes.Add(val,val)
        End If
        Nodes = nodes(val).nodes
    Next
Next

 

 测试结果:


图片点击可在新窗口打开查看此主题相关图片如下:screenshot2.jpg
图片点击可在新窗口打开查看

 

说明:b-bbb1未产生下级

 

 

 

再来测试这段代码:

Forms("窗口1").open()
Dim trv As WinForm.TreeView = Forms("窗口1").Controls("TreeView1")
Dim tnd As WinForm.TreeNode
trv.Nodes.Clear()
For Each dr As DataRow In DataTables("表A").DataRows
    Dim lst As New List(of String)
    lst.Add(dr("第二列"))
    Do
        lst.Insert(0,dr("第一列"))
        dr = DataTables("表A").Find("第二列 = '" & dr("第一列") & "'")
        If dr is Nothing Then
            Exit Do
        End If
    Loop
    Dim Nodes As Object = trv.Nodes
    For Each val As String In lst
        Dim nm As String = ""
        For Each nd As WinForm.TreeNode In Nodes
            If nd.Name = Val Then
                nm = val
                Exit For
            End If
        Next
        If nm = ""
            nodes.Add(val,val)
        End If
        Nodes = nodes(val).nodes
    Next
Next

 

结果和上面也是一样,未能生成b-bbb1的下级项

 

同样测试下面这段代码,结果也是同上:

Forms("窗口1").open()
Dim trv As WinForm.TreeView = Forms("窗口1").Controls("TreeView1")
Dim lst1 As List(of String) = DataTables("表A").GetUniqueValues("","第一列")
Dim lst2 As List(of String) = DataTables("表A").GetUniqueValues("","第二列")
Dim dic As New Dictionary(Of String, WinForm.TreeNode)
Dim tnd As WinForm.TreeNode
trv.Nodes.Clear()
For Each Val As String In Lst1
    If lst2.Contains(val) = False Then
        tnd = trv.Nodes.Add(val,val)
        dic.Add(val,tnd)
    End If
Next
For Each dr As DataRow In DataTables("表A").Select("", "_SortKey")
    If dic.ContainsKey(dr("第一列")) Then
         tnd = dic(dr("第一列")).Nodes.Add(dr("第二列"), dr("第二列"))
         If dic.ContainsKey(dr("第二列")) Then
            dic.Remove(dr("第二列"))
         End If
         dic.Add(dr("第二列"),tnd)
    End If
Next

[此贴子已经被作者于2010-12-9 10:00:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/12/9 10:23:00 [显示全部帖子]

好吧,我也感觉这是个钻牛角尖的方法,就只是让他显示一级好了

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/12/9 10:40:00 [显示全部帖子]

那么您认为表结构应该如何设置才好呢

 回到顶部
总数 18 上一页 1 2