以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]CrossTableBuilder (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=128732) |
||||
-- 作者:blsu33 -- 发布时间:2018/12/13 20:13:00 -- [求助]CrossTableBuilder 老师 这段代码MessageBox.Show(1) 之前 就出现一个如下提示,没看明白为什么,其中,SQL语言是没问题的,测试成功 Dim sql As String = "Select numbers,jodate,eveid,eveidname,evinvoiceid,submiterid,submiteridname,remark,doctype,doctypename,sum(amount) As [totalamount],count(numbers) As [rowcount] Fr om {pm0102} Group By numbers,jodate,eveid,eveidname,evinvoiceid,submiterid,submiteridname,remark,doctype,doctypename" Dim g As New CrossTableBuilder("统计表1",sql) g.HGroups.AddDef("numbers") g.HGroups.AddDef("submiterid") g.HGroups.AddDef("cheks") g.VGroups.AddDef("numbers") g.Totals.AddDef("totalamount", "totalamount", True) g.OrderByTotal = True g.HorizontalTotal = True g.VerticalTotal = True g.Subtotal = True g.SubtotalLevel = 0 \'只生成总计行 g.Build() bxmx.Table.DataSource =g.BuildDataSource() MessageBox.Show(1) Dim t As Table = bxmx.Table Dim g1 As Subtotalgroup \'t.SubtotalGroups.Clear() t.GroupAboveData = False t.TreeVisible = False t.SpillNode = False g1 = New Subtotalgroup g1.Aggregate = AggregateEnum.Sum g1.GroupOn = "numbers" Dim str As String For Each c As DataCol In t.DataTable.DataCols If c.name<>"numbers" Then str &= c.name & "," \'对数量和金额进行统计 End If Next g1.TotalOn=str.TrimEnd(",") g1.Caption = "{0} 小计" t.SubtotalGroups.Add(g1) t.Subtotal() |
||||
-- 作者:blsu33 -- 发布时间:2018/12/13 21:03:00 -- 顶下 |
||||
-- 作者:有点甜 -- 发布时间:2018/12/13 21:06:00 -- 红色代码删除
\'g.Build()
bxmx.Table.DataSource =g.BuildDataSource()
|
||||
-- 作者:blsu33 -- 发布时间:2018/12/13 21:16:00 --
|
||||
-- 作者:blsu33 -- 发布时间:2018/12/13 21:16:00 -- 老师 烦您您给看下 窗口1 [此贴子已经被作者于2018/12/13 21:16:33编辑过]
|
||||
-- 作者:有点甜 -- 发布时间:2018/12/13 21:26:00 -- 以下是引用blsu33在2018/12/13 21:16:00的发言:
老师 烦您您给看下 窗口1 [此贴子已经被作者于2018/12/13 21:16:33编辑过]
窗口1没问题,请说明如何测试,有什么问题? |
||||
-- 作者:blsu33 -- 发布时间:2018/12/13 21:29:00 --
|
||||
-- 作者:有点甜 -- 发布时间:2018/12/13 21:41:00 -- 应该是bug
Dim bxmx As WinForm.Table = e.Form.Controls("Table1") Dim g As New CrossTableBuilder("统计表1",dt) |
||||
-- 作者:blsu33 -- 发布时间:2018/12/13 21:53:00 -- 的确 按照帮助文档做的 楼上的 没啥问题 按照帮助文档做的 上面的方法并不是一个高效的方法,假定有10万个订单,上面的方法会将10万行加载到FoxTable再统计,效率极低;如果是100万行呢?
那么后果就只有一个:系统崩溃。 其实不管是GroupTableBuilder还是CrossTableBuilder,都可以直接使用Select语句作为统计数据来源。 Dim sql As String = "Select 产品名称,数量,日期 FR OM
{订单} INNER JOIN {产品} ON {订单}.产品ID = {产品}.产品ID" 不仅代码更为简洁, 效率更有天壤之别。 上述代码的关键在于: Dim b As New CrossTableBuilder("统计表1",sql, "Sale") 第一个参数指定统计表名称,第二个参数指定Select语句,第三个参数指定数据源名称。 如果是内部数据源,代码为: Dim b As New CrossTableBuilder("统计表1",sql) |
||||
-- 作者:blsu33 -- 发布时间:2018/12/13 22:08:00 -- 老师 , 要想 获取 8楼的 Dim bxmx As WinForm.Table = e.Form.Controls("Table1") bxmx 表控件 对应的datatable 统计表1 好像不成功 就是 不能这么写 bxmx.table.datatable |