Foxtable(狐表)用户栏目专家坐堂 → [求助]RaiseDataColChanged的问题


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

主题:[求助]RaiseDataColChanged的问题

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


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]RaiseDataColChanged的问题  发帖心情 Post By:2012/11/27 11:05:00 [只看该作者]

材料库存问题 。

有一个入库表,及它的关联表入库表.入库明细。入库表的金额=其明细的金额合计(不用表达式计算)
入库表.入库明细的datacolchanged中有计算明细金额及重置入库表的代码
select case e.datacol.name
case "数量",“单价”
        e.datarow("金额") = e.datarow("数量")*e.datarow("单价")
        DataTables("入库表").DataCols("编号").RaiseDataColChanged()
end select


设计一个选择材料目录的模式窗口,批量向入库表.入库明细中添加数据。
现在批量添加数据已经完成,问题出在计算入库明细的金额、以及入库表的金额合计上。

从窗口选择了材料并输入了材料的入库数量、单价之后,点添加按钮,关闭窗口,在入库表.入库明细的界面上,材料是加上了,但金额并不执行计算,手工去选择“数量”或“单价”列,重置,才会计算明细金额及入库表的金额合计

于是去窗口中的BeforeClose事件中,增加代码
Tables(" 入库表.入库明细 ").Cols("数量").DataCol.RaiseDataColChanged()

这样,倒是可以在关闭窗口之后,金额自动计算了。

新问题出现:即使我这次只增加了一种材料,点了窗口的关闭按钮,总有那么六七秒钟,界面呈假死状态,把这段代码放到窗口的AfterClose事件中,仍然一样。

请教:是本身重置就需要这么长时间,还是在哪里的应用出了问题?



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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/11/27 11:47:00 [只看该作者]

关于卡死,是你这个代码的问题

 

 

select case e.datacol.name
    case "数量",“单价”
         e.datarow("金额") = e.datarow("数量")*e.datarow("单价")
         DataTables("入库表").DataCols("编号").RaiseDataColChanged()
end select
 
应该改为:
 
select case e.datacol.name
    case "数量",“单价”
         e.datarow("金额") = e.datarow("数量")*e.datarow("单价")
         Dim pr As DataRow = e.Datarow.GetParentRow("入库表")
         if pr Isnot Nothing then
              DataTables("入库表").DataCols("编号").RaiseDataColChanged(pr)
         End if
end select
 

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


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2012/11/27 14:43:00 [只看该作者]

这个我明白。

但是我的入库表总共才只有7行而已,即使不用下面这个判断,应当也会执行很快的吧。
Dim pr As DataRow = e.Datarow.GetParentRow("入库表")
         if pr Isnot Nothing then
              DataTables("入库表").DataCols("编号").RaiseDataColChanged(pr)
         End if

难道是帮助里提到的,循环重置的问题?
[此贴子已经被作者于2012-11-27 14:56:08编辑过]

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2012/11/27 15:06:00 [只看该作者]

 贴出 入库表 的代码,可能是循环调用导致假死了。

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


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2012/11/27 15:27:00 [只看该作者]

正如狐爸所言。

select case e.datacol.name
    case "数量",“单价”
         e.datarow("金额") = e.datarow("数量")*e.datarow("单价")
         DataTables("入库表").DataCols("编号").RaiseDataColChanged()
end select

这一段里面,从功能上来讲,应当是实现了。
但重置入库表时,是重置了所有的表,而每一行数据的重置,都可能会导致入库表重新重置。从而导致重复计算。
如果只重置与关联表相关的行,速度上就会快很多。

实际测试,从窗口中添加20行数据,界面数据刷新瞬时完成,应当不会超过一秒,我感觉足够快了。
[此贴子已经被作者于2012-11-27 15:28:13编辑过]

 回到顶部