Foxtable(狐表)用户栏目专家坐堂 → 请教RaiseDataColChanged手工触发DataColChanged事件


  共有23335人关注过本帖树形打印复制链接

主题:请教RaiseDataColChanged手工触发DataColChanged事件

帅哥哟,离线,有人找我吗?
狐狸爸爸
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47480 积分:251289 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/2 9:22:00 [显示全部帖子]

以下是引用烟酒在2009-4-1 22:21:00的发言:

RaiseDataColChanged手工触发DataColChanged事件后再对某列对另外一个表格数据汇总,每次选择主表或者启动后,自动计算,但是好慢啊,要停10多秒钟时间不动。
请问下还有其它的方法吗?
对于跨表计算只能触发DataColChanged事件吗?
谢谢~


不要针对所有行触发,通常应该针对某一行,除非要重算所有数据。

下面是帮助中的一段话:

注意我们给RaiseDataColChanged参数:

DataTables("表A").DataCols("分类").RaiseDataColChanged(dr)

如果省略参数,将针对所有行的分类列触发DataColChanged事件,效率会低很多。

另外还需要检查一下代码,看看是否存在重复计算的问题,因为设置不当,效率差个100倍的情况,也是常见的。

[此贴子已经被作者于2009-4-2 9:27:45编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47480 积分:251289 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47480 积分:251289 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/2 14:35:00 [显示全部帖子]

用c版的代码,速度比楼主的提高100倍是保守估计,正常的话,应该是提高1000倍。

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47480 积分:251289 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/4/2 15:02:00 [显示全部帖子]

呵呵,这么简化不好,一般人看起来费力啊。

 回到顶部