以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 表达式计算问题请教老师 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=28341) |
||||
-- 作者:mamuaiqing -- 发布时间:2013/1/26 0:31:00 -- 表达式计算问题请教老师 上传项目先~~~在表事件DataColChanged中输入以下代码,完成了金额合计列的计算
If e.DataCol.Name = "事项1金额" Then \'如果更改的是事项1金额列
想实现当事项1金额输入后再清除掉"金额合计"列的数值返回原先的数值,也就是重算"金额合计"列内容该怎么修改代码?请教老师
|
||||
-- 作者:lin_hailun -- 发布时间:2013/1/26 9:28:00 -- 方法一,用最初保存的值减去。 If e.DataCol.Name = "事项1金额" Then \'如果更改的是事项1金额列 If e.DataRow.IsNull("金额合计") Then \'金额合计是否为空 e.DataRow("事项1金额") = Nothing \'如果为空,则清除事项1金额 Else e.DataRow("金额合计") = e.DataRow.OriginalValue("金额合计") - e.DataRow("事项1金额") End If End If |
||||
-- 作者:lin_hailun -- 发布时间:2013/1/26 9:30:00 -- 方法二,加多一列表达式列,表达式等于两列相减,那就不用写代码了。因为原先的值,是不可以还原的,因为无从知道原先的值的是多少。 |
||||
-- 作者:mamuaiqing -- 发布时间:2013/1/26 17:39:00 -- 第一种代码不行,金额合计输入2000后,事项1金额输入100后,金额合计就变-100数值了
方法二可行,但在后面的操作就变麻烦了
学生考虑用 e.NewValue 跟 e.OldValue
的话代码是不是更加麻烦,要判断很多东西 |
||||
-- 作者:lin_hailun -- 发布时间:2013/1/26 17:44:00 -- 第一种可行,你输入金额列以后,记得保存一下这行或者这个单元格。也就是说,你必须明确你吧这个金额列作为一个定值了,才有所谓的累加累减的操作。 |
||||
-- 作者:lin_hailun -- 发布时间:2013/1/26 17:45:00 -- 第二种方法的话,也不会以后处理复杂,这个才是最正确的方法。在原有基础上累减是错误的。 |
||||
-- 作者:mamuaiqing -- 发布时间:2013/1/26 18:15:00 -- 最后改成在DataColChanging事件中输入下面的代码,感觉怪怪的,又想不出哪里怪了
If e.DataCol.Name = "事项1金额" Then \'如果更改的是事项1金额列 e.Cancel = True \'则取消更改 [此贴子已经被作者于2013-1-26 18:42:08编辑过]
|
||||
-- 作者:mamuaiqing -- 发布时间:2013/1/26 19:48:00 -- 以下是引用lin_hailun在2013-1-26 17:45:00的发言:
第二种方法的话,也不会以后处理复杂,这个才是最正确的方法。在原有基础上累减是错误的。 学生一直在纠结怪怪的原因,看了林老师说的可能就是这个问题,但变化的金额不单单这一列还有三列需要进行数值输入后进行判断再进行加减,最后再进行票据套打打印,而票据打印过程中合
计金额是只有一列的,如果进行四列数值判断后再选择哪一列的数值做为最后的合计金额,那样的代码变的很麻烦
麻烦林老师帮忙看下学生更改过的代码可行不,或者其它方法可以解决问题 |
||||
-- 作者:yuxin981 -- 发布时间:2013/1/27 17:35:00 -- |
||||
-- 作者:yuxin981 -- 发布时间:2013/1/27 17:36:00 -- 新来 初学 代码类的哪儿有更为详细的介绍? |