以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  关于DataColChanging代码事件  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=61951)

--  作者:youngling
--  发布时间:2014/12/22 23:11:00
--  关于DataColChanging代码事件

以下代码我放在DataColChanging里面,为什么起不到作用呢?

 

很简单的一个功能就是如果当前表的交货数量值发生变化(输入新值或进行了修改)导致了未交货数量<0,就提示"出货数量大于订单数量,请注意核实",如果库存数量<0,就提示出货数量大于库存数量,请修改出库数量或先完成入库操作。

 

未交货数量 = 订单数量 - 累计出货数量

库存数量来源于库存表

假设订单数量是90,累计出货数量0,库存数量50,本次交货数量95个,在新增行后输入交货数量95,应该提示 "出货数量大于订单数量,请注意核实",和出货数量大于库存数量,请修改出库数量或先完成入库操作。 但是没有任何提示,但是如果对交货数量进行修改就会出现这2个提示,这是为什么呢?

 

我的代码看了半天也没有发现错误呀!

 

请高手帮 我看下,谢谢了。

 

If e.DataCol.Name = "交货数量" Then
    If e.DataRow("未交货数量")  < 0 Then
        msgbox("出货数量大于订单数量,请注意核实")
        e.cancel=True
    End If
   
    If e.DataRow("库存数量")  < 0 Then
        msgbox("出货数量大于库存数量,请修改出库数量或先完成入库操作")
        e.cancel=True
        Return
    End If   
End If


--  作者:huangfanzi
--  发布时间:2014/12/22 23:20:00
--  
DataColChanging 某一列的内容发生变化前执行

If e.DataCol.Name = "交货数量" Then  》》》此时这个值95并没有输入系统
    If e.DataRow("未交货数量")  < 0 Then 》》》此时这个未交数量还是 90-0
        msgbox("出货数量大于订单数量,请注意核实")
        e.cancel=True
    End If

你应该用下面二个来做
 NewValue:  Object类型,表示新的值
OldValue:  Object类型,表示旧的值

我也是初学者,可能班门弄斧了,见笑!
[此贴子已经被作者于2014-12-22 23:20:32编辑过]

--  作者:有点甜
--  发布时间:2014/12/22 23:55:00
--  

If e.DataCol.Name = "交货数量" Then
    If e.DataRow("未交货数量") - e.NewValue  < 0 Then
        msgbox("出货数量大于订单数量,请注意核实")
        e.cancel=True

        Return
    End If
   
    If e.DataRow("库存数量") - e.NewValue  < 0 Then
        msgbox("出货数量大于库存数量,请修改出库数量或先完成入库操作")
        e.cancel=True
        Return
    End If   
End If