谢谢老师,按照您的方法解决了。
目录树我参照如下例子,发现加上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