以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  SQLCrossTableBuilder按日期统计时有点小问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=17768)

--  作者:reachtone
--  发布时间:2012/3/23 15:58:00
--  SQLCrossTableBuilder按日期统计时有点小问题

Dim g As New SQLCrossTableBuilder("统计表","明细数据")
g.C
g.HGroups.AddDef("日期", DateGroupEnum.None)
g.VGroups.AddDef("部门")
g.Totals.AddDef("数量", "数量")
g.VerticalTotal = True
g.Build()
MainTable = Tables("统计表")

 

重点在标出红线的那行代码,只要统计垂直汇总值,日期就变成这样了(取消此行正常!):


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


--  作者:狐狸爸爸
--  发布时间:2012/3/23 16:01:00
--  

改为用汇总模式吧:

 

Dim g As New SQLCrossTableBuilder("统计表","明细数据")
g.HGroups.AddDef("日期", DateGroupEnum.None)
g.VGroups.AddDef("部门")
g.Totals.AddDef("数量", "数量")
g.Subtotal = True
g.Build()
MainTable = Tables("统计表")


--  作者:reachtone
--  发布时间:2012/3/23 16:23:00
--  
以下是引用狐狸爸爸在2012-3-23 16:01:00的发言:

改为用汇总模式吧:

 

Dim g As New SQLCrossTableBuilder("统计表","明细数据")
g.HGroups.AddDef("日期", DateGroupEnum.None)
g.VGroups.AddDef("部门")
g.Totals.AddDef("数量", "数量")
g.Subtotal = True
g.Build()
MainTable = Tables("统计表")

呵呵,生成汇总模式也不错,还可以展开目录树分级查看。如果用代码怎么写(打开目录树和关闭目录树)?


--  作者:狐狸爸爸
--  发布时间:2012/3/23 16:43:00
--  

基本功能演示文件中就有:

 

 

Dim t As Table = Tables("订单")
Dim g As Subtotalgroup
t.StopRedraw()
t.SubtotalGroups.Clear()
t.GroupAboveData = True
t.TreeVisible = True
t.SpillNode = True

g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "客户"
g.TotalOn = "数量,金额"
g.Caption = "{0} 小计"
t.SubtotalGroups.Add(g)

g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "产品"
g.TotalOn = "数量,金额"
g.Caption = "{0} 合计"
t.SubtotalGroups.Add(g)

g = New Subtotalgroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "*"
g.TotalOn = "数量,金额"
g.Caption = "总计"
t.SubtotalGroups.Add(g)

t.Subtotal()
t.Grid.Tree.Show(1)
t.Grid.Tree.Show(0)
t.Grid.Rows(2).Node.Expanded = True
t.Grid.Rows(3).Node.Expanded = True
t.ResumeRedraw()


--  作者:reachtone
--  发布时间:2012/3/26 14:11:00
--  
一楼问题仍然无解,对于通过BuildDataSource方法生成的统计结果,汇总模式无效。还是修正一下吧。。
--  作者:狐狸爸爸
--  发布时间:2012/3/26 14:14:00
--  

绑定到Table控件之后,直接用代码生成汇总模式即可:


Tables("窗口1.Table1") = xxx.BuildDataSource
Dim t As Table = Tables("窗口1.Table1")
Dim g As SubtotalGroup
t.SubtotalGroups.Clear()
\'定义客户分组
g = New SubtotalGroup \'定义一个新的分组
g.Aggregate = AggregateEnum.Sum \'统计类型为求和
g.GroupOn = "客户" \'分组列为客户
g.TotalOn = "数量,金额" \'统计数量和金额列
g.Caption = "{0} 小计" \'设置标题
t.SubtotalGroups.Add(g) \'加到分组集合中
\'定义产品分组
g = New SubtotalGroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "产品"
g.TotalOn = "数量,金额"
g.Caption = "{0} 小计"
t.SubtotalGroups.Add(g)
\'定义总计分组
g = New SubtotalGroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "*" \'注意总计分组用符号*表示。
g.TotalOn = "数量,金额"
g.Caption = "总计"
t.SubtotalGroups.Add(g)
t.Subtotal() \'生成汇总模式


--  作者:reachtone
--  发布时间:2012/3/26 14:23:00
--  

晕,就为了日期的显示问题,要多写这么多代码,不必要吧?

能不能改一下SQLCrossTableBuilder,日期列就只按Date统计?


--  作者:狐狸爸爸
--  发布时间:2012/3/26 14:25:00
--  

呵呵,帖子已经收藏,有空再看了。

[此贴子已经被作者于2012-3-26 14:26:02编辑过]

--  作者:reachtone
--  发布时间:2012/3/26 14:42:00
--  

SQLCrossTableBuilder最终也都是通过生成sql语句完成统计的,转换一下日期的类型应该是很简单的事。

在没解决之前,只好先不使用VerticalTotal属性了,自己通过代码增加合计行。


--  作者:狐狸爸爸
--  发布时间:2012/3/26 14:47:00
--  

问题没有表面这么简单的,这个本来是日期型,要垂直汇总后,只能改为字符型,因为最后一行“合计”两个字不是日期型。

就用代码生成汇总模式吧。