以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  通过内部函数生成的目录树,如何增加过虑条件  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=64267)

--  作者:able
--  发布时间: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
--  发布时间:2015/2/9 14:31:00
--  
drs = dt.Select("[父键] = \'" & nd.name & "\' and 标记 is not null")

--  作者:Bin
--  发布时间: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")

--  作者:有点甜
--  发布时间: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
--  发布时间:2015/2/9 14:53:00
--  
非常感谢 有点甜,

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

--  作者:Bin
--  发布时间:2015/2/9 14:56:00
--  
利用FINDRow 和e.node.text找到对应的行.再设置其复选框Checked属性


搞不定就上例子



--  作者:有点甜
--  发布时间:2015/2/9 15:06:00
--  

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

 

nd.Tag = dr("_Identify")

 

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


--  作者:able
--  发布时间: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()

请问如何赋值?

--  作者:有点甜
--  发布时间:2015/2/9 15:21:00
--  

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

nd.Tag = dr("_Identify")

 

-----------

 

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

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

--  作者:Bin
--  发布时间: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