以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]临时表如何增加合计列与合计行 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=38695) |
||||
-- 作者:jnletao -- 发布时间:2013/8/4 18:35:00 -- [求助]临时表如何增加合计列与合计行 原代码如下 Dim dtb As New DataTableBuilder("输入") Dim scs As List(of String) = DataTables("表A").GetUniqueValues("","颜色") Dim cms As List(of String) = DataTables("表A").GetUniqueValues("","尺码") dtb.AddDef("颜色", Gettype(String), 16) For Each cm As String In cms dtb.AddDef(cm, Gettype(Integer), 16) Next Tables("窗口1_Table1").DataSource = dtb .BuildDataSource For Each sc As String In scs Dim rw As Row = Tables("窗口1_Table1").AddNew Dim rs As List(of DataRow) = DataTables("表A").Select("颜色 = \'" & sc & "\'") rw("颜色") = sc For Each r As DataRow In rs rw(r("尺码")) = r("数量") Next Next Tables("窗口1_Table1").AllowEdit = True 请问如何再增加一个 对 列的合计及对行的合计 [此贴子已经被作者于2013-8-4 18:43:38编辑过]
|
||||
-- 作者:jnletao -- 发布时间:2013/8/4 19:19:00 -- Totals.AddDef无效 试了Totals.AddDef无效, 好像DataTableBuilder 没有此方法. 大家有没有其它变通的方法也行.
|
||||
-- 作者:y2287958 -- 发布时间:2013/8/4 19:19:00 -- 为何不直接用交叉统计呢 |
||||
-- 作者:y2287958 -- 发布时间:2013/8/4 19:28:00 -- AfterLoad事件改为: Dim g As New CrossTableBuilder("统计表1", DataTables("表A")) g.HGroups.AddDef("颜色") g.VGroups.AddDef("尺码") g.Totals.AddDef("数量", "数量") g.HorizontalTotal = True g.VerticalTotal = True Tables("窗口1_Table1").DataSource = g.BuildDataSource
[此贴子已经被作者于2013-8-4 19:28:07编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2013/8/4 19:32:00 -- 对列的合计如下,在后面添加代码 \'添加合计行 Dim t As Table = Tables("窗口1_Table1") Dim ndr As Row = t.AddNew ndr(0) = "合计" For i As Integer = 1 To t.Cols.Count - 1 ndr(i) = t.Compute("sum(" & t.Cols(i).Name & ")") Next |
||||
-- 作者:有点甜 -- 发布时间:2013/8/4 19:40:00 -- 合计行,合计列代码,如下 Dim dtb As New DataTableBuilder("输入") Dim scs As List(of String) = DataTables("表A").GetUniqueValues("","颜色") Dim cms As List(of String) = DataTables("表A").GetUniqueValues("","尺码") dtb.AddDef("颜色", Gettype(String), 16) For Each cm As String In cms dtb.AddDef(cm, Gettype(Integer), 16) Next dtb.AddDef("合计", Gettype(Integer), 16) Tables("窗口1_Table1").DataSource = dtb .BuildDataSource For Each sc As String In scs Dim rw As Row = Tables("窗口1_Table1").AddNew Dim rs As List(of DataRow) = DataTables("表A").Select("颜色 = \'" & sc & "\'") rw("颜色") = sc Dim sum As Integer = 0 For Each r As DataRow In rs rw(r("尺码")) = r("数量") sum += r("数量") Next rw("合计") = sum Next Tables("窗口1_Table1").AllowEdit = True Dim t As Table = Tables("窗口1_Table1") Dim ndr As Row = t.AddNew ndr(0) = "合计" For i As Integer = 1 To t.Cols.Count - 1 ndr(i) = t.Compute("sum(" & t.Cols(i).Name & ")") Next |
||||
-- 作者:有点甜 -- 发布时间:2013/8/4 19:41:00 -- 可以了解下交叉统计 |
||||
-- 作者:jnletao -- 发布时间:2013/8/4 22:02:00 -- 以下是引用y2287958在2013-8-4 19:28:00的发言: AfterLoad事件改为: Dim g As New CrossTableBuilder("统计表1", DataTables("表A")) g.HGroups.AddDef("颜色") g.VGroups.AddDef("尺码") g.Totals.AddDef("数量", "数量") g.HorizontalTotal = True g.VerticalTotal = True Tables("窗口1_Table1").DataSource = g.BuildDataSource
[此贴子已经被作者于2013-8-4 19:28:07编辑过]
已试过.有效果,不过生成的表格不能即时编辑, Tables("窗口1_Table1").AllowEdit = True 后, 可编辑,不过合计不能实时变动 |
||||
-- 作者:有点甜 -- 发布时间:2013/8/4 22:48:00 -- 做好了,需要修改再说。
|
||||
-- 作者:jnletao -- 发布时间:2013/8/4 23:13:00 -- 还想请教一下,如何禁止 颜色列,合计列,与合计行被编辑, 另外,我的窗口大小有限,如果内容多时,要移动滚动条才看到合计 能不能单独把颜色列,合计列,合计行冻结.这样无论在何种情况都能实时看到颜色列,合计列,合计行 还有一种情况,如果任一单元格为空时,合计就不显示了.能不能把单元格为空的情况计为0,或把空自动变为0,即不允许出现空 ,再厚颜请教一个问题,对于此临时表的颜色与尺码,能不能排序. 比如, 黑白--->白黑;L,M,XL---->XL,M,L [此贴子已经被作者于2013-8-4 23:45:13编辑过]
|