分页加载后台统计
筛选树和加载树,能够让我们随意选择前台数据(筛选树)或后台数据(加载树)进行统计,参考:
上一节提到即使只加载部分数据,依然可以使用GroupTableBuilder或CrossTableBuilder对后台所有数据进行统计,只需将FromServer属性设置为True即可。
实际上,使用GroupTableBuilder或CrossTableBuilder进行后台统计时,并非总是统计后台所有数据,而是受是否开启分页加载的影响,原则是:
1、如果开启了分页加载,那么默认统计的是后台符合加载条件的所有数据,如果再设置一个统计条件,那么统计的数据必须符合:加载条件 And 统计条件
2、如果未开启分页加载,那么加载条件不影响统计结果,默认会统计后台所有数据,如果设置了统计条件,那么统计的是后台所有符合统计条件的数据。
验证
下图的加载树,按年月分页加载,每页10行,我们在加载树中选择了6个节点,分别为2018年的7、8、9月和2019年的7、8、9月:
在命令窗口执行:
Dim
g As
New
CrossTableBuilder("统计表1",
DataTables("订单"))
g.HGroups.AddDef("产品")
g.VGroups.AddDef("日期",
DateGroupEnum.Year,
"{0}年")
g.VGroups.AddDef("日期",
"{0}月")
g.Totals.AddDef("数量",
"数量")
g.FromServer
= True
'设置为True,统计后台数据
g.Build()
MainTable =
Tables("统计表1")
得到的统计结果为:
可以看到:
1、 尽管CrossTableBuilder没有设置统计条件,但并没有统计全部数据,而只统计了加载树选定的6个月份的数据。
2、 尽管加载树只加载了一页数据(10行),但CrossTableBuilder依然对这6个月全部数据进行了统计。
现在我们加上统计条件:
Dim
g As
New
CrossTableBuilder("统计表1",
DataTables("订单"))
g.HGroups.AddDef("产品")
g.VGroups.AddDef("日期",
DateGroupEnum.Year,
"{0}年")
g.VGroups.AddDef("日期",
"{0}月")
g.Totals.AddDef("数量",
"数量")
g.FromServer
= True
g.Filter
= "日期 >= #8/1/2018#"
'设置了统计条件
g.Build()
MainTable =
Tables("统计表1")
得到的统计结果为:
可以看到统计的是选定的6个月中符合条件的行,而不是后台所有符合条件的行。
如果你要统计所有数据,或者说所有符合条件的行:
1、可以在加载树中选择第一个节点"加载所有行"。
2、或者临时清除LoadFilter或者LoadTop属性,统计完成之后再恢复,例如:
Dim
g As
New CrossTableBuilder("统计表1",
DataTables("订单"))
Dim
Filter As
String = DataTables("订单").LoadFilter
'临时保存加载条件
DataTables("订单").LoadFilter
= "" '清除加载条件
g.HGroups.AddDef("产品")
g.VGroups.AddDef("日期",
DateGroupEnum.Year,
"{0}年")
g.VGroups.AddDef("日期",
"{0}月")
g.Totals.AddDef("数量",
"数量")
g.FromServer
= True
'g.Filter = "日期 > #8/1/2018#" '根据需要设置统计条件
g.Build()
DataTables("订单").LoadFilter
= Filter '恢复加载条件
MainTable =
Tables("统计表1")
或者:
Dim
g As
New CrossTableBuilder("统计表1",
DataTables("订单"))
Dim
Top As
String = DataTables("订单").LoadTop
DataTables("订单").LoadTop
= ""
g.HGroups.AddDef("产品")
g.VGroups.AddDef("日期",
DateGroupEnum.Year,
"{0}年")
g.VGroups.AddDef("日期",
"{0}月")
g.Totals.AddDef("数量",
"数量")
g.FromServer
= True
g.Build()
DataTables("订单").LoadTop
= Top
MainTable =
Tables("统计表1")