在筛选树显示统计数据
本节的示例,可以参考CaseStudy目录下的文件:统计筛选树.Table
假定我们要设计一个下图所示的筛选树,和普通的筛选树不同,这个筛选树 的年、月节点不是纯数字的,会显示"年"、"月"字样,而且每个节点会显示该节点下的订单总数:
设计步骤:
1、新建一个窗口,窗口类型设为主窗口,在窗口中插入一个分区面板。
2、在右分区插入一个Table(表),将其绑定到主表(订单表),并将其停靠属性设置为Fill。
3、在左分区插入一个TreeView(目录树),并将其停靠属性设置为Fill。
4、将分区面板的停靠属性也设为Fill。
5、将窗口的AfterLoad事件设为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
'首先生成统计表 |
上面的代码中,请留意第8行代码:
dt = b.Build(True) '参数设置为True,生成一个临时表,不在主界面显示
加上参数True后,Build生成的表,不会在主界面显示,当不再有地方引用这个表或这个表中的行和列时,这个表就会被自动销毁,参考不显示生成的表。
以本节的例子来说,由于根据这个表生成了目录树,目录树节点的DataRow属性会引用这个表中的行,所以直到关闭窗口,这个表才会被自动销毁。
6、将目录树的NodeMouseDoubleClick事件设为:
Dim
Filter
As String
= ""
If e.node.Name
<> "显示所有行"
Then
'要用Name属性,不能用Text属性
Dim
d1
As
Date
Dim
d2
As
Date
Dim
Year
As
Integer
=
e.Node.DataRow("年")
Dim
Month
As
Integer
=
e.Node.DataRow("月")
Dim
Product
As
String
=
e.Node.DataRow("产品")
Select Case
e.Node.Level
Case
0
d1
=
New
Date(Year,1,1)
'取得该年的第一天
d2
=
new
Date(Year,12,31)
'取得该年的最后一天
Filter
=
"日期
>= #"
&
d1
&
"#
And 日期
<= #"
&
d2
&
"#"
Case
1
d1
=
New
Date(Year,
Month,
1)
'取得该月的第一天
d2
=
new
Date(Year,
Month,
Date.DaysInMonth(Year,Month))
'取得该月的最后一天
Filter
=
"日期
>= #"
&
d1
&
"#
And 日期
<= #"
&
d2
&
"#"
Case
2
d1
=
New
Date(Year,
Month,
1)
'取得该月的第一天
d2
=
new
Date(Year,
Month,
Date.DaysInMonth(Year,Month))
'取得该月的最后一天
Filter
= "日期 >= #"
&
d1
&
"# And 日期
<= #"
&
d2
&
"# And 产品 =
'"
&
Product
&
"'"
End Select
End If
Tables("订单").Filter
= Filter