以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  不能通过已删除的行访问该行的信息  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=122893)

--  作者:edisontsui
--  发布时间:2018/8/3 17:02:00
--  不能通过已删除的行访问该行的信息
我在“JPK612备料”的datacolchanged里面有如下代码:

If e.DataCol.name = "需求数量" 
    If e.DataRow("批号") = ""
    Else
        Dim re As Boolean = False
        For Each dr As DataRow In DataTables("批号表").DataRows
            If dr("物料编号") = e.DataRow("零件号") Then
                dr("库存数量") = dr("库存数量") - e.DataRow("需求数量") - e.OldValue
                dr("批号变动记录") = "出入库变动:" & Date.now & " " & User.Name
                dr("库存数量变动记录") = "出入库变动:" & Date.now & " " & User.Name
                re = True
                Exit For
            Else
                Continue For
            End If
        Next
        If re = False
            Dim dr As DataRow
            dr = DataTables("批号表").AddNew()
            dr("批号") = e.DataRow("批号")
            dr("物料编号") = e.DataRow("零件号")
            dr("库存数量") = 0 - e.DataRow("需求数量") 
            dr("批号变动记录") = "出入库变动:" & Date.now & " " & User.Name
            dr("库存数量变动记录") = "出入库变动:" & Date.now & " " & User.Name
        End If
    End If
end if

我在“批号表”的datacolchanged里面有如下代码:

If e.DataCol.name = "库存数量"
    If e.DataRow("库存数量") = 0
        e.DataRow.delete
    End If
End If


当我在“JPK612备料”输入一条记录,比如数量为1之后,此时“批号表”会增加一条记录,其数量也为1;如果我再在“JPK612备料”输入

一条记录,比如数量为-1之后,“批号表”里面此前增加的记录因为库存数量变为了0而删除,但是,却出现如下警告:


.NET Framework 版本:2.0.50727.8789
Foxtable 版本:2017.3.18.1
错误所在事件:表,JPK612备料,DataColChanged
详细错误信息:
调用的目标发生了异常。
不能通过已删除的行访问该行的信息。

这是为什么呢? 我们希望不要出现上述警告,该如何修改代码?谢谢。

--  作者:有点甜
--  发布时间:2018/8/3 18:33:00
--  

不要在datacolchanged事件删除行。

 

你可以做一个按钮删除,或者关闭项目的时候删除。


--  作者:edisontsui
--  发布时间:2018/8/4 8:54:00
--  
关闭项目的时候删除,代码如何写?


--  作者:有点蓝
--  发布时间:2018/8/4 9:30:00
--  
DataTables("批号表").DeleteFor("库存数量=0")
--  作者:edisontsui
--  发布时间:2018/8/4 11:39:00
--  
我将以上代码放入beforecloseproject里面去,待我关闭项目以及重开项目之后,发现“库存数量”=0的那行没有被删除。为什么呢?
--  作者:有点蓝
--  发布时间:2018/8/4 12:00:00
--  
DataTables("批号表").DeleteFor("库存数量=0")
DataTables("批号表").save

或者
DataTables("批号表").sqlDeleteFor("库存数量=0")


--  作者:edisontsui
--  发布时间:2018/8/4 13:15:00
--  
这个有效。谢谢。
--  作者:edisontsui
--  发布时间:2018/8/13 18:20:00
--  

批号表_DataColChanged

 

If e.DataCol.name = "库存数量"

    If e.DataRow("库存数量") = 0

        e.DataRow.delete

    End If

End If


“批号表”的datacolchanged里面有如上代码,我要改成:如果是“出入库”那个表导致的“库存数量" = 0,才允许执行删除命令。代码应该如何写?谢谢。


--  作者:有点甜
--  发布时间:2018/8/13 18:54:00
--  

那就不要在datacolchanged事件写delete代码。

 

请在【出入库】导致库存数量变化的那个地方写删除的代码。


--  作者:edisontsui
--  发布时间:2018/8/14 11:19:00
--  

If e.DataCol.name = "入库数量" OrElse e.DataCol.name = "出库数量"

    If e.DataRow("批号") = ""

    Else

        Dim re As Boolean = False

        For Each dr As DataRow In DataTables("批号表").DataRows

            If dr("批号") = e.DataRow("批号") And dr("物料编号") = e.DataRow("物料编号") Then

                dr("库存数量") = e.DataRow("入库数量") + e.DataRow("出库数量") + dr("库存数量") - e.OldValue

                dr("批号变动记录") = "出入库变动:" & Date.now & " " & User.Name

                dr("库存数量变动记录") = "出入库变动:" & Date.now & " " & User.Name

                re = True

                Exit For

            Else

                Continue For

            End If

        Next

        If re =False

            Dim dr As DataRow

            dr = DataTables("批号表").AddNew()

            dr("批号") = e.DataRow("批号")

            dr("物料编号") = e.DataRow("物料编号")

            dr("物料名称") = e.DataRow("物料名称")

            dr("类别") = e.DataRow("类别")

            dr("来源") = e.DataRow("来源")

            dr("客户简称") = e.DataRow("客户")

            dr("库存数量") = e.DataRow("入库数量") + e.DataRow("出库数量")

            dr("批号变动记录") = "出入库变动:" & Date.now & " " & User.Name

            dr("库存数量变动记录") = "出入库变动:" & Date.now & " " & User.Name

        End If

    End If

End If


有道理。以上是“出入库”dtacolchanged里面的有关代码,如何加入代码达到如上目的? 谢谢。