在加载树显示统计数据

本节的示例,可以参考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

'首先生成统计表
Dim
dt As DataTable
Dim
b As New SQLGroupTableBuilder("统计表1","订单")
b
.Groups.AddDef("日期",DateGroupEnum.Year,"年")
b
.Groups.AddDef("日期",DateGroupEnum.Month,"月")
b
.Groups.AddDef("产品")
b
.Totals.AddDef("_Identify",AggregateEnum.Count,"订单数") '根据主键列来统计记录数,也就是订单数
dt
= b.Build(True) '参数设置为True,生成一个临时表,不在主界面显示
'然后根据统计表生成目录树

Dim
trv As WinForm.TreeView = e.Form.Controls("TreeView1")
trv
.BuildTree(dt, "年|月|产品")
trv
.StopRedraw
For
Each nd As WinForm.TreeNode In trv.AllNodes
    Dim Year As Integer = nd.DataRow("年")
    Dim Month As Integer = nd.DataRow("月")
    Dim Product As String = nd.DataRow("产品")
    Select Case nd.Level
        Case 0
            nd.Text = nd.text & "年(" & dt.Compute("Sum(订单数)","年 = " & Year) & "条)"
        Case 1
            nd.Text = nd.text & "月(" & dt.Compute("Sum(订单数)","年 = " & Year & " And 月 = " & Month) & "条)"
        Case 2
            nd.Text = nd.text & "(" & nd.DataRow("订单数") & ")"
    End
Select

Next

trv
.Nodes.Insert("加载所有行","加载所有行(" & dt.Compute("Sum(订单数)") & "条)",0)
trv
.ResumeRedraw

上面的代码中,请留意第8行代码:

dt = b.Build(True) '参数设置为True,生成一个临时表,不在主界面显示

加上参数True后,Build生成的表,不会在主界面显示,当不再有地方引用这个表或这个表中的行和列时,这个表就会被自动销毁,参考不显示生成的表
以本节的例子来说,由于根据这个表生成了目录树,目录树节点的DataRow属性会引用这个表中的行,所以直到关闭窗口,这个表才会被自动销毁。

6、将目录树的NodeMouseDoubleClick事件设为:

Dim Filter As String = ""
If
e.Node.Name <> "加载所有行" Then '要用Name属性,不能用Text属性
    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
            Filter ="Year(
日期) = " & Year
        Case 1
            Filter ="Year(
日期) = " & Year & " And Month(日期) = " & Month
        Case 2
            Filter ="Year(
日期) = " & Year & " And Month(日期) = " & Month & " And 产品 = '" & Product & "'"
    End Select

End
If
DataTables
("订单").LoadFilter = Filter
DataTables
("订单").Load()


本页地址:http://www.foxtable.com/webhelp/topics/2742.htm