Foxtable(狐表)用户栏目专家坐堂 → 多重筛选的问题


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

主题:多重筛选的问题

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


加好友 发短信
等级:童狐 帖子:205 积分:1969 威望:0 精华:0 注册:2017/8/17 12:59:00
多重筛选的问题  发帖心情 Post By:2017/9/13 11:53:00 [只看该作者]

窗口里有目录树对表进行了筛选,想在窗体里加一个复选框对已经筛选出来的结果进行二次筛选,请问如何实现?

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


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

Tables("表A").Filter = "(" & iif(Tables("表A").Filter>"",Tables("表A").Filter,"1=1") & ") and 某列 = true"

[此贴子已经被作者于2017/9/13 12:19:58编辑过]

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


加好友 发短信
等级:童狐 帖子:205 积分:1969 威望:0 精华:0 注册:2017/8/17 12:59:00
  发帖心情 Post By:2017/9/13 13:32:00 [只看该作者]

check取消掉后如何去掉该filter?但是不能取消掉目录树的filter。

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


加好友 发短信
等级:童狐 帖子:205 积分:1969 威望:0 精华:0 注册:2017/8/17 12:59:00
  发帖心情 Post By:2017/9/13 13:55:00 [只看该作者]

包括帮助文件里给出的目录树多选筛选的例子,也是这个问题,去除check之后不能去掉筛选。

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


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

以下是引用dengk03在2017/9/13 13:32:00的发言:
check取消掉后如何去掉该filter?但是不能取消掉目录树的filter。

 

1、你如何生成目录树的filter的?生成后,用一个变量记录。

 

vars("filter") = 生成的Filter

 

2、如果需要还原原来的filter,就这样写

 

Tables("表A").Filter = vars("Filter")


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


加好友 发短信
等级:童狐 帖子:205 积分:1969 威望:0 精华:0 注册:2017/8/17 12:59:00
  发帖心情 Post By:2017/9/13 14:38:00 [只看该作者]

谢谢老师,按照您的方法解决了。
目录树我参照如下例子,发现加上var之后目录树取消check之后也能恢复筛选了。

通用设计

上述常规编码方式,目录树的层级越多,代码就越复杂,下面我们提供一个通用的筛选树代码,不过有多少层,代码都一样。

设计步骤同样很简单:

1、新建一个窗口,插入一个目录树控件,将目录树的“显示复选框”属性设置为True。

2、将窗口的AfterLoad事件代码设置为:

e.Form.Controls("TreeView1").BuildTree("订单", "产品|客户|雇员")

3、将目录树的AfterCheckNode事件代码设置为:

Dim nms As String() = {"产品","客户","雇员"} '指定生成目录树的各列
Dim
qts As String() = {"'","'","'"} '指定将各列的值括起来的符号,这里都是字符型,所以都是单引号
Dim
trv As WinForm.TreeView = e.Sender
Dim
flt As String
Dim
nd As WinForm.TreeNode
For
Each nd In e.node.allNodes '清除子节点的选中标记
   
nd.Checked = False
Next

nd
= e.Node.ParentNode
Do
While nd IsNot Nothing '清除父节点的选中标记
   
nd.Checked = False
   
nd = nd.ParentNode
Loop

For
Each nd In trv.AllNodes
   
If nd.Checked  Then
       
Dim rts() As String = nd.FullPath.Split("\")
        Dim
val As String = ""
        For
i As Integer = 0 To rts.length - 1
            If
val > "" Then
               
val = val & " And "
            End If
           
val = val & nms(i) & " = " & qts(i) & rts(i) & qts(i)
        Next
        If
flt > "" Then
           
flt = flt & " Or (" & val & ")"
        Else
           
flt = val
        End If
    End If

Next
Tables(
"订单").Filter  = flt


 回到顶部