通用设计
上述常规编码方式,目录树的层级越多,代码就越复杂,下面我们提供一个通用的筛选树代码,不过有多少层,代码都一样。
设计步骤同样很简单:
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
我想把可选的筛选树改成 客户名称|出货月份|出货日期 三个目录树
但是 【订表】里面只有 “客户名称”和“出货日期”,没有“出货月份”的,不知道是否可以改?该如何改?