Foxtable(狐表)用户栏目专家坐堂 → 奇怪,为什么不能成生treeview


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

主题:奇怪,为什么不能成生treeview

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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
奇怪,为什么不能成生treeview  发帖心情 Post By:2010/10/21 19:07:00 [只看该作者]

  Dim dt As datatable = DataTables("单位树")
Dim dt2 As list(of DataRow)
Dim tr As WinForm.TreeView
Dim nd As WinForm.TreeNode
tr = e.Form.Controls("TreeView1")
dt2 = dt.Select(" [标题id] Like '??' ")
For Each dr1 As DataRow In dt2
    Dim str2 As String = dr1("标题id")
    Dim str3 As String = dr1("标题")
    nd = Tr.Nodes.Add(str2,str3)
    dt2 = dt.Select("[标题id] like '"& str2 &"?? ' ")
   For Each dr2 As DataRow In dt2
        str2 = dr2("标题ID")
        str3 = dr2("标题")
        nd.Nodes.Add(str2,str3)
       dt2 =dt.Select("[标题id] like '"& str2 &"?? ' ")
  Next
Next

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

[此贴子已经被作者于2010-10-21 19:14:40编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/10/21 21:26:00 [只看该作者]


Dim tr As WinForm.TreeView = Forms("窗口").Controls("TreeView1")
Dim nd0,nd1,nd2 As WinForm.TreeNode
Dim fs As Integer
tr.Nodes.Clear   '清空原来的节点::::::::::
For Each dr As DataRow In DataTables("单位树").Select("","标题id")
    If dr("标题id") <> "" Then
        fs = dr("节点")
        Select Case fs
            Case 0
                nd0 = tr.Nodes.Add(Rand.NextString(10),dr("标题"))
            Case 1
                nd1 = nd0.Nodes.Add(Rand.NextString(10),dr("标题"))
            Case 2
                nd2 = nd1.Nodes.Add(Rand.NextString(10),dr("标题"))
        End Select
    End If
Next

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


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

?不能作为通配符吧,你测试一下:

 

tr = e.Form.Controls("TreeView1")
dt2 = dt.Select(" [标题id] Like '??' ")
Messagebox.show(dt2.Count)

 

就会发现dt2的行数为0


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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2010/10/22 10:44:00 [只看该作者]

以下是引用狐狸爸爸在2010-10-21 21:29:00的发言:

?不能作为通配符吧,你测试一下:

 

tr = e.Form.Controls("TreeView1")
dt2 = dt.Select(" [标题id] Like '??' ")
Messagebox.show(dt2.Count)

 

就会发现dt2的行数为0

如果只想筛选出只有两个字符的数据记录,代码要怎么写呀图片点击可在新窗口打开查看


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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33957 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2010/10/22 11:07:00 [只看该作者]

Len([标题]) = 2

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


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

并非要用Select的,在命令窗口执行:

For Each dr As DataRow In DataTables("单位树").DataRows
    dr("标题id") = dr("标题id").Trim()
Next
For Each dr1 As DataRow In DataTables("单位树").DataRows
    If dr1("标题id").Length = 2 Then
        Output.Show(dr1("标题id"))
        For Each dr2 As DataRow In DataTables("单位树").DataRows
            If dr2("标题id").StartsWith(dr1("标题id")) AndAlso dr2("标题id").Length = 4  Then
                Output.Show(dr2("标题id"))
                For Each dr3 As DataRow In DataTables("单位树").DataRows
                    If dr3("标题id").StartsWith(dr2("标题id")) AndAlso dr3("标题id").Length = 6  Then
                        Output.Show(dr3("标题id"))
                    End If
                Next
            End If
        Next
    End If
Next

 

其实这一段多余:

For Each dr As DataRow In DataTables("单位树").DataRows
    dr("标题id") = dr("标题id").Trim()
Next
之所以加上,是因为你输入不够严谨,标题ID后面都输入了空格的,01的长度不是2,而是3,后面有空格了。

[此贴子已经被作者于2010-10-22 11:08:56编辑过]

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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2010/10/22 11:31:00 [只看该作者]

领导如果这一则案例treeview 下一级是“无限延伸”(用户定义了三级,或者5级),那么如何生成呢。比如“华海仓库管理”中的参数设置窗口---单位树treeview,就是无限性的 延伸下级,同时又能根据数据记录生成treeview这个目录树

[此贴子已经被作者于2010-10-22 11:31:22编辑过]

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


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

你就按照上面的代码,给他来个10级,代码也没有多长的。

10级的目录够深了。


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


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

这是一个任意层数的,不过一般用户理解起来比较困难:

 

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim nd As WinForm.TreeNode
For Each dr As DataRow In DataTables("单位树").DataRows
    dr("标题id") = dr("标题id").Trim()
Next
tr.Nodes.Clear
Dim drs As List(of DataRow)
drs = DataTables("单位树").Select("", "标题ID")
For i As Integer = 0 To drs.Count -1
    If  drs(i)("标题id").Length = 2 Then
        nd = tr.nodes.Add(drs(i)("标题id"), drs(i)("标题id"))
    Elseif drs(i)("标题id").StartsWith(drs(i-1)("标题id")) Then
        nd = nd.nodes.Add(drs(i)("标题id"), drs(i)("标题id"))
    Else
        Do While True
            nd = nd.ParentNode
            If drs(i)("标题id").StartsWith(nd.Name)
                nd = nd.nodes.Add(drs(i)("标题id"), drs(i)("标题id"))
                Exit Do
            End If
        Loop
    End If
Next

 

 

 


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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2010/10/22 19:21:00 [只看该作者]

删除节点又出了新的情况:

还是这一例,我使用了M版的方案,treeview生成了,但是删除节点又出了新的情况

  Dim tr As WinForm.TreeView
Dim nd As WinForm.TreeNode
tr = Forms("参数设置").Controls("TreeView1")
nd = tr.SelectedNode
If MsgBox("确认删除类型:" & nd.text & " ?",65,"提示") = 1 Then
Dim b  As String = nd.Name
b = b & "*"
    DataTables("单位树").DeleteFor("[标题id] like '"& b &"' ")
    nd.Remove
End If

实际没有删除、

 

[此贴子已经被作者于2010-10-22 19:21:17编辑过]

 回到顶部