以文本方式查看主题

-  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


按钮2代码: 

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
--  

做个简单例子发上来说话。