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


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

主题:关于treeview的难题

帅哥哟,离线,有人找我吗?
狐狸爸爸
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/6 9:43:00 [只看该作者]

你原来给的例子就都是独生子来的,既然有双胞胎或者更多胎的,代码肯定不一样。

先自己开动脑筋,尝试写一下吧。


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


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

For Each Val As String In Lst1
    If lst2.Contains(val) = False Then
        tnd = trv.Nodes.Add(val,val)
        Do
            dr = DataTables("表A").Find("第一列 = '" & tnd.Name & "'")
            If dr Is Nothing Then
                Exit Do
            Else
                For Each dr1 As DataRow In DataTables("表A").Select("[第一列] = '"& tnd.Name &"'")
                    tnd = tnd.Nodes.Add(dr1("第二列"),dr1("第二列"))
                Next
            End If
        Loop
    End If
Next

 

百思不得其解


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/6 12:05:00 [只看该作者]

你继续研究,搞不定的话,我晚上抽空帮你写一下

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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/6 15:31:00 [只看该作者]

呵呵,也怪不得你做不出来,我也感觉很难,因为要尽量避免用递归,否则就要用全局代码了。

还是一个按钮搞定:

 

Dim trv As WinForm.TreeView = e.Form.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("", "第一列, 第二列")
     tnd = dic(dr("第一列")).Nodes.Add(dr("第二列"), dr("第二列"))
     dic.Add(dr("第二列"),tnd)
Next

 

 

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

[此贴子已经被作者于2010-12-6 15:31:26编辑过]

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


加好友 发短信 F6
等级:狐精 帖子:3030 积分:19188 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2010/12/6 15:47:00 [只看该作者]

以下是引用狐狸爸爸在2010-12-6 15:31:00的发言:

呵呵,也怪不得你做不出来,我也感觉很难,因为要尽量避免用递归,否则就要用全局代码了。

还是一个按钮搞定:

 

Dim trv As WinForm.TreeView = e.Form.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("", "第一列, 第二列")
     tnd = dic(dr("第一列")).Nodes.Add(dr("第二列"), dr("第二列"))
     dic.Add(dr("第二列"),tnd)
Next

 

 

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

[此贴子已经被作者于2010-12-6 15:31:26编辑过]

收藏,谢谢!图片点击可在新窗口打开查看


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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/12/6 16:21:00 [只看该作者]

哎呀,头都疼死了,感情是真的很难呀。

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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
这种效果如何实现的?  发帖心情 Post By:2010/12/6 16:55:00 [只看该作者]

老大,遇到个问题:

 


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

Dim trv As WinForm.TreeView = e.Form.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)
dic.Clear      ‘难道这行代码无效?
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("","第一列,第二列")
     tnd = dic(dr("第一列")).Nodes.Add(dr("第二列"), dr("第二列"))
     dic.Add(dr("第二列"),tnd)
Next


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/6 16:58:00 [只看该作者]

我那个代码没有考虑重复的值,你现在第二列有两个aaa1当然出错的。

 


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


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/12/6 17:04:00 [只看该作者]

加上三行:

 

Dim trv As WinForm.TreeView = e.Form.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("", "第一列, 第二列")
     tnd = dic(dr("第一列")).Nodes.Add(dr("第二列"), dr("第二列"))
     If dic.ContainsKey(dr("第二列")) Then
        dic.Remove(dr("第二列"))
     End If
     dic.Add(dr("第二列"),tnd)
Next


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


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/12/6 17:09:00 [只看该作者]

谢谢老大,辛苦了,又学了一招

[此贴子已经被作者于2010-12-6 17:10:52编辑过]

 回到顶部
总数 48 上一页 1 2 3 4 5 下一页