Foxtable(狐表)用户栏目专家坐堂 → treeview来源数据是多值字段时,要怎么得到不重复的值


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

主题:treeview来源数据是多值字段时,要怎么得到不重复的值

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


加好友 发短信
等级:童狐 帖子:254 积分:2958 威望:0 精华:0 注册:2017/10/15 20:04:00
treeview来源数据是多值字段时,要怎么得到不重复的值  发帖心情 Post By:2020/8/31 23:26:00 [只看该作者]

设计了一个商标表 其中有一个字段是 [适用规格] 这个是多值字段 用, 分隔 现在 我做了一个记录表 然后做了一个 TREEVIEW,现在需要用 [适用规格]这个字段当做分类源数据 如果是单值 就好办 可多值  不知道怎么分隔

Dim cmd As new SQLCommand
cmd.ConnectionName=("PAICHAN")
cmd.CommandText="S ELECT DISTINCT [适用规格] from {TBL_商标表}"
Dim dt As DataTable =cmd.ExecuteReader
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv.BuildTree(dt,"适用规格")
trv.Nodes.Insert("加载所有数据",0)

图片点击可在新窗口打开查看此主题相关图片如下:1598887290(1).png
图片点击可在新窗口打开查看
结果TREEVIEW里 直接简单粗暴的显示了 多值数据 希望像以下这样显示

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


[此贴子已经被作者于2020/8/31 23:27:57编辑过]

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


加好友 发短信
等级:超级版主 帖子:107680 积分:547721 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/9/1 8:44:00 [只看该作者]

只能手工添加节点

Dim cmd As new SQLCommand
cmd.ConnectionName=("PAICHAN")
cmd.CommandText="S ELECT DISTINCT [适用规格] from {TBL_商标表}"
Dim dt As DataTable =cmd.ExecuteReader
Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1")
dim lst as new list(of string)
for each dr as datarow in dt.datarows
for each s as string in dr("适用规格").split(",")
if lst.contains(s) = false then lst.add(s)
next
next
lst.sort
trv.Nodes.add("加载所有数据")
for each s as string in lst
trv.Nodes.add(s,s)
next

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


加好友 发短信
等级:童狐 帖子:254 积分:2958 威望:0 精华:0 注册:2017/10/15 20:04:00
  发帖心情 Post By:2020/9/1 20:43:00 [只看该作者]

非常感谢 代码可以用 现在发现另一个问题 在NodeMouseClick事件里原来的代码 单值  正常是这样的
Dim Filter As String
If e.node.Text = "加载所有数据" Then
    Filter = ""
Else
    Dim dr As DataRow = e.Node.DataRow
    Select Case e.Node.Level
        Case 0
            Filter ="[适用规格] = '" & dr("适用规格") & "'"
    End Select
End If

With DataTables("TBL_商标表")
     .LoadFilter = Filter '设置加载条件 
    .LoadPage = 0 '加载第一页
    .Load()
End With

这是用于 单值字段的 现在多值字段 这里请问要如何修改呢?


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


加好友 发短信
等级:超级版主 帖子:107680 积分:547721 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/9/1 21:37:00 [只看该作者]

Dim Filter As String
If e.node.Text = "加载所有数据" Then
    Filter = ""
Else
    Select Case e.Node.Level
        Case 0
            Filter ="[适用规格] like '%" & e.Node.text & "%'"
    End Select
End If

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


加好友 发短信
等级:童狐 帖子:254 积分:2958 威望:0 精华:0 注册:2017/10/15 20:04:00
  发帖心情 Post By:2020/9/1 23:03:00 [只看该作者]

非常感谢

 回到顶部