以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  在DataColChanged使用以下代码就不会出错  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=28419)

--  作者:CMCC
--  发布时间:2013/1/28 22:48:00
--  在DataColChanged使用以下代码就不会出错

 在DataColChanged使用以下代码就不会出错

\'DataColChanged
Select Case e.DataCol.Name
Case "客户名称"
e.DataRow("投诉时间") = Date.now()
End Select

但如果在DataRowAdding使用以下代码

e.DataRow("投诉时间")  = Date.now()

就会提示。(注:有一列双精度列计算故障历时用。)

错误所在事件:表,投诉工单跟踪,DataColChanged
详细错误信息:
System.Reflection.TargetInvocationException: 调用的目标发生了异常。 ---> System.InvalidCastException: 从字符串“”到类型“Double”的转换无效。 ---> System.FormatException: 输入字符串的格式不正确。

--  作者:lin_hailun
--  发布时间:2013/1/29 8:41:00
--  
 经测试,不是这些代码的问题,应该是其余代码影响的。
--  作者:CMCC
--  发布时间:2013/1/29 16:09:00
--  
以下是引用lin_hailun在2013-1-29 8:41:00的发言:
 经测试,不是这些代码的问题,应该是其余代码影响的。

 是的,一直昨晚一直没找到问题点,今天再看一次终于发现了影响的代码(是一段时间计算代码),已经解决。

问题是:使用DataRowAdding的时候,生成的值滞后于公式计算的速度;而使用DataColChanged提前于公式计算的速度。因此使用DataRowAdding时会提示“从字符串“”到类型“Double”的转换无效”?


--  作者:CMCC
--  发布时间:2013/1/29 16:10:00
--  
或者说是优先级?
--  作者:lin_hailun
--  发布时间:2013/1/29 16:24:00
--  
 执行的顺序是这样的。

 新增一行->触发adding事件,执行代码,修改某列;暂停->触发changed事件,执行代码修改某值触发计算公式。

-------------

 如果问,先求公式,还是先执行changed,应该是先触发公式计算。