Foxtable(狐表)用户栏目专家坐堂 → 目录树如何按条件显示数据?


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

主题:目录树如何按条件显示数据?

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
目录树如何按条件显示数据?  发帖心情 Post By:2023/7/28 14:57:00 [只看该作者]

1、然后新建一个窗口,窗口中插入一个目录树(TreeView),窗口的AfterLod事件代码设为:

Dim cmd As New SQ-LCommand
Dim
 dt As DataTable
cmd
.CommandText = "SELEC-T DISTINCT 产品,客户 From {订单}"
dt
 = cmd.ExecuteReader()
Dim
 trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv
.BuildTree(dt,"产品|客户")
trv
.Nodes.Insert("加载所有数据",0)


这样一旦打开窗口,该目录树列出所有的产品和客户。
由于订单表只是加载了部分数据,所以我们不能直接根据订单表来生成目录树,因为订单表的数据不完整,只能用ExecuteReader方法直接从后台提取完整的产品和客户数据。
注意Select语句中,一定要有DISTINCT关键词,这样返回的才是不重复的产品和客户名单,虽然对目录树的生成没有影响,但是会大大降低数据加载量,对于网络环境,这是非常重要的。

2、最后将目录树的NodeMouseDoubleClick事件设为:

Dim Filter As String
If
 e.node.Text = "加载所有数据" Then
    Filter = ""

Else

    Dim dr As DataRow = e.Node.DataRow '获取生成此节点的DataRow
    
Select Case e.Node.Level
        Case 0
            Filter ="[
产品] = '" & dr("产品") & "'"
        Case 1
            Filter ="[
产品] = '" & dr("产品") & "' And [客户] = '" & dr("客户") & "'"
    End Select

End
 If
DataTables
("订单").LoadFilter = Filter
DataTables
("订单").Load()

这样我们只需双击某个节点,既可动态加载对应的订单。

图片点击可在新窗口打开查看




目录树右边的数据,如何实现显示目录树的条件的数据,如上面代码,以产品和客户为目录,由于不涉及雇员、折扣列,让这两列的数据不显示?


如图



图片点击可在新窗口打开查看此主题相关图片如下:目录树显示.jpg
图片点击可在新窗口打开查看






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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/7/28 15:02:00 [只看该作者]


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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2023/7/28 17:01:00 [只看该作者]

Dim cmd As New SQ-LCommand
cmd.C
Dim dt As DataTable
cmd.CommandText = "SELEC-T DISTINCT 产品ID,客户ID From {订单}"
dt = cmd.ExecuteReader()
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt, "产品ID|客户ID")
trv.Nodes.Insert("加载所有数据", 0)


Tables("订单").Cols("折扣").Visible = False

问题一:执行上面代码,没报错,没效果,还是全部显示


问题二:如何实现多个目录树的显示

1. 目录树一,以”产品“列为目录,右边只显示“产品、单价、数量、日期”
2. 目录树二,以”客户、产品“列为目录,右边只显示“客户、产品、单价、数量、日期”
3.  目录树三,以”雇员“列为目录,右边只显示“雇员产品、单价、数量、日期”






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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/7/28 17:06:00 [只看该作者]

1、肯定可以,除非这个不是主表,是副本表

2、添加多个目录树,绑定不同列

Dim cmd As New SQ-LCommand
cmd.C
Dim dt As DataTable
cmd.CommandText = "SELEC-T DISTINCT 产品ID From {订单}"
dt = cmd.ExecuteReader()
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt, "产品ID")
trv.Nodes.Insert("加载所有数据", 0)

cmd.CommandText = "SELEC-T DISTINCT 产品ID,客户ID From {订单}"
dt = cmd.ExecuteReader()
trv = e.Form.Controls("TreeView2")
trv.BuildTree(dt, "产品ID|客户ID")
trv.Nodes.Insert("加载所有数据", 0)

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


加好友 发短信
等级:六尾狐 帖子:1360 积分:9034 威望:0 精华:0 注册:2020/11/4 22:15:00
  发帖心情 Post By:2023/7/28 17:18:00 [只看该作者]

2、添加多个目录树,绑定不同列

1. 目录树一,以”产品“列为目录,右边只显示“产品、单价、数量、日期”
2. 目录树二,以”客户、产品“列为目录,右边只显示“客户、产品、单价、数量、日期”
3.  目录树三,以”雇员“列为目录,右边只显示“雇员产品、单价、数量、日期”

目录树是4楼写法,问题是如何根据目录树不同,右边的表的数据显示也不同?
图片点击可在新窗口打开查看

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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/7/28 17:21:00 [只看该作者]

如果要多个目录树控制同一个表格的列显示,到目录树的点击事件里处理

 回到顶部