以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 窗口的同一table切换不用tablebuilder源的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=34751) |
-- 作者:jacksn -- 发布时间:2013/6/14 17:07:00 -- 窗口的同一table切换不用tablebuilder源的问题 窗口里有table(tb1),按钮1,按钮2.按钮1可以创建grouptablebuilder(gt1),并tb1.datasource=gt1.builddatasource(),gt1有个列rowA。同样按钮2创建了crosstablebuilder(ct2)并tb1.datasource=ct2.builddatasource(). ,Ct2有个列rowB 首次单击按钮1和按钮2都很正常。但当单击过1再单击2或单击过2再单击1就显示错误,分别显示“tb1不存在名为ROWA的列!“和
“tb1不存在名为ROWB的列!“ 求解! 是否table的source只能设置一次不能切换? 还是在设置之前要将上一次数据源”清零“? 按钮1代码: Dim g As New GroupTableBuilder("test001", DataTables("产生表")) g.Caption = "公司收入" g.Groups.AddDef("报告出具时间", DateGroupEnum.Year, "年") g.Groups.AddDef("报告出具时间", "月") g.Totals.AddDef("合同金额") g.Totals.AddDef("推广费") g.Totals.AddDef("实际收入") g.Decimals = 0 g.Filter = "SubString(Convert([报告出具时间],\'System.String\'),1,4)
> 2011" Dim t As Table = Tables("总表_table1") t.DataSource = g.BuildDatasource() Dim g1 As New Subtotalgroup \'定义一个新的分组 g1.Aggregate = AggregateEnum.Sum \'统计类型为求和 g1.GroupOn = "年" \'分组列 g1.TotalOn = "合同金额,推广费" \',实际收入" g1.Caption = "{0}
小计" \'设置标题 t.SubtotalGroups.Add(g1) t.subtotal Dim b As New
CrossTableBuilder("test003",DataTables("产生表")) b.HGroups.AddDef("报告出具时间",DateGroupEnum.Year,"年") \'添加日期列用于水平分组,按年分组 b.HGroups.AddDef("报告出具时间","月") \'添加日期列用于水平分组,按年分组 b.VGroups.AddDef("业务来源","业务来源_{0}") b.Totals.AddDef("实际收入")
\'添加数量列用于统计 \'b.Totals.AddDef("实际收入",AggregateEnum.Count,"项目数量")
b.Filter = "SubString(Convert([报告出具时间],\'System.String\'),1,4) > 2011 And not ([业务来源] = \'其他\' Or [业务来源] = \'其他来源\' Or [业务来源] = \'其他员工\' Or [业务来源] = \'业务部\')" b.Build Dim t As Table = Tables("总表_Table1") MainTable = t t.DataSource =
b.BuildDatasource() Dim g1 As New Subtotalgroup \'定义一个新的分组 g1.Aggregate =
AggregateEnum.Sum \'统计类型为求和 g1.GroupOn = "年" Dim stn As String Dim stns(t.Cols.Count - 3 ) As
String For i As Integer = 0 To t.Cols.Count - 3 stns (i) =
T.Cols(i+2).Name Next stn = String.Join(",",stns) g1.TotalOn = stn g1.Caption = "{0} 小计"
\'设置标题 t.SubtotalGroups.Add(g1) t.subtotal
[此贴子已经被作者于2013-6-14 17:25:47编辑过]
|
-- 作者:Bin -- 发布时间:2013/6/14 17:12:00 -- 你尝试数据源”清零“ 看看. 照道理是不需要的. 还不行 上个例子我分析一下.
|
-- 作者:jacksn -- 发布时间:2013/6/14 17:20:00 -- 问题是怎么”清零“呢? |
-- 作者:狐狸爸爸 -- 发布时间:2013/6/14 17:22:00 -- 这样看看:
tb1.StopRedraw() tb1.datasource = gtX.builddatasource() tb1.ResumeRedraw() |
-- 作者:Bin -- 发布时间:2013/6/14 17:24:00 -- tb1.datasource=nothing 看看. 实在不行还是上个例子吧. 按道理是不需要的直接赋值可以使用的. |
-- 作者:FoxMan -- 发布时间:2013/6/14 17:24:00 -- 主窗口或停靠窗口吧?要這樣的: tb1.Redraw =0 \'原代碼 tb1.Redraw =1
|
-- 作者:zaianda -- 发布时间:2013/6/14 17:28:00 -- LZ,麻烦你上例子吧或者贴代码吧。 |
-- 作者:jacksn -- 发布时间:2013/6/14 17:30:00 -- 我照狐狸爸爸的做了,情况依旧。显示是“tb1不存在名为“实际收入_1"的列”。奇怪了。我至多只有名为“实际收入”的列,没有“实际收入_1”的列啊!? |
-- 作者:jacksn -- 发布时间:2013/6/14 17:35:00 -- 我发现罪魁祸首是小计,就是这段: Dim g1 As New Subtotalgroup \'定义一个新的分组 g1.Aggregate = AggregateEnum.Sum \'统计类型为求和 g1.GroupOn = "年" \'分组列 g1.TotalOn = "合同金额,推广费" \',实际收入" g1.Caption = "{0} 小计" \'设置标题 t.SubtotalGroups.Add(g1) t.subtotal 把它去掉就没事了。但是何解呢? [此贴子已经被作者于2013-6-14 17:35:23编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2013/6/14 17:37:00 -- 做个简单例子发上来说话。 |