Foxtable(狐表)用户栏目专家坐堂 → [求助]带统计的筛选树,如果是年,季度,产品,季度的代码应该如何写


  共有3280人关注过本帖树形打印复制链接

主题:[求助]带统计的筛选树,如果是年,季度,产品,季度的代码应该如何写

帅哥哟,离线,有人找我吗?
ehomecd
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:267 积分:2574 威望:0 精华:0 注册:2008/11/9 18:30:00
[求助]带统计的筛选树,如果是年,季度,产品,季度的代码应该如何写  发帖心情 Post By:2015/6/5 10:40:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:筛选树.jpg
图片点击可在新窗口打开查看


设计步骤:

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 GroupTableBuilder("统计表1",DataTables("订单"))
b
.Groups.AddDef("日期",DateGroupEnum.Year,"年")
b
.Groups.AddDef("日期",DateGroupEnum.Month,"")
b
.Groups.AddDef("产品")
b
.Totals.AddDef("客户",AggregateEnum.Count,"订单数") '根据客户列来统计记录数,也就是订单数
dt
= b.Build(False) '参数设置为False,生成一个临时表,不在主界面显示
'然后根据统计表生成目录树

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(False) '参数设置为False,生成一个临时表,不在主界面显示

加上参数False后,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

 


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/6/5 10:48:00 [只看该作者]

DateGroupDateGroupEnum型枚举,指定日期列的分组方式,包括以下可选值:

None:无
Year: 按年
Quarter:按季度
Month:按月
Week:按周
Day:按天
Hour:按小时
Minute:按分
Second:按秒


 回到顶部