Foxtable(狐表)用户栏目专家坐堂 → 通过内部函数生成的目录树,如何增加过虑条件


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

主题:通过内部函数生成的目录树,如何增加过虑条件

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


加好友 发短信
等级:婴狐 帖子:69 积分:797 威望:0 精华:0 注册:2015/1/2 15:58:00
通过内部函数生成的目录树,如何增加过虑条件  发帖心情 Post By:2015/2/9 14:29:00 [只看该作者]

一以是帮助文档中的说明:

设计步骤:

1、在内部函数中新建一个函数,名为AddChildren,代码为:

Dim nd As WinForm.TreeNode = args(0)
Dim
dt As DataTable = args(1)
Dim
drs As List(of DataRow)
drs = dt.
Select("[父键] = '" & nd.name & "'")
For
Each dr As DataRow In drs
Dim cd As Winform.TreeNode = nd.Nodes.Add(dr("键"),dr("标题"))
Functions.Execute(
"AddChildren",cd,dt)

Next

上述代码中,出现了调用AddChildren函数自身的代码(第8行):

Functions.Execute("AddChildren",cd,dt)

这种在函数自己调用自己的情况,就是常说的递归调用。

2、在窗口中加入一个目录树控件和一个按钮,按钮的代码为:

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim
nd As WinForm.TreeNode
Dim
dt As DataTable = DataTables("A")
tr
.StopRedraw()
tr
.Nodes.Clear
tr
.Nodes.Add("全部")
For
Each dr As DataRow In dt.datarows
If dr.IsNull("
父键") Then
nd = tr.Nodes.Add(dr("
"),dr("标题"))
Functions.Execute("AddChildren",nd,dt)
End If

Next

tr
.ResumeRedraw()


在数据表里面,有一个列名为:"标记",我想生成目录树的时候,过虑掉"标记"列为空值的数据.请问如何实现?


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/2/9 14:31:00 [只看该作者]

drs = dt.Select("[父键] = '" & nd.name & "' and 标记 is not null")

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/2/9 14:31:00 [只看该作者]

For Each dr As DataRow In dt.datarows  也改为

For Each dr As DataRow In dt.Select("标记 is not null")

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/2/9 14:32:00 [只看该作者]

1、

 

drs = dt.Select("[父键] = '" & nd.name & "'")

 

改成

 

drs = dt.Select("[父键] = '" & nd.name & "' and 标记 is not null")

 

2、

 

If dr.IsNull("父键") Then

 

改成

 

If dr.IsNull("父键") AndAlso dr.IsNull("标记") = False Then

 


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


加好友 发短信
等级:婴狐 帖子:69 积分:797 威望:0 精华:0 注册:2015/1/2 15:58:00
  发帖心情 Post By:2015/2/9 14:53:00 [只看该作者]

非常感谢 有点甜,

再请问.勾选目录树复选框能让表的复选框同时勾选,如何做到?

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/2/9 14:56:00 [只看该作者]

利用FINDRow 和e.node.text找到对应的行.再设置其复选框Checked属性


搞不定就上例子



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/2/9 15:06:00 [只看该作者]

Nodes.Add 执行以后,给节点赋值

 

nd.Tag = dr("_Identify")

 

剩余的,看6楼,find出具体的行


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


加好友 发短信
等级:婴狐 帖子:69 积分:797 威望:0 精华:0 注册:2015/1/2 15:58:00
  发帖心情 Post By:2015/2/9 15:19:00 [只看该作者]

加载窗口时,目录树是以下代码:

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
Dim nd As WinForm.TreeNode
Dim dt As DataTable = DataTables("产品信息")
tr.StopRedraw()
tr.Nodes.Clear
tr.Nodes.Add("全部")
For Each dr As DataRow In dt.datarows
    If dr.IsNull("父键") Then
        nd = tr.Nodes.Add(dr("键"),dr("规格型号"))
        Functions.Execute("AddChildren",nd,dt)
    End If
Next
tr.ResumeRedraw()

请问如何赋值?

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/2/9 15:21:00 [只看该作者]

nd = tr.Nodes.Add(dr("键"),dr("规格型号"))

nd.Tag = dr("_Identify")

 

-----------

 

然后,要查节点对应的行,就根据tag

[此贴子已经被作者于2015/2/9 15:20:45编辑过]

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/2/9 15:21:00 [只看该作者]

nd = tr.Nodes.Add(dr("键"),dr("规格型号"))
nd.tag = dr 


查找

Dim wz As Integer = Tables("订单").FindRow(nd.tag)
If wz >= 0 Then
        Tables
("订单").rows(wz).checked = true

    End If


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