Foxtable(狐表)用户栏目专家坐堂 → [求助]已解决 目录树下多选复选框不能实现筛选的问题


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

主题:[求助]已解决 目录树下多选复选框不能实现筛选的问题

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


加好友 发短信
等级:婴狐 帖子:43 积分:562 威望:0 精华:0 注册:2011/8/7 23:22:00
[求助]已解决 目录树下多选复选框不能实现筛选的问题  发帖心情 Post By:2012/7/17 22:35:00 [只看该作者]

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

 

首先谢谢狐爹!!!

 

如何实现多选不同父节点下的子节点进行筛选

 

建立了一个窗口,插入目录树控件

 

窗口AfterLoad代码

 

Dim tr As WinForm.TreeView = e.Form.Controls("TreeView1")
tr.BuildTree("文件管理", "大类|二类|三类")  -------  为三级目录树

 

http://www.foxtable.com/help/index.html?n=2503.htm  此示例为两级

 

看了论坛里的  “[求助] 复选框目录树 增加节点 ”的主题,引用了代码:

 

Dim trv As WinForm.TreeView = e.Sender
Dim flt As String
For Each nd As WinForm.TreeNode In e.node.Nodes '同步子节点选中状态
nd.Checked = e.Node.Checked
Next
If e.node.ParentNode IsNot Nothing Then '去掉父节点选中状态
e.node.ParentNode.Checked = False
End If
For Each nd As WinForm.TreeNode In trv.AllNodes
If nd.Level > 0 AndAlso nd.ParentNode.Checked Then '如果父节点选中
Continue For '跳过此节点,处理下一结点
End If
If nd.Checked Then
If flt > "" Then
flt = flt & " Or " '注意用or而不是And
End If
If nd.Level = 0 Then '注意下面的条件都要用括号括起来
flt = flt & "(大类 = " & nd.Text & ")"
ElseIf nd.Level = 1 Then '注意下面的条件都要用括号括起来
flt = flt & "(大类 = " & nd.ParentNode.Text & " And 二类 = '" & nd.text & "')"
Else
flt = flt & "(大类 = " & nd.ParentNode.ParentNode.Text & " And 二类 = '" & nd.ParentNode.text & "' And 三类 = '" & nd.Text & "')"
End If
End If
Next
Tables("文件管理").Filter = flt

 

提示:System.Data.EvaluateException: 未找到列[软件]

 

改用狐神mr725的代码,如下:

 

Dim trv As WinForm.TreeView = e.Sender
Dim flt,a,b,c As String
For Each nd As WinForm.TreeNode In e.node.Nodes '同步子节点选中状态
nd.Checked = e.Node.Checked
Next
If e.node.ParentNode IsNot Nothing Then '去掉父节点选中状态
e.node.ParentNode.Checked = False
End If
Dim ndf As WinForm.TreeNode = trv.SelectedNode
If ndf IsNot Nothing Then
If ndf.Checked Then
If ndf.Level = 0 Then '注意下面的条件都要用括号括起来
a = ndf.Text
flt = " 大类 = '" & a & "'"
End If
If ndf.Level = 1 Then
a = ndf.ParentNode.text
b = ndf.Text
flt = "大类 = '" & a & "' And 二类 = '" & b & "'"
End If
If ndf.Level = 2 Then
Dim pth() As String = ndf.FullPath.Split("\")
a = pth(0)
b = pth(1)
c = ndf.Text
flt = "大类 = '" & a & "' And 二类 = '" & b & "' And 三类= '" & c & "'"
End If
End If
End If

Tables("文件管理").Filter = flt

(相同父节点下多选子节点,可以筛选,多选不同父节点下的子节点就不能进行筛选) 

 

虽然不会报错,但是没有达到以下的效果:

 

多选不同父节点下的子节点进行筛选

 

用多选目录树的复选框对表进行筛选

 

比如当我点选编程下的开发项目,再点选软件下 手机软件的诺基亚复选框,会筛选出相应的行在表中

 


 

文字功底差,可能说的不够通顺,还请狐爹莫怪,谢谢

 

 

[此贴子已经被作者于2012-7-19 8:05:10编辑过]

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


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

1、没看明白你说的是啥意思

2、做个试用版的例子吧,手头没有开发版···

3、或用图来演示你的要求。


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


加好友 发短信
等级:婴狐 帖子:43 积分:562 威望:0 精华:0 注册:2011/8/7 23:22:00
  发帖心情 Post By:2012/7/18 0:32:00 [只看该作者]

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

狐神请看例子,

 

在这个项目里我不能实现多选目录树的复选框来进行筛选

 

刚才匆匆忙忙做的项目,感觉和开发版有点不一样,不过还是能说明问题

 

先谢过了!!!


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


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


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


加好友 发短信
等级:婴狐 帖子:43 积分:562 威望:0 精华:0 注册:2011/8/7 23:22:00
  发帖心情 Post By:2012/7/18 18:09:00 [只看该作者]

这个例子只有两级节点,BuildTree("表A", "a|b")

 

我的是三级节点,BuildTree("表A", "a|b|c")

 

本人是菜狐一只,还请狐爹和路过的狐友们帮忙详解,谢谢!!!

[此贴子已经被作者于2012-7-18 18:09:33编辑过]

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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12999 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2012/7/18 22:52:00 [只看该作者]

对比1楼你写的和这个有什么不同:

Dim trv As WinForm.TreeView = e.Sender
Dim flt As String
For Each nd As WinForm.TreeNode In e.node.Nodes '同步子节点选中状态
    nd.Checked = e.Node.Checked
Next
If e.node.ParentNode IsNot Nothing Then '去掉父节点选中状态
    e.node.ParentNode.Checked = False
End If
For Each nd As WinForm.TreeNode In trv.AllNodes
    If nd.Level > 0 AndAlso nd.ParentNode.Checked Then '如果父节点选中
        Continue For '跳过此节点,处理下一结点
    End If
    If nd.Checked Then
        If flt > "" Then
            flt = flt & " Or "  '注意用or而不是And
        End If
        If nd.Level = 0 Then '注意下面的条件都要用括号括起来
            flt = flt & "(大类 = '" & nd.Text & "')"
        ElseIf  nd.Level = 1 Then
            flt = flt & "(大类= '" & nd.ParentNode.Text & "' And 二类 = '" & nd.Text & "')"
        Else
            flt = flt & "(大类= '" & nd.ParentNode.ParentNode.Text & "' And 二类 = '" & nd.ParentNode.Text & "' And 三类 = '" & nd.Text & "')"
            
        End If
    End If
Next
Tables("文件管理").Filter = flt
[此贴子已经被作者于2012-7-18 23:03:49编辑过]

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


加好友 发短信
等级:婴狐 帖子:43 积分:562 威望:0 精华:0 注册:2011/8/7 23:22:00
  发帖心情 Post By:2012/7/19 8:04:00 [只看该作者]

谢谢狐爹,我终于发现问题了



大类 = " & nd.ParentNode.ParentNode.Text & " 这里少了' ' 号

 

所以提示:System.Data.EvaluateException: 未找到列[软件] 这里的软件并非列名,只是表数据

 

问题解决了,谢谢大家


还有楼上的朋友,刚刚看到你修改后的代码,  ' ' 还用红色表示,  我太粗心了

[此贴子已经被作者于2012-7-19 8:08:24编辑过]

 回到顶部