Foxtable(狐表)用户栏目专家坐堂 → datacolchanged 与 datarowdeleting 的关系


  共有2926人关注过本帖树形打印复制链接

主题:datacolchanged 与 datarowdeleting 的关系

帅哥哟,离线,有人找我吗?
edisontsui
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1510 积分:9791 威望:0 精华:0 注册:2014/12/18 16:12:00
datacolchanged 与 datarowdeleting 的关系  发帖心情 Post By:2021/3/23 16:22:00 [只看该作者]

数据表“出入库”的 datacolchanged 有如下代码:
'自动更新采购单的收货数量
If e.DataCol.name = "入库数量" 
        Dim dr1 As DataRow  
        dr1 = DataTables("采购单").Find("物料编号 = '" & e.DataRow("物料编号") & "' And 采购单号 = '" & e.DataRow("采购单号") & "' And  采购单行号 = '" & e.DataRow("采购单行号") & "'")
        If dr1 IsNot Nothing 
            dr1("收货数量") =  dr1("收货数量") + e.DataRow("入库数量") - e.OldValue
        End If
End If

数据表“出入库”的 datarowdeleting 有如下代码:
'自动更新采购单的收货数量
If e.DataRow.isnull("采购单号") = True  
    Else
    Dim dr As DataRow = DataTables("采购单").find("采购单号 = '" & e.DataRow("采购单号") & "' And 采购单行号 = '" & e.DataRow("采购单行号") & "' And 物料编号 = '" & e.DataRow("物料编号") & "'")
    If dr IsNot Nothing
        dr("收货数量") = dr("收货数量") - e.DataRow("入库数量")
    End If
End If

上面是“出入库”这个数据表里面的代码,如果我删除一条记录的话,采购单里面“收货数量”是否会发生两次变化,也就是说,datacolchanged 触动一次变化,datarowdeleting 又触动一次变化?我现在就发现,删除一条记录时采购单里面的“收货数量”发生了双倍的变化。不知道是什么原因?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107680 积分:547721 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/23 16:35:00 [只看该作者]

删除行不会触发datacolchanged 事件的。应该还有其它代码影响了

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1510 积分:9791 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2021/3/24 9:05:00 [只看该作者]

'自动更新批号表的库存数量
If e.DataRow.isnull("批号") = True 
    Else
    Dim dr As DataRow = DataTables("批号表").find("批号 = '" & e.DataRow("批号") & "' And 物料编号 = '" & e.DataRow("物料编号") & "' and 批号='" & e.DataRow("批号") & "'")
    If dr IsNot Nothing

'以下这段会导致采购单数量变化加倍,所以删除了2021/3/24
'        dr("库存数量") = dr("库存数量") - e.DataRow("入库数量") - e.DataRow("出库数量")

    End If
End If

'自动更新生产指令的已入库数量
If e.DataRow.isnull("指令单号") = True   
    Else
    Dim dr As DataRow = DataTables("生产指令").find("指令单号 = '" & e.DataRow("指令单号") & "' And 产品代号 = '" & e.DataRow("物料编号") & "'")
    If dr IsNot Nothing
        dr("已入库数量") = dr("已入库数量") - e.DataRow("入库数量")
    End If
End If

'自动更新采购单的收货数量
If e.DataRow.isnull("采购单号") = True  
    Else
    Dim dr As DataRow = DataTables("采购单").find("采购单号 = '" & e.DataRow("采购单号") & "' And 采购单行号 = '" & e.DataRow("采购单行号") & "' And 物料编号 = '" & e.DataRow("物料编号") & "'")
    If dr IsNot Nothing
'以下这段会导致采购单数量变化加倍,所以删除了2021/3/24
'        dr("收货数量") = dr("收货数量") - e.DataRow("入库数量")
'        dr("退货数量") = dr("退货数量") + e.DataRow("出库数量")
    End If
End If

'自动更新销售单的收货数量和退货数量
If e.DataRow.isnull("销售单号") = True  
    Else
    Dim dr As DataRow = DataTables("销售单").find("销售单号 = '" & e.DataRow("销售单号") & "' And 销售单行号 = '" & e.DataRow("销售单行号") & "' And 产品代号 = '" & e.DataRow("物料编号") & "'")
    If dr IsNot Nothing
        dr("退货数量") = dr("退货数量") - e.DataRow("入库数量")
        dr("交货数量") = dr("交货数量") + e.DataRow("出库数量")
    End If
End If

'自动更新铝铜库存表的来料公斤
If e.DataRow.isnull("采购单号") = False  
    If e.DataRow("类别") = "铝铜"
        Dim dr As DataRow = DataTables("铝铜库存表").find("采购单号 = '" & e.DataRow("采购单号") & "' And 采购单行号 = '" & e.DataRow("采购单行号") & "' And 出入库单号 = '" &   e.DataRow("出入库单号") & "' and 物料编号 = '" & e.DataRow("物料编号") & "'")
        If dr IsNot Nothing
            dr("来料公斤") = dr("来料公斤") - e.DataRow("入库数量")
        End If
    End If
End If

'用于重新计算模具清单"的生产模数
vars("filter") = "模具型号 = '" & e.DataRow("模具型号") & "'"

'用于计算余数
e.DataRow("入库数量") = 0
e.DataRow("出库数量") = 0
'余数计算结束

上面是“出入库” datarowdeleting 里面的全部代码。有两个红色字体的位置我把其代码注释了,就不会发生翻倍的问题了。是不是最后两句紫色的代码有问题?如果是,要怎么修改?谢谢。



 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107680 积分:547721 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/24 9:13:00 [只看该作者]

确实是。紫色的代码会触发datacolchanged 事件

 回到顶部