Foxtable(狐表)用户栏目专家坐堂 → 一段代码老是不起作用


  共有2985人关注过本帖树形打印复制链接

主题:一段代码老是不起作用

帅哥哟,离线,有人找我吗?
edisontsui
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1536 积分:9956 威望:0 精华:0 注册:2014/12/18 16:12:00
一段代码老是不起作用  发帖心情 Post By:2021/5/12 16:11:00 [只看该作者]

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.DataRow
        If e.DataTable.Find("生产piao号 = '" & dr920("生产piao号") & "' And 制造产品号 = '" & dr920("制造产品号") & "' And 开料参数 = '" & dr920("开料参数") & "' ") IsNot Nothing Then
            Dim dr922 As DataRow = DataTables("现场任务单").Find("生产piao号 = '" & e.DataRow("生产piao号") & "' and 制造产品号 = '" & e.DataRow("制造产品号") & "' " )
            If dr922 IsNot Nothing Then
                dr922("开料参数重复") = "重复"
            End If
        Else
            Dim dr923 As DataRow = DataTables("现场任务单").Find("生产piao号 = '" & e.DataRow("生产piao号") & "' and 制造产品号 = '" & e.DataRow("制造产品号") & "' " )
            If dr923 IsNot Nothing Then
                dr923("开料参数重复") = "不重复"
            End If
        End If
    End If
End If

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:304 积分:2085 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2021/5/12 16:49:00 [只看该作者]

e.DataRow("制造产品号") IsNot Nothing 

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/12 17:03:00 [只看该作者]

如果是对象类型,可以使用:e.DataRow("制造产品号") Is Nothing ;如果是值类型要使用:e.DataRow("制造产品号") = Nothing

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

 回到顶部
帅哥哟,离线,有人找我吗?
edisontsui
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1536 积分:9956 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1536 积分:9956 威望:0 精华:0 注册:2014/12/18 16:12:00
  发帖心情 Post By:2021/5/12 18:06:00 [只看该作者]

或者说,当我删除一行后,再重置“套数”一列时,2楼的代码也不起作用了。


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:109489 积分:557107 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/5/13 8:36:00 [只看该作者]

dim s as string = vars("filter")
DataTables("弯头开料单").DataCols("套数").RaiseDataColChanged(s)

 回到顶部