以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- [求助]关于多表合并统计的代码问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=79561)
|
-- 作者:yumo123
-- 发布时间:2016/1/4 23:34:00
-- [求助]关于多表合并统计的代码问题
我把现金日记账 和 银行日记账 进行交叉统计 然后 合并一个统计表 为什么窗口预览的时候提示错误?
请问代码哪里错了
Dim bd1 As New CrossTableBuilder("统计表1", DataTables("现金日记账")) Dim dt1 As fxDataSource bd1.HGroups.AddDef("摘要_类型") bd1.VGroups.AddDef("时间", DateGroupEnum.Year, "{0}年") bd1.VGroups.AddDef("时间", "{0}月") bd1.Totals.AddDef("收入", "现金收入") bd1.Totals.AddDef("支出", "现金支出") bd1.VerticalTotal = True bd1.FromServer = True dt1 = bd1.BuildDataSource()
Dim bd2 As New CrossTableBuilder("统计表2",DataTables("银行日记账")) Dim dt2 As fxDataSource bd2.HGroups.AddDef("摘要_类型") bd2.VGroups.AddDef("时间", DateGroupEnum.Year, "{0}年") bd2.VGroups.AddDef("时间", "{0}月") bd2.Totals.AddDef("收入", "银行收入") bd2.Totals.AddDef("支出", "银行支出") bd2.VerticalTotal = True bd2.FromServer = True dt2 = bd2.BuildDataSource()
dt1.Combine("摘要_类型",dt2,"摘要_类型") \'将销售统计数据组合到进货统计数据 Tables("日记账_Table1").DataSource = dt1 \'将统计结果绑定到Table With DataTables("日记账_Table1").DataCols \'用表达式列计算库存数据 .Add("收入",Gettype(Double), "IsNull([现金收入],0) + IsNull([银行收入],0)") .Add("支出",Gettype(Double), "IsNull([现金支出],0) + IsNull([银行支出],0)") End With
还有个问题,图中为什么中间多出一个为空的列?代码里面没有这一列啊~~~谢谢~~盼解答
此主题相关图片如下:360反馈意见截图16421106999290.png
此主题相关图片如下:360反馈意见截图16490128215705.png
|
-- 作者:大红袍
-- 发布时间:2016/1/5 9:10:00
--
交叉统计,生成的列的名字,并不是你看到的名字,参考
http://www.foxtable.com/help/topics/0193.htm
|
-- 作者:大红袍
-- 发布时间:2016/1/5 9:12:00
--
你可以循环所有列,添加到字典再引用
Dim dic As new Dictionary(of String, String)
For Each c As Col In Tables("日记账_Table1").cols
dic.add(c.Caption, c.name)
Next
msgbox(dic("看到的列名"))
[此贴子已经被作者于2016/1/5 9:12:10编辑过]
|
-- 作者:大红袍
-- 发布时间:2016/1/5 9:13:00
--
为空的情况,就加上筛选
bd1.Filter = "时间 is not null"
|
-- 作者:yumo123
-- 发布时间:2016/1/5 10:00:00
--
谢谢袍哥热心帮忙。
我知道这个.Add("收入",Gettype(Double), "IsNull([现金收入],0) + IsNull([银行收入],0)") 这段代码里的的【现金收入】 和 【银行收入】的列名不对,少了前面的时间表头,但是这个临时表是通过HGroups. 和vGroups.花出来的表头,我就不知道应该如何写这个列名。。
|
-- 作者:大红袍
-- 发布时间:2016/1/5 10:00:00
--
看2、3、4楼,不会做上传实例
|
-- 作者:yumo123
-- 发布时间:2016/1/5 10:18:00
--
看了半天还是没弄明白,麻烦您了
|
-- 作者:大红袍
-- 发布时间:2016/1/5 10:28:00
--
Dim bd1 As New CrossTableBuilder("统计表1", DataTables("现金日记账")) Dim dt1 As fxDataSource bd1.HGroups.AddDef("摘要_类型") bd1.VGroups.AddDef("时间", DateGroupEnum.Year, "{0}年") bd1.VGroups.AddDef("时间", "{0}月") bd1.Totals.AddDef("收入", "现金收入") bd1.Totals.AddDef("支出", "现金支出") bd1.VerticalTotal = True bd1.FromServer = True bd1.Filter = "时间 is not null" dt1 = bd1.BuildDataSource()
Dim bd2 As New CrossTableBuilder("统计表2",DataTables("银行日记账")) Dim dt2 As fxDataSource bd2.HGroups.AddDef("摘要_类型") bd2.VGroups.AddDef("时间", DateGroupEnum.Year, "{0}年") bd2.VGroups.AddDef("时间", "{0}月") bd2.Totals.AddDef("收入", "银行收入") bd2.Totals.AddDef("支出", "银行支出") bd2.VerticalTotal = True bd2.FromServer = True bd2.Filter = "时间 is not null" dt2 = bd2.BuildDataSource()
dt1.Combine("摘要_类型",dt2,"摘要_类型") \'将销售统计数据组合到进货统计数据 Tables("日记账_Table1").DataSource = dt1 \'将统计结果绑定到Table
With DataTables("日记账_Table1").DataCols \'用表达式列计算库存数据 .Add("收入",Gettype(Double)) .Add("支出",Gettype(Double)) End With
For Each r As Row In Tables("日记账_Table1").Rows Dim sum1 As Double = 0 Dim sum2 As Double =0 For Each c As Col In Tables("日记账_Table1").Cols If c.Caption Like "*_现金收入*" Then sum1 += r(c.name) ElseIf c.Caption Like "*_现金支出*" Then sum2 += r(c.name) ElseIf c.Caption Like "*_银行收入*" Then sum1 += r(c.name) ElseIf c.Caption Like "*_银行支出*" Then sum2 += r(c.name) End If Next r("收入") = sum1 r("支出") = sum2 Next
|
-- 作者:yumo123
-- 发布时间:2016/1/5 10:34:00
--
谢谢袍哥,原来是要加*_
|
-- 作者:yumo123
-- 发布时间:2016/1/5 10:50:00
--
袍哥 ,如果这个代码修改成 只直接按时间计算 现金银行的合计结果 不要前面的现金 银行 列 应该如何改啊~~~
此主题相关图片如下:360反馈意见截图1652082890108116.png
|