之前don发表了一个帖子,我在这个基础上改进了一下,加上了数据类型,大家可以在这个基础上设计可以多选的加载树。
这些内容已经写入帮助,下面是帮助中关于这部分的内容:
上面的常规设计方式,目录树的层级越多,代码就越复杂,下面我们提供一个通用的筛选树代码,不过有多少层,代码都一样。
设计步骤同样很简单:
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
Dim
pd
As
WinForm.TreeNode
For
Each
nd
In
e.node.allNodes
'清除子节点的选中标记
nd.Checked = False
Next
pd = e.Node.ParentNode
Do
While
pd
IsNot
Nothing
'清除父节点的选中标记
pd.Checked = False
pd = pd.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
至此这个多层的筛选树已经设计完成,而且代码是完全通用的,例如我们要根据产品、日期、折扣三列生成筛选树,只需稍作调整即可:
1、将窗口事件AfterLoad的代码改为:
e.Form.Controls("TreeView1").BuildTree("订单", "产品|日期|折扣")
2、将目录树的AfterCheckNode事件的前两行代码改为:
Dim nms As String() = {"产品","日期","折扣"} '指定生成目录树的各列
Dim qts As
String() = {"'","#",""} '指定将各列的值括起来的符号
唯独需要注意的是指定将各列的值括起来的符号时,记得字符列用单引号,日期列用符号#,数值列则不需要指定符号,例如上面的折扣列。
[此贴子已经被作者于2013-3-29 9:58:18编辑过]