以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 请教RaiseDataColChanged手工触发DataColChanged事件 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2264) |
-- 作者:烟酒 -- 发布时间:2009/4/1 22:21:00 -- 请教RaiseDataColChanged手工触发DataColChanged事件 RaiseDataColChanged手工触发DataColChanged事件后再对某列对另外一个表格数据汇总,每次选择主表或者启动后,自动计算,但是好慢啊,要停10多秒钟时间不动。 |
-- 作者:czy -- 发布时间:2009/4/2 2:10:00 -- 可以在当前表的DataColChanged事件中设置代码,对统计表进行实时计算,如果数据量很大,这个方法估计比在统计表中一次性计算要好。 |
-- 作者:狐狸爸爸 -- 发布时间:2009/4/2 9:22:00 -- 以下是引用烟酒在2009-4-1 22:21:00的发言:
RaiseDataColChanged手工触发DataColChanged事件后再对某列对另外一个表格数据汇总,每次选择主表或者启动后,自动计算,但是好慢啊,要停10多秒钟时间不动。
注意我们给RaiseDataColChanged参数: DataTables("表A").DataCols("分类").RaiseDataColChanged(dr) 如果省略参数,将针对所有行的分类列触发DataColChanged事件,效率会低很多。 [此贴子已经被作者于2009-4-2 9:27:45编辑过]
|
-- 作者:yangming -- 发布时间:2009/4/2 11:44:00 -- 我也学习学习,呵呵 |
-- 作者:烟酒 -- 发布时间:2009/4/2 13:47:00 -- 呵呵 但是我的汇总表里面之前已经有现成的数据了,只是在某列统计数据,我也是在当前表的DataColChanged事件中设置代码的,但是要手工触发,因为其它数据没有变化。谢谢czy 感谢老6指教。我的数据是需要行都要进行统计,因为这个统计表内的项目是后面明细表所有项目包含的,那么多数据我也不知道哪些数据行需要统计哪些不需要统计,所以我不得不触发所有行统计。 (这个汇总表的列也比较多,有58列,里面大部分是公示列,只有11列公式无法计算,需要代码进行计算。) 这是MainTableChanged内设置的: If MainTable Is Nothing Then Return End If If Maintable.Name = "工程量清单" Then DataTables("工程量清单").DataCols("清单编号").RaiseDataColChanged() End If 这是DataColChanged设置的: dim nius as new list(of String) Dim dr As DataRow = e.DataRow nius= DataTables("台帐").GetUniqueValues("", "清单内容") If e.DataCol.name="清单编号" then For Each niu As String In nius dr("田家屋场大桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'田家屋场大桥\'") dr("向家梁子大桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'向家梁子大桥\'") dr("牛王庙大桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'牛王庙大桥\'") dr("易家屋场大桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'易家屋场大桥\'") dr("月亮山大桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'月亮山大桥\'") dr("K28540天桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'K28+540车行天桥\'") dr("K29360天桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'K29+360车行天桥\'") dr("K28312涵洞_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'K28+312钢筋砼盖板涵\'") dr("K28605涵洞_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'K28+605钢筋砼盖板涵\'") dr("K29580涵洞_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'K29+580钢筋砼盖板涵\'") dr("增减数量")=DataTables("台帐").Compute("Sum(增减数量)", "[清单内容] = \'" & dr("清单编号") & "\'" ) next end if [此贴子已经被作者于2009-4-2 13:50:06编辑过]
|
-- 作者:czy -- 发布时间:2009/4/2 14:11:00 -- 没明白这里为何要用流程语句。 |
-- 作者:狐狸爸爸 -- 发布时间:2009/4/2 14:17:00 -- 这样会快100倍: If e.DataCol.name="清单编号" then dr("田家屋场大桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'田家屋场大桥\'") dr("向家梁子大桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'向家梁子大桥\'") dr("牛王庙大桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'牛王庙大桥\'") dr("易家屋场大桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'易家屋场大桥\'") dr("月亮山大桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'月亮山大桥\'") dr("K28540天桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'K28+540车行天桥\'") dr("K29360天桥_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'K29+360车行天桥\'") dr("K28312涵洞_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'K28+312钢筋砼盖板涵\'") dr("K28605涵洞_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'K28+605钢筋砼盖板涵\'") dr("K29580涵洞_变更后数量")=DataTables("台帐").Compute("Sum(变更后数量)", "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = \'K29+580钢筋砼盖板涵\'") dr("增减数量")=DataTables("台帐").Compute("Sum(增减数量)", "[清单内容] = \'" & dr("清单编号") & "\'" ) end if [此贴子已经被作者于2009-4-2 14:29:01编辑过]
|
-- 作者:czy -- 发布时间:2009/4/2 14:30:00 -- 这样试试能不能出正确结果? Dim dt As DataTable = DataTables("台帐") Dim dr As DataRow = e.DataRow Dim Str As String = "[清单内容] = \'" & dr("清单编号") & "\'" & "and [单位工程名称] = " If e.DataCol.name="清单编号" then dr("田家屋场大桥_变更后数量")=dt.Compute("Sum(变更后数量)", Str & "\'田家屋场大桥\'") dr("向家梁子大桥_变更后数量")=dt.Compute("Sum(变更后数量)", Str & "\'向家梁子大桥\'") dr("牛王庙大桥_变更后数量")=dt.Compute("Sum(变更后数量)", Str & "\'牛王庙大桥\'") dr("易家屋场大桥_变更后数量")=dt.Compute("Sum(变更后数量)", Str & "\'易家屋场大桥\'") dr("月亮山大桥_变更后数量")=dt.Compute("Sum(变更后数量)", Str & "\'月亮山大桥\'") dr("K28540天桥_变更后数量")=dt.Compute("Sum(变更后数量)", Str & "\'K28+540车行天桥\'") dr("K29360天桥_变更后数量")=dt.Compute("Sum(变更后数量)", Str & "\'K29+360车行天桥\'") dr("K28312涵洞_变更后数量")=dt.Compute("Sum(变更后数量)", Str & "\'K28+312钢筋砼盖板涵\'") dr("K28605涵洞_变更后数量")=dt.Compute("Sum(变更后数量)", Str & "\'K28+605钢筋砼盖板涵\'") dr("K29580涵洞_变更后数量")=dt.Compute("Sum(变更后数量)", Str & "\'K29+580钢筋砼盖板涵\'") dr("增减数量")=dt.Compute("Sum(增减数量)", "[清单内容] = \'" & dr("清单编号") & "\'" ) end if [此贴子已经被作者于2009-4-2 15:40:14编辑过]
|
-- 作者:狐狸爸爸 -- 发布时间:2009/4/2 14:35:00 -- 用c版的代码,速度比楼主的提高100倍是保守估计,正常的话,应该是提高1000倍。 |
-- 作者:don -- 发布时间:2009/4/2 14:51:00 -- 简化一下吧:
Ln = "田家屋场大桥,向家梁子大桥,牛王庙大桥,易家屋场大桥,月亮山大桥"
dr(Ln) = DataTables("台帐").Compute(gs,T) [此贴子已经被作者于2009-4-2 16:00:51编辑过]
|