以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何打印包含统计数据的筛选树?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=94031)

--  作者:pladic
--  发布时间:2016/12/13 18:43:00
--  [求助]如何打印包含统计数据的筛选树?
图片点击可在新窗口打开查看
如图的筛选目录树,如何打印出来?

用excel报表能实现吗?还是需要导出成excel文件,再利用excel程序的统计功能实现?
[此贴子已经被作者于2016/12/13 18:48:07编辑过]

--  作者:有点蓝
--  发布时间:2016/12/13 20:13:00
--  
你是想打印左边的目录树?还是只是想输出统计数据?

如果要打印目录树这个非常麻烦,可以考虑用专业报表做,自己计算节点的打印位置

如果想输出统计数据,直接做个分组统计,然后把统计表按平时Excel报表做就可以

--  作者:pladic
--  发布时间:2016/12/14 9:18:00
--  回复:(有点蓝)你是想打印左边的目录树?还是只是想...
我还是导出成execl文件,然后用EXCEL的数据透视表功能实现打印吧。
--  作者:pladic
--  发布时间:2016/12/14 9:25:00
--  回复:(有点蓝)你是想打印左边的目录树?还是只是想...
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


第3行,生成了一个临时统计表。
如果希望实现关闭目录树窗口时,如何写删除这个临时表的代码?

第8行的效果没有实现,可以在主窗口中看到这个统计表。
[此贴子已经被作者于2016/12/14 9:25:33编辑过]

--  作者:有点蓝
--  发布时间:2016/12/14 9:47:00
--  
临时表关闭窗口就会自动删除的,不用管。

代码不是有注释的吗
dt = b.Build(False) \'参数设置为False,生成一个临时表,不在主界面显示

要显示这样
b.Build()
dt = datatables("统计表1")

关闭窗口的时候AfterClose事件
DataTables.Unload("统计表1")

--  作者:pladic
--  发布时间:2016/12/14 10:31:00
--  
代码不是有注释的吗
dt = b.Build(False) \'参数设置为False,生成一个临时表,不在主界面显示

用的是这行代码。但是,一能在主界面显示,二窗口关闭时不自动删除。

所以要在afterclose事件中加一句删除代码。

--  作者:有点蓝
--  发布时间:2016/12/14 10:45:00
--  
 b.Build(False)不会在主界面显示的。

只能是之前调用过 b.Build(),生成过同名的统计表