以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 全局表事件DataColChanged报错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=140819)

--  作者:myjht
--  发布时间:2019/9/15 14:43:00
--  [求助] 全局表事件DataColChanged报错
全局表事件,DataColChanged,报错如下:新增行没问题,克隆行和合并导入就报错。求指点

Exception has been thrown by the target of an invocation.
There is no Original data to access.

目标的异常被抛出的一个调用。
没有原始数据访问。

代码如下:
If e.DataTable.Name <> "WorkLogfile" Then
        If e.DataRow.RowState = 2 Then
            Return
        Else
            Dim dr As DataRow = DataTables("WorkLogfile").AddNew
            dr("ID") = e.DataRow("_Identify")
            dr("用户") = User.Name
            dr("涉及表") = e.DataTable.Name
            dr("涉及列") = e.DataCol.Name
            dr("涉及行") = e.DataRow("_Identify")
            dr("时间") = Date.Now
            dr("操作") = """" & e.OldValue &  """ 改成了 """ & e.NewValue & """"
            Dim str As String = ""
            Dim str1 As String = ""
            For Each c As DataCol In e.DataTable.DataCols
                str += c.Name & "=" & e.DataRow.OriginalValue(c.Name) & "】,【"
                str1 += c.Name & "=" & e.DataRow(c.Name) & "】,【"
            Next
            dr("原行数据") = str
            dr("改后数据") = str1
        End If
    End If


--  作者:有点蓝
--  发布时间:2019/9/15 15:49:00
--  
这里直接使用OldValue 即可

        For Each c As DataCol In e.DataTable.DataCols
            If e.OldValue IsNot Nothing
                str += c.Name & "=" & e.OldValue & "】,【"
            End If
            str1 += c.Name & "=" & e.DataRow(c.Name) & "】,【"
        Next

--  作者:myjht
--  发布时间:2019/9/15 17:28:00
--  [求助] 全局表事件DataColChanged报错
感谢有点蓝,非常好用,不再报错,谢谢。