以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]RaiseDataColChanged的问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=26209) |
-- 作者:chnfo -- 发布时间:2012/11/27 11:05:00 -- [求助]RaiseDataColChanged的问题 材料库存问题 。 有一个入库表,及它的关联表入库表.入库明细。入库表的金额=其明细的金额合计(不用表达式计算) 入库表.入库明细的datacolchanged中有计算明细金额及重置入库表的代码 select case e.datacol.name case "数量",“单价” e.datarow("金额") = e.datarow("数量")*e.datarow("单价") DataTables("入库表").DataCols("编号").RaiseDataColChanged() end select 设计一个选择材料目录的模式窗口,批量向入库表.入库明细中添加数据。 现在批量添加数据已经完成,问题出在计算入库明细的金额、以及入库表的金额合计上。 从窗口选择了材料并输入了材料的入库数量、单价之后,点添加按钮,关闭窗口,在入库表.入库明细的界面上,材料是加上了,但金额并不执行计算,手工去选择“数量”或“单价”列,重置,才会计算明细金额及入库表的金额合计 于是去窗口中的BeforeClose事件中,增加代码 Tables("
入库表.入库明细 ").Cols("数量").DataCol.RaiseDataColChanged() 这样,倒是可以在关闭窗口之后,金额自动计算了。 新问题出现:即使我这次只增加了一种材料,点了窗口的关闭按钮,总有那么六七秒钟,界面呈假死状态,把这段代码放到窗口的AfterClose事件中,仍然一样。 请教:是本身重置就需要这么长时间,还是在哪里的应用出了问题? |
-- 作者:狐狸爸爸 -- 发布时间: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 -- 发布时间: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 -- 发布时间:2012/11/27 15:06:00 -- 贴出 入库表 的代码,可能是循环调用导致假死了。 |
-- 作者:chnfo -- 发布时间: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编辑过]
|