以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 如何动态增加列并按要求统计? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=33038) |
-- 作者:zerov -- 发布时间:2013/5/12 14:56:00 -- 如何动态增加列并按要求统计? 有三表,《回款表》、《进度应收》、《开票》,三表都可通过“合同编号”列关联(但没关联),都有金额、日期列,随着项目进展,会不断增加日期值,如何动态生成下图的统计表:即按月统计相关表并汇总到一个临时表,用combin做了好久,一直没成功。 主要难在动态增加列,如本月是201305,下月就要统计到201306了,再下月就要统计到201307,通过窗口按钮统计到一个临时表中
|
-- 作者:zerov -- 发布时间:2013/5/12 20:17:00 -- 刚做了个简单的例子,总和能统计出来,就是不知按所有的月份动态增加,哪位大师帮忙看看。 |
-- 作者:zerov -- 发布时间:2013/5/12 21:48:00 -- 用combin不能动态增加月份进行统计,代码如下:Dim bd1 As New GroupTableBuilder("统计表1",DataTables("收款")) Dim dt1 As fxDataSource bd1.Groups.AddDef("项目名称") \'根据型号分组 bd1.Groups.AddDef("月份","收款_月份") \'根据型号分组 bd1.Totals.AddDef("金额","收款_金额") \'对金额进行统计 dt1 = bd1.BuildDataSource() Dim bd2 As New GroupTableBuilder("统计表2",DataTables("应收")) Dim dt2 As fxDataSource bd2.Groups.AddDef("项目名称") \'根据型号分组 bd2.Groups.AddDef("月份","应收_月份") \'根据型号分组 bd2.Totals.AddDef("金额","应收_金额") \'对金额进行统计 dt2 = bd2.BuildDataSource() Dim bd3 As New GroupTableBuilder("统计表3",DataTables("开票")) Dim dt3 As fxDataSource bd3.Groups.AddDef("项目名称") \'根据型号分组 bd3.Groups.AddDef("月份","开票_月份") \'根据型号分组 bd3.Totals.AddDef("金额","开票_金额") \'对金额进行统计 dt3 = bd3.BuildDataSource() dt1.Combine("项目名称",dt2,"项目名称") \'将销售统计数据组合到进货统计数据 dt1.Combine("项目名称",dt3,"项目名称") \'将退货统计数据组合到进货统计数据 Tables("窗口2_table1").DataSource =dt1
|
-- 作者:zerov -- 发布时间:2013/5/12 22:14:00 -- 如何将月份移到垂直统计列呢?(即每个项目只有唯一一行) |
-- 作者:zerov -- 发布时间:2013/5/12 22:34:00 -- 基本成功,一个人慢慢研究的感觉真的很好,感谢UHUA老师,要会举一反三,把COMBINE代码中的GROUPTABLEBULID改为CROSS,就行了,只不过,显示不是很友善,没有多层表头,还得高人指点指点: 效果如下: Dim bd1 As new CrossTableBuilder("统计表1",DataTables("收款")) Dim dt1 As fxDataSource bd1.hGroups.AddDef("项目名称") \'根据型号分组 bd1.vGroups.AddDef("月份","收款_月份") \'根据型号分组 bd1.Totals.AddDef("金额","收款_金额") \'对金额进行统计 dt1 = bd1.BuildDataSource() Dim bd2 As New crossTableBuilder("统计表2",DataTables("应收")) Dim dt2 As fxDataSource bd2.hGroups.AddDef("项目名称") \'根据型号分组 bd2.vGroups.AddDef("月份","应收_月份") \'根据型号分组 bd2.Totals.AddDef("金额","应收_金额") \'对金额进行统计 dt2 = bd2.BuildDataSource() Dim bd3 As New crossTableBuilder("统计表3",DataTables("开票")) Dim dt3 As fxDataSource bd3.hGroups.AddDef("项目名称") \'根据型号分组 bd3.vGroups.AddDef("月份","开票_月份") \'根据型号分组 bd3.Totals.AddDef("金额","开票_金额") \'对金额进行统计 dt3 = bd3.BuildDataSource() dt1.Combine("项目名称",dt2,"项目名称") \'将销售统计数据组合到进货统计数据 dt1.Combine("项目名称",dt3,"项目名称") \'将退货统计数据组合到进货统计数据 dt1.show("统计表1") [此贴子已经被作者于2013-5-12 22:35:15编辑过]
|
-- 作者:don -- 发布时间:2013/5/12 23:47:00 -- Dim dt1,dt2,dt3 As fxDataSource Dim dts As fxDataSource() ={dt1,dt2,dt3} Dim v1 As String() ={"收款","应收","开票"} Dim g As CrossTableBuilder Dim n1 As Integer Dim s1,s2,SQL As String s2 =" Union All Select 项目名称,金额 From{@}" For Each s1 In v1 g = New CrossTableBuilder("统计", DataTables(s1)) g.HGroups.AddDef("项目名称") g.VGroups.AddDef("日期", DateGroupEnum.Year, s1 & "_{0}年") g.VGroups.AddDef("日期", "{0}月") g.Totals.AddDef("金额", "金额") g.HorizontalTotal = True dts(n1) = g.BuildDataSource() SQL+ = s2.replace("@",s1) n1=n1+1 Next Dim g1 As New GroupTableBuilder("统计",SQL.Substring(11),"") g1.Groups.AddDef("项目名称") g1.Totals.AddDef("金额","总计") dt1 = g1.BuildDataSource() Dim nns As String = "项目名称" dts(0).Combine(nns,dts(1),nns) dts(0).Combine(nns,dts(2),nns) dts(0).Combine(nns,dt1,nns) Dim t1 As Table = Tables("窗口2_table1") t1.DataSource =dts(0) With t1.DataTable .DataCols("合计").Caption = "收款_小计" .DataCols("合计1").Caption = "应收_小计" .DataCols("合计2").Caption = "开票_小计" .BuildHeader() End With
|
-- 作者:zerov -- 发布时间:2013/5/13 7:11:00 -- 回复:(don)Dim dt1,dt2,dt3 As fxDataSourceDim dt... 谢谢指点,完美解决。 再请教一个问题:为什么我将这段代码中的窗口2改窗口3,就报错呢?(窗口3同样有按钮与table1)
|
-- 作者:zerov -- 发布时间:2013/5/13 7:26:00 -- 将此例移到其它项目,出现下面错误,估计哪儿做错了? |
-- 作者:don -- 发布时间:2013/5/13 11:23:00 -- 如你採用外部數據源,需要指出數據源,這應該不用人家幫你的,否則還是認真看幾次幫助,弄清原理才是王道! Dim g1 As New GroupTableBuilder("统计",SQL.Substring(11),"")
|
-- 作者:zerov -- 发布时间:2013/5/13 12:26:00 -- 回复:(don)如你採用外部數據源,需要指出數據源,這應... 谢谢大师指点,谨记您的教诲! |