以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于数量金额反算问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=54560)

--  作者:magangzmc
--  发布时间:2014/7/30 16:56:00
--  关于数量金额反算问题

假如有数量、单价、金额三个字段,当修改数量的值后时候,金额=数量*单价

当修改单价的值后时候,金额=数量*单价

当修改金额的值后时候,单价=金额/数量

 

我在DataColChanged事件中代码如下

Select Case e.DataCol.Name
    Case "iQuantity"
        e.DataRow("iPrice")=e.NewValue * e.DataRow("iUnitPrice")
    Case "iUnitPrice"
        e.DataRow("iPrice")=e.NewValue * e.DataRow("iQuantity")
    Case "iPrice"
        e.DataRow("iUnitPrice")=e.NewValue / e.DataRow("iQuantity")
End Select

 

当我修改金额的时候,结果会由于重复反算导致与我输入的金额数值有误差,如:

输入数量:7,单价为空,输入金额:20

 

结果就会变成:

数量:7,单价:2.86(计算得出),金额:20.02(由于单价字段值改变了,重新计算金额)

 

如何避免重复计算呀?


--  作者:有点甜
--  发布时间:2014/7/30 17:09:00
--  
Select Case e.DataCol.Name
    Case "iQuantity"
        If e.DataRow.Isnull("iPrice")  Then e.DataRow("iPrice")=e.NewValue * e.DataRow("iUnitPrice")
    Case "iUnitPrice"
        If e.DataRow.Isnull("iPrice") Then e.DataRow("iPrice")=e.NewValue * e.DataRow("iQuantity")
    Case "iPrice"
        If e.DataRow.Isnull("iUnitPrice") Then e.DataRow("iUnitPrice")=e.NewValue / e.DataRow("iQuantity")
End Select

--  作者:有点甜
--  发布时间:2014/7/30 17:10:00
--  

 或者

 

SystemReady = False
Select Case e.DataCol.Name
    Case "iQuantity"
        e.DataRow("iPrice")=e.NewValue * e.DataRow("iUnitPrice")
    Case "iUnitPrice"
        e.DataRow("iPrice")=e.NewValue * e.DataRow("iQuantity")
    Case "iPrice"
        e.DataRow("iUnitPrice")=e.NewValue / e.DataRow("iQuantity")
End Select
SystemReady = True