以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  一段代码老是不起作用  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=165285)

--  作者:edisontsui
--  发布时间:2021/5/12 16:11:00
--  一段代码老是不起作用
If e.DataCol.name ="套数" Then
    If e.DataRow("生产票号") IsNot Nothing AndAlso e.DataRow("制造产品号") IsNot Nothing AndAlso e.DataRow("开料参数") IsNot Nothing Then
    \'判断是否有同生产票号/同制造产品号/同开料参数的行
        Dim dr920 As DataRow = e.DataRow
        If e.DataTable.Find("生产票号 = \'" & dr920("生产票号") & "\' And 制造产品号 = \'" & dr920("制造产品号") & "\' And 开料参数 = \'" & dr920("开料参数") & "\' ") IsNot Nothing Then
            Dim dr922 As DataRow = DataTables("现场任务单").Find("生产票号 = \'" & e.DataRow("生产票号") & "\' and 制造产品号 = \'" & e.DataRow("制造产品号") & "\' " )
            If dr922 IsNot Nothing Then
                dr922("开料参数重复") = "重复"
            End If
        Else
            Dim dr923 As DataRow = DataTables("现场任务单").Find("生产票号 = \'" & e.DataRow("生产票号") & "\' and 制造产品号 = \'" & e.DataRow("制造产品号") & "\' " )
            If dr923 IsNot Nothing Then
                dr923("开料参数重复") = "不重复"
            End If
        End If
    End If
End If

上面这段代码,不管否有同生产票号/同制造产品号/同开料参数的行,执行的结果都是“重复”。请问是哪里有问题呢?

--  作者:有点蓝
--  发布时间:2021/5/12 16:23:00
--  
单元格是否为空值建议使用isnull判断:http://www.foxtable.com/webhelp/topics/0595.htm

If e.DataCol.name ="套数" Then
    If e.DataRow("生产piao号") IsNot Nothing AndAlso e.DataRow("制造产品号") IsNot Nothing AndAlso e.DataRow("开料参数") IsNot Nothing Then
    \'判断是否有同生产piao号/同制造产品号/同开料参数的行
Dim dr920  As DataRow = e.DataTable.Find("生产piao号 = \'" & e.DataRow("生产piao号") & "\' And 制造产品号 = \'" & e.DataRow("制造产品号") & "\' And 开料参数 = \'" & e.DataRow("开料参数") & "\' and _Identify<>" & e.DataRow("_Identify"))
Dim dr922 As DataRow = DataTables("现场任务单").Find("生产piao号 = \'" & e.DataRow("生产piao号") & "\' and 制造产品号 = \'" & e.DataRow("制造产品号") & "\' " )
        If dr922 IsNot Nothing Then
            If dr920 IsNot Nothing Then
                dr922("开料参数重复") = "重复"
            else
                dr922("开料参数重复") = "不重复"
            End If
        End If
    End If
End If

--  作者:lgzhao
--  发布时间:2021/5/12 16:49:00
--  
e.DataRow("制造产品号") IsNot Nothing 

不能这样用。改成 e.datarow.isnull("制造产品号") 或者 e.DataRow("制造产品号") =nothing试试

--  作者:有点蓝
--  发布时间:2021/5/12 17:03:00
--  
如果是对象类型,可以使用:e.DataRow("制造产品号") Is Nothing ;如果是值类型要使用:e.DataRow("制造产品号") = Nothing

但是不管什么类型都可以使用e.datarow.isnull("制造产品号"),所以建议使用isnull

--  作者:edisontsui
--  发布时间:2021/5/12 17:44:00
--  
DataTables("弯头开料单").DataCols("套数").RaiseDataColChanged(vars("filter"))

上面的代码用于当删除一行数据的时候,我希望重新计算一次"开料参数重复"那栏是否为“重复”。但是出现如下警告:

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:表,弯头开料单,DataRowDeleted
详细错误信息:
调用的目标发生了异常。
重载决策失败,因为没有最适合这些参数的 Public“RaiseDataColChanged”: 
    \'Public Sub RaiseDataColChanged(Filter As String)\':
        不是最特定的。
    \'Public Sub RaiseDataColChanged(dr As Foxtable.DataRow)\':
        不是最特定的。

请问是什么问题?

--  作者:edisontsui
--  发布时间:2021/5/12 18:06:00
--  
或者说,当我删除一行后,再重置“套数”一列时,2楼的代码也不起作用了。


--  作者:有点蓝
--  发布时间:2021/5/13 8:36:00
--  
dim s as string = vars("filter")
DataTables("弯头开料单").DataCols("套数").RaiseDataColChanged(s)