以文本方式查看主题

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

--  作者:edisontsui
--  发布时间:2021/2/5 16:21:00
--  datacolchanging 问题
If e.DataCol.Name = "备注" Then
    If e.DataRow("单价") = 0
        If e.NewValue Is Nothing Then 
            MessageBox.Show("请在单价一栏输入单价!", "提示")
            e.Cancel = True
        End If
    End If
End If

If e.DataCol.Name = "备注" Then
    If e.DataRow("单价") = 0
        If e.NewValue.contains("免费") = False Then
            MessageBox.Show("非免费商品请在单价一栏输入单价!", "提示")
            e.Cancel = True
        End If
    End If
End If

上面两段代码放在同一个事件 datacolchanging 里面,在执行的时候(清空“备注”栏),会出现如下警告:

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:表,采购单,DataColChanging
详细错误信息:
调用的目标发生了异常。
未设置对象变量或 With 块变量。

如果将那两段代码合并成如下:

If e.DataCol.Name = "备注" Then
    If e.DataRow("单价") = 0
        If e.NewValue Is Nothing orelse e.NewValue.contains("免费") = False Then 
            MessageBox.Show("请在单价一栏输入单价!", "提示")
            e.Cancel = True
        End If
    End If
End If

执行时(清空“备注”栏)也会出现同样的警告。请问是什么问题?

如果去掉第一段代码,只保留如下代码,执行时(清空“备注”栏)也会一样的警告:

If e.DataCol.Name = "备注" Then
    If e.DataRow("单价") = 0
        If e.NewValue.contains("免费") = False Then
            MessageBox.Show("非免费商品请在单价一栏输入单价!", "提示")
            e.Cancel = True
        End If
    End If
End If


--  作者:有点蓝
--  发布时间:2021/2/5 16:42:00
--  
If e.DataCol.Name = "单价" Then
    If e.NewValue = nothing andalso (e.DataRow.isnull("备注") orelse e.DataRow("备注") like "*免费*" )
            MessageBox.Show("请在单价一栏输入单价!", "提示")
            e.Cancel = True
    End If
End If