以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]目录树问题请教老师 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=76399) |
-- 作者:天使泪 -- 发布时间:2015/10/28 13:35:00 -- [求助]目录树问题请教老师 我想设置一个多选项的目录树,也就是选中一级目录树后,二级以后的目录同时勾选。 请教老师。感谢。
|
-- 作者:Hyphen -- 发布时间:2015/10/28 14:10:00 -- 定义递归函数,名称SetNodesCheck
Dim n As WinForm.TreeNode = args(0) For Each n2 As WinForm.TreeNode In n.Nodes
在AfterCheckNode事件 Functions.Execute("SetNodesCheck", e.Node,e.Node.Checked) |
-- 作者:大红袍 -- 发布时间:2015/10/28 14:12:00 -- 加上下面这段全选的代码
For Each nd As WinForm.TreeNode In e.node.AllNodes
|
-- 作者:天使泪 -- 发布时间:2015/10/28 14:14:00 -- 感谢Hyphen 老师,问题已经完美解决。 |
-- 作者:天使泪 -- 发布时间:2015/10/28 14:15:00 -- 选项解决了,为什么不能筛选勾选的相关表呢。 |
-- 作者:天使泪 -- 发布时间:2015/10/28 14:21:00 -- 大红袍老师,全选可以了,只是筛选的表无法显示。
|
-- 作者:Hyphen -- 发布时间:2015/10/28 14:25:00 -- 这个最好上个例子说明,不同数据结构,实现筛选条件设置都不一样的 |
-- 作者:大红袍 -- 发布时间:2015/10/28 14:30:00 -- 以下是引用天使泪在2015/10/28 14:21:00的发言:
大红袍老师,全选可以了,只是筛选的表无法显示。
参考 http://www.foxtable.com/help/topics/2503.htm
|
-- 作者:天使泪 -- 发布时间:2015/10/28 14:33:00 -- 单击节点后执行:(筛选数据表) Dim trv As WinForm.TreeView = e.Form.Controls("TreeView1") If e.Node.Name = "全部" Then Tables("人员信息").Filter = "" Else Tables("人员信息").Filter = "序列编号 Like \'" & e.Node.Name & "%\'" End If 选定节点前执行:(自动展开节点至2级) systemready = False e.Sender.StopRedraw Dim pnd As object If e.Node.Level = 0 Then pnd = e.Sender Else pnd = e.Node End If pnd.CollapseAll e.Node.Expand e.Sender.ResumeRedraw Systemready = True 展开节点后执行:(每一级节点图标不同) Dim tr As WinForm.TreeView tr = Forms("单位序列").Controls("TreeView1") For Each nd As WinForm.TreeNode In tr.AllNodes If nd.Level = 0 Then nd.Ic Else If nd.level = 1 Then nd.Ic Else If nd.level = 2 Then nd.Ic End If Next 改变节点复选框后执行:(自动选取下一级节点) Functions.Execute("SetNodesCheck", e.Node,e.Node.Checked) 内部函数: AddChildren函数 Dim nd As WinForm.TreeNode = args(0) Dim dt As DataTable = args(1) For Each dr As DataRow In dt.Select("","序列编号") Dim km As String = dr("序列编号") If km.StartsWith(nd.name) AndAlso km.Length = nd.Name.Length + 2 Then Dim cd As Winform.TreeNode = nd.Nodes.Add(km,dr("单位名称")) Functions.Execute("AddChildren",cd,dt) End If Next SetNodesCheck函数 Dim n As WinForm.TreeNode = args(0) Dim checked As Boolean = args(1) For Each n2 As WinForm.TreeNode In n.Nodes n2.Checked = checked If n2.Nodes.Count > 0 Then Functions.Execute("SetNodesCheck", n2,checked ) End If Next 能帮我看看上面的事件和代码能否整合一下。我点击节点可以筛选出我需要的表数据。前面我加了复选框,现在可以把前面的复选框自动全选,可是不能筛选表数据。还需要手动点击才行。
|
-- 作者:天使泪 -- 发布时间:2015/10/28 14:39:00 -- 对了,还有个问题。我在窗口编辑的时候,浏览正常。为什么应用后就没有二级自动展开以及图标样式了。 |