Foxtable(狐表)用户栏目专家坐堂 → 如何快速生成大型目录树?


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

主题:如何快速生成大型目录树?

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


加好友 发短信
等级:五尾狐 帖子:1093 积分:6682 威望:0 精华:0 注册:2013/7/1 9:05:00
如何快速生成大型目录树?  发帖心情 Post By:2020/3/6 20:53:00 [只看该作者]

如果目录树有节点数量非常多,那么可能需较长的时间才能生成, 此时可以考虑动态生成子节点以节省时间。

基本的思路并不复杂:

首先只生成顶层节点,运行过程中每当用户选择某个节点,就判断此节点是否存在子节点,如果不存在,就生成此节点的子节点。


示例一


假定根据客户表的地区、城市、公司名称三列生成目录树:


1、首先在窗口中插入一个目录树,将窗口的AfterLoad事件代码设置为:

Dim vals As List(Of String) = DataTables("客户").GetValues("地区")
Dim
tre As WinForm.TreeView = e.Form.Controls("TreeView1")
For
Each val As String In vals
   
Dim nd As WinForm.TreeNode =  tre.Nodes.Add(val) '增加地区节点
   
nd.Nodes.Add("") '增加一空子节点,否则节点左边不会显示+号
Next


这样打开窗口之后,只生成顶层的地区节点。


2、将目录树的AfterSelectNode事件代码设置为:


If e.Node.Level = 0 Then '如果是顶级节点,也就是地区节点
    If e.Node.Nodes.Count = 1 AndAlso e.Node.Nodes(0).Text = ""  Then  '如果存在一个空子节点
        e.Node.Nodes.Clear() '清除之前的空子节点
        Dim flt As String = "地区 = '" & e.Node.Text & "'"
        For Each val As String In DataTables("客户").GetValues("城市",flt)
            Dim nd As WinForm.TreeNode = e.Node.Nodes.Add(val) '增加城市节点
            nd.Nodes.Add("") '增加一个空子节点,否则节点左边不会有+号
        Next
    End
If

ElseIf
e.Node.Level = 1 Then '如果是二级节点,也就是城市节点
    If e.Node.Nodes.Count = 1 AndAlso e.Node.Nodes(0).Text = ""  Then  '如果存在一个空子节点
        e.Node.Nodes.Clear() '清除之前的空子节点
        Dim flt As String = "城市 = '" & e.Node.Text & "' And 地区 = '" & e.Node.ParentNode.Text & "'"
        For Each dr As DataRow In DataTables("客户").Select(flt)
            e.Node.Nodes.Add(dr("客户ID"), dr("公司名称"))  '节点名称用"客户ID", 节点标题用"客户名称"
        Next
    End
If

End
If


示例二


以上示例客户表已经加载所有数据,如果客户表只加载了部分数据,甚至没有加载数据,那么如何生成完整的目录树呢。

一样的简单,代码基本一样,核心在于利用SQLGetValues从后台提取数据:


1、AfterLoad事件代码改为:


Dim vals As List(Of String) = DataTables("客户").SQLGetValues("地区")
Dim
tre As WinForm.TreeView = e.Form.Controls("TreeView1")
For
Each val As String In vals
   
Dim nd As WinForm.TreeNode =  tre.Nodes.Add(val) '增加地区几点
   
nd.Nodes.Add("") '增加一空子节点,否则节点左边不会显示+号
Next

2、目录树的AfterSelectNode事件代码改为:


If e.Node.Level = 0 Then '如果是顶级节点,也就是地区节点
    If e.Node.Nodes.Count = 1 AndAlso e.Node.Nodes(0).Text = ""  Then  '如果存在一个空子节点
        e.Node.Nodes.Clear() '清除之前的子节点
        Dim flt As String = "地区 = '" & e.Node.Text & "'"
        For Each val As String  In  DataTables("客户").SQLGetValues("城市",flt)
            Dim nd As WinForm.TreeNode =  e.Node.Nodes.Add(val) '增加城市节点
            nd.Nodes.Add("") '增加一个空节点,否则节点左边不会有+号
        Next
    End
If

ElseIf
e.Node.Level = 1 Then '如果是二级节点,也就是城市节点
    If e.Node.Nodes.Count = 1 AndAlso e.Node.Nodes(0).Text = ""  Then  '如果存在一个空子节点
        e.Node.Nodes.Clear() '清除之前的子节点
        Dim flt As String = "城市 = '" & e.Node.Text & "' And 地区 = '" & e.Node.ParentNode.Text & "'"
        For Each Vals As String() In DataTables("客户").SQLGetValues("客户ID|公司名称", flt)
            e.Node.Nodes.Add(Vals(0), Vals(1))  '节点名称用"客户ID", 节点标题用"客户名称"
        Next
    End
If

End
If


参考: SQLGetValues


下面的文件是示例文件,里头有两个例子,分别基于已加载数据(快速目录树)和未加载数据(SQL目录树)生成:

项目文件:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目83.table


数据文件:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:northwind.rar











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


加好友 发短信
等级:七尾狐 帖子:1698 积分:15894 威望:0 精华:0 注册:2017/6/1 23:12:00
  发帖心情 Post By:2020/3/6 21:02:00 [只看该作者]

 感谢分享精品

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


加好友 发短信
等级:幼狐 帖子:65 积分:668 威望:0 精华:0 注册:2019/12/30 8:19:00
  发帖心情 Post By:2020/3/6 21:07:00 [只看该作者]

ding


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


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2020/3/6 21:11:00 [只看该作者]

感谢分享精品

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


加好友 发短信
等级:婴狐 帖子:48 积分:678 威望:0 精华:0 注册:2020/1/30 16:18:00
  发帖心情 Post By:2020/3/6 21:17:00 [只看该作者]

好思路

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


加好友 发短信
等级:八尾狐 帖子:1911 积分:17020 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2020/3/6 21:25:00 [只看该作者]

学习

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


加好友 发短信
等级:八尾狐 帖子:1816 积分:19292 威望:0 精华:0 注册:2013/4/10 14:38:00
  发帖心情 Post By:2020/3/6 21:40:00 [只看该作者]

感谢分享精品

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


加好友 发短信
等级:小狐 帖子:300 积分:2832 威望:0 精华:0 注册:2017/9/14 8:21:00
  发帖心情 Post By:2020/3/6 22:19:00 [只看该作者]

思路决定出路
思想决定高度

 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40574 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2020/3/7 0:12:00 [只看该作者]

思路不错!

 回到顶部
帅哥哟,离线,有人找我吗?
裴保民
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1989 积分:12631 威望:0 精华:0 注册:2017/4/3 15:01:00
  发帖心情 Post By:2020/3/7 0:36:00 [只看该作者]

打不开
[此贴子已经被作者于2020/3/7 0:53:26编辑过]

 回到顶部
总数 14 1 2 下一页