老大,现在有两个方向
第一,就是一次性生成临时表,然后填充数据,代码如下:
Dim dtb As New DataTableBuilder("统计")
Dim StartDate As Date = #5/1/2010# '起始日期
Dim Count As Integer = (#01/01/2011# - StartDate).TotalDays '计算间隔天数
dtb.AddDef("分类码", GetType(String), 12)
dtb.AddDef("分类名称", GetType(String), 100)
For i As Integer = 0 To Count '增加日期列
dtb.AddDef("dc" & i, GetType(Double), "", Format(StartDate.AddDays(i),"yyyy-MM-dd"))
Next
dtb.AddDef("合计", GetType(Double))
dtb.Build()
tables("统计").visible=false
tables("aaa_table1").datasource=dtb.BuildDataSource()
'开始填充数据
dim f As New Filler
f.SourceTable = DataTables("class")
f.SourceCols = "classcode,classname"
f.DataTable = DataTables("aaa_table1")
f.DataCols = "分类码,分类名称"
f.Fill()
但是前提是不能使用外部数据源填充,只能变通通过将外部表aam转变为内部表class,才能实现。这种方法速度很快的
第二,就是按照您的方法先填充前两列数据,然后增加临时列,代码如下:
Tables("aaa_table1").fill("select classcode as '分类码',classname as '分类名称' from aam00000","erp",true)
Dim StartDate As Date = #5/1/2010# '起始日期
Dim Count As Integer = (#8/10/2010# - StartDate).TotalDays '计算间隔天数
For i As Integer = 0 To Count '增加日期列
DataTables("aaa_table1").DataCols.Add("dc" & i, GetType(Double), "", Format(StartDate.AddDays(i),"yyyy-MM-dd"))
Next
这样实现了从外部数据源填充后再增加列的效果,但是速度就比第一种方法慢了许多。
真应了那句老话,鱼与熊掌不可兼得。
现在还有一个问题,就是生成日期标题的列后,如何向对应的单元格中填入从后台统计出的结果,来实现交叉统计的结果?
不要误会,您该问了,为什么不使用SQLCrossTableBuilder,那多方便,是因为SQLCrossTableBuilder生成这种统计表后,元数据表如果日期列
不连续,那么统计表的列标题就不会连续显示,除非老大将这个方法改进一下,如果是日期列作为列标题显示,设置可选参数,连续日期统计还是如实日期统计
[此贴子已经被作者于2010-5-28 8:42:39编辑过]