以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  datacolchanged 问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=105657)

--  作者:edisontsui
--  发布时间:2017/8/23 17:26:00
--  datacolchanged 问题
我在增加一行空行时,会出现入下警告:
.NET Framework 版本:2.0.50727.8669
Foxtable 版本:2017.3.18.1
错误所在事件:表,出入库,DataColChanged
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。

目前,我的DataColChanged代码如下:

If e.DataCol.name = "出入库日期"
    If e.DataRow.IsNull("出入库日期") Then
        e.DataRow("已出库天数") = Nothing
    Else
        Dim tp As TimeSpan = Date.today - CDate(e.DataRow("出入库日期"))
        e.DataRow("已出库天数") = Math.Round(tp.TotalDays / 1,0)
    End If
End If

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("入库数量") + e.DataRow("出库数量")
            dr("批号变动记录") = Date.now & " " & User.Name
            dr("库存数量变动记录") = Date.now & " " & User.Name
        End If
    End If
End If



Select Case e.DataCol.Name
    Case "物料编号","入库数量","出库数量"
 
        Dim dr As DataRow
        Dim mr As DataRow = e.DataRow
        Dim drs As List(of DataRow)
        
        dr = e.DataTable.Find("[出入库日期] <= #" & mr("出入库日期") & "# And [物料编号] = \'" & mr("物料编号") & "\'", "出入库日期,出入原因 desc,出入库单号")
        If dr("_Identify") = mr("_Identify") Then
            mr("余数") = mr("入库数量") + mr("出库数量")
            dr = mr
        End If
        drs = e.DataTable.Select("[出入库日期] >= #" & dr("出入库日期") & "# And [物料编号] = \'" & dr("物料编号") & "\'", "出入库日期,出入原因 desc,出入库单号")
        For i As Integer = 1 To drs.Count - 1
            drs(i)("余数") = drs(i-1)("余数") + drs(i)("入库数量") + drs(i)("出库数量")
        Next
        If e.DataCol.Name = "物料编号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            dr = e.DataTable.Find("[出入库日期] <= #" & mr("出入库日期") & "# And [物料编号] = \'" & e.OldValue & "\'", "出入库日期,出入原因 desc,出入库单号")
            If dr Is Nothing Then
                dr = e.DataTable.Find("[物料编号] = \'" & e.OldValue & "\'", "出入库日期,出入原因 desc,出入库单号")
                If dr IsNot Nothing Then
                    dr("余数") = dr("入库数量") + dr("出库数量")
                End If
            End If
            If dr IsNot Nothing Then
                drs = e.DataTable.Select("[出入库日期] >= #" & dr("出入库日期") & "# And [物料编号] = \'" & dr("物料编号") & "\'", "出入库日期,出入原因 desc,出入库单号")
                For i As Integer = 1 To drs.Count - 1
                    drs(i)("余数") = drs(i-1)("余数") + drs(i)("入库数量") + drs(i)("出库数量")
                Next
            End If
        End If
        Case "物料编号","指令单号"
Dim dr As DataRow =e.DataRow
dr("变更记录") =  e.oldvalue & "更改为" & e.newvalue & " " & Date.Now() & User.name

End Select

那么,是哪里的代码有问题呢?如何修改呢?谢谢。

--  作者:有点甜
--  发布时间:2017/8/23 19:13:00
--  

加上判断,如

 

        dr = e.DataTable.Find("[出入库日期] <= #" & mr("出入库日期") & "# And [物料编号] = \'" & mr("物料编号") & "\'", "出入库日期,出入原因 desc,出入库单号")

        If dr Is Nothing OrElse dr("_Identify") = mr("_Identify") Then
            mr("余数") = mr("入库数量") + mr("出库数量")
            dr = mr
        End If
 

--  作者:edisontsui
--  发布时间:2017/8/24 10:48:00
--  
加上上述判断之后,还是没有改善。可否请你帮我加好这些代码之后,再将整个datacolchanged 代码发给我?
或者可否请你利用我的主题“流水帐问题”那里的数据库和项目测试一下?谢谢。

--  作者:有点甜
--  发布时间:2017/8/24 11:28:00
--  

就是像2楼那样,把原先的代码修改。

 

如果还有,请自行加入msgbox调试。我测试没问题。

 

http://www.foxtable.com/webhelp/scr/1485.htm