以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  增加行前查找  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=120130)

--  作者:13775189031
--  发布时间:2018/6/7 17:18:00
--  增加行前查找
  Case "领料情况_不分机组"
        If e.newvalue = False Then
            DataTables("领料清单").DeleteFor("编号=\'" & e.DataRow("编号") & "\'")
        Else
             If e.DataRow("物资说明") = "紧固件" Then
                Dim ndr1 As DataRow = DataTables("领料清单").Find("预算编号 = \'" & e.NewValue & "\'")
                If ndr1 Is Nothing Then
                    Dim ndr2 As DataRow = DataTables("领料清单").AddNew
                    ndr2("编号") = e.DataRow("编号")
                    ndr2("预算编号") = e.DataRow("预算编号")
                    ndr2("生产令号") = e.DataRow("生产令号")
                    ndr2("项目名称") = e.DataRow("项目名称")
                    ndr2("物资说明") = e.DataRow("物资说明")
                    ndr2("单位") = "批"
                    ndr2("领料数量") = "1"
                    ndr2("领料日期") = Date.today
                Else
                    e.Cancel = True
                End If
            End If
  
想实现,增加行之前查找如果预算编号相同的,则不再增加行,要怎么改?

--  作者:有点甜
--  发布时间:2018/6/7 17:23:00
--  

Case "领料情况_不分机组"
    If e.newvalue = False Then
        DataTables("领料清单").DeleteFor("编号=\'" & e.DataRow("编号") & "\'")
    Else
        If e.DataRow("物资说明") = "紧固件" Then
            Dim ndr1 As DataRow = DataTables("领料清单").Find("预算编号 = \'" & e.DataRow("预算编号") & "\'")
            If ndr1 Is Nothing Then
                Dim ndr2 As DataRow = DataTables("领料清单").AddNew
            End If
            ndr2("编号") = e.DataRow("编号")
            ndr2("预算编号") = e.DataRow("预算编号")
            ndr2("生产令号") = e.DataRow("生产令号")
            ndr2("项目名称") = e.DataRow("项目名称")
            ndr2("物资说明") = e.DataRow("物资说明")
            ndr2("单位") = "批"
            ndr2("领料数量") = "1"
            ndr2("领料日期") = Date.today           
        End If


--  作者:13775189031
--  发布时间:2018/6/8 9:24:00
--  
显示未声明名称ndr2,现改成以下:

Case "领料情况_不分机组"

    If e.newvalue = False Then
        DataTables("领料清单").DeleteFor("编号=\'" & e.DataRow("编号") & "\'")
    Else
 If e.DataRow("物资说明") = "紧固件" Then
                Dim ndr1 As DataRow = DataTables("领料清单").Find("预算编号 = \'" & e.DataRow("预算编号") & "\'")
                If ndr1 Is Nothing Then
                    Dim ndr As DataRow = DataTables("领料清单").AddNew
                End If
                ndr1("编号") = e.DataRow("编号")
                ndr1("预算编号") = e.DataRow("预算编号")
                ndr1("生产令号") = e.DataRow("生产令号")
                ndr1("项目名称") = e.DataRow("项目名称")
                ndr1("物资说明") = e.DataRow("物资说明")
                ndr1("单位") = "批"
                ndr1("领料数量") = "1"
                ndr1("领料日期") = Date.today
            End If
        End If

但调试过程中显示:
.NET Framework 版本:2.0.50727.8762
Foxtable 版本:2018.3.9.1
错误所在事件:表,物资明细表,DataColChanged
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。


--  作者:有点甜
--  发布时间:2018/6/8 9:25:00
--  
Case "领料情况_不分机组"
    If e.newvalue = False Then
        DataTables("领料清单").DeleteFor("编号=\'" & e.DataRow("编号") & "\'")
    Else
        If e.DataRow("物资说明") = "紧固件" Then
            Dim ndr2 As DataRow = DataTables("领料清单").Find("预算编号 = \'" & e.DataRow("预算编号") & "\'")
            If ndr2 Is Nothing Then
                ndr2 = DataTables("领料清单").AddNew
            End If
            ndr2("编号") = e.DataRow("编号")
            ndr2("预算编号") = e.DataRow("预算编号")
            ndr2("生产令号") = e.DataRow("生产令号")
            ndr2("项目名称") = e.DataRow("项目名称")
            ndr2("物资说明") = e.DataRow("物资说明")
            ndr2("单位") = "批"
            ndr2("领料数量") = "1"
            ndr2("领料日期") = Date.today           
        End If

--  作者:13775189031
--  发布时间:2018/6/8 9:45:00
--  
以下是要生成两行的情况,先生成两行,然后查找如果预算编号相同则不再生成!
 
Case "领料情况_分机组"
    If e.newvalue = False Then
        DataTables("领料清单").DeleteFor("编号=\'" & e.DataRow("编号") & "\'")
    ElseIf e.DataRow("物资说明") = "紧固件" Then
                For i As Integer = 1 To 2
                Next
                Dim ndr1 As DataRow = DataTables("领料清单").Find("预算编号 = \'" & e.DataRow("预算编号") & "\'")
                If ndr1 Is Nothing Then
                End If
                Dim ndr As DataRow = DataTables("领料清单").AddNew
                ndr("编号") = e.DataRow("编号")
                ndr("预算编号") = e.DataRow("预算编号")
                ndr("物资说明") = e.DataRow("物资说明")
                ndr("单位") = "批"
                ndr("领料数量") = "0.5"
                ndr("领料日期") = Date.today
            End If
        End If

我这样编出来生成的是一行,而且没有查找!怎么改?

--  作者:有点甜
--  发布时间:2018/6/8 9:49:00
--  
    Case "领料情况_分机组"
        If e.newvalue = False Then
            DataTables("领料清单").DeleteFor("编号=\'" & e.DataRow("编号") & "\'")
           
        ElseIf e.DataRow("物资说明") = "紧固件" Then
            Dim ndr1 As DataRow = DataTables("领料清单").Find("预算编号 = \'" & e.DataRow("预算编号") & "\'")
            If ndr1 Is Nothing Then
                For i As Integer = 1 To 2
                    Dim ndr As DataRow = DataTables("领料清单").AddNew
                    ndr("编号") = e.DataRow("编号")
                    ndr("预算编号") = e.DataRow("预算编号")
                    ndr("物资说明") = e.DataRow("物资说明")
                    ndr("单位") = "批"
                    ndr("领料数量") = "0.5"
                    ndr("领料日期") = Date.today
                Next
            End If
        End If
       

--  作者:13775189031
--  发布时间:2018/6/8 10:17:00
--  
 Case "领料情况_分机组"
        If e.newvalue = False Then
            DataTables("领料清单").DeleteFor("编号=\'" & e.DataRow("编号") & "\'")
        Else
            If e.DataRow("物资说明") = "原材料" Then
                For i As Integer = 1 To 2
                    Dim ndr As DataRow = DataTables("领料清单").AddNew
                    ndr("编号") = e.DataRow("编号")
                    ndr("预算编号") = e.DataRow("预算编号")
                    ndr("物资说明") = e.DataRow("物资说明")
                    ndr("名称") = e.DataRow("物资名称")
                    ndr("规格") = e.DataRow("规格")
                    ndr("材质") = e.DataRow("材质")
                    ndr("中标单位") = e.DataRow("中标情况_中标单位")
                    ndr("领料日期") = Date.today
                Next
            End If
If e.DataRow("物资说明") = "紧固件" Then
            Dim ndr1 As DataRow = DataTables("领料清单").Find("预算编号 = \'" & e.DataRow("预算编号") & "\'")
            If ndr1 Is Nothing Then
                For i As Integer = 1 To 2
                    Dim ndr As DataRow = DataTables("领料清单").AddNew
                    ndr("编号") = e.DataRow("编号")
                    ndr("预算编号") = e.DataRow("预算编号")
                    ndr("物资说明") = e.DataRow("物资说明")
                    ndr("单位") = "批"
                    ndr("领料数量") = "0.5"
                    ndr("领料日期") = Date.today
                Next
            End If
        End If

和另一组代码合并后,提示错误编码else


--  作者:有点甜
--  发布时间:2018/6/8 10:21:00
--  

Select Case e.DataCol.name
    Case "领料情况_分机组"
        If e.newvalue = False Then
            DataTables("领料清单").DeleteFor("编号=\'" & e.DataRow("编号") & "\'")
        Else
            If e.DataRow("物资说明") = "原材料" Then
                For i As Integer = 1 To 2
                    Dim ndr As DataRow = DataTables("领料清单").AddNew
                    ndr("编号") = e.DataRow("编号")
                    ndr("预算编号") = e.DataRow("预算编号")
                    ndr("物资说明") = e.DataRow("物资说明")
                    ndr("名称") = e.DataRow("物资名称")
                    ndr("规格") = e.DataRow("规格")
                    ndr("材质") = e.DataRow("材质")
                    ndr("中标单位") = e.DataRow("中标情况_中标单位")
                    ndr("领料日期") = Date.today
                Next
            End If
            If e.DataRow("物资说明") = "紧固件" Then
                Dim ndr1 As DataRow = DataTables("领料清单").Find("预算编号 = \'" & e.DataRow("预算编号") & "\'")
                If ndr1 Is Nothing Then
                    For i As Integer = 1 To 2
                        Dim ndr As DataRow = DataTables("领料清单").AddNew
                        ndr("编号") = e.DataRow("编号")
                        ndr("预算编号") = e.DataRow("预算编号")
                        ndr("物资说明") = e.DataRow("物资说明")
                        ndr("单位") = "批"
                        ndr("领料数量") = "0.5"
                        ndr("领料日期") = Date.today
                    Next
                End If
            End If
        end if
end select

--  作者:13775189031
--  发布时间:2018/6/8 10:33:00
--  
Select Case e.DataCol.Name
    Case "到货数量","到货_批次"
        If e.DataRow("到货数量") = 0 Then
            DataTables("物资检验详单").DeleteFor("编号=\'" & e.DataRow("编号") & "\'")
        Else
            If e.DataRow("物资说明") = "原材料" Then
                For i As Integer = 1 To e.DataRow("到货_批次")
                    Dim ndr As DataRow = DataTables("物资检验详单").AddNew
                    ndr("编号") = e.DataRow("编号")
                    ndr("预算编号") = e.DataRow("预算编号")
                    ndr("生产令号") = e.DataRow("生产令号")
                    ndr("项目名称") = e.DataRow("项目名称")
                    ndr("物资说明") = e.DataRow("物资说明")
                    ndr("物资名称") = e.DataRow("物资名称")
                    ndr("规格") = e.DataRow("规格")
                    ndr("材质") = e.DataRow("材质")
                Next
            End If
End select

上面的代码可以根据到货数量删减增加行,但是“到货批次”修改的话,无法删减,比如“到货批次”由原来的3改成2,则自动生成不能删减为2行,而是另外增加2行,总共增加了5行!
要怎么改?



--  作者:有点甜
--  发布时间:2018/6/8 11:03:00
--  
Select Case e.DataCol.Name
    Case "到货数量","到货_批次"
        If e.DataRow("到货数量") = 0 Then
            DataTables("物资检验详单").DeleteFor("编号=\'" & e.DataRow("编号") & "\'")
        Else
            If e.DataRow("物资说明") = "原材料" Then
                DataTables("物资检验详单").DeleteFor("编号=\'" & e.DataRow("编号") & "\'")
                For i As Integer = 1 To e.DataRow("到货_批次")
                    Dim ndr As DataRow = DataTables("物资检验详单").AddNew
                    ndr("编号") = e.DataRow("编号")
                    ndr("预算编号") = e.DataRow("预算编号")
                    ndr("生产令号") = e.DataRow("生产令号")
                    ndr("项目名称") = e.DataRow("项目名称")
                    ndr("物资说明") = e.DataRow("物资说明")
                    ndr("物资名称") = e.DataRow("物资名称")
                    ndr("规格") = e.DataRow("规格")
                    ndr("材质") = e.DataRow("材质")
                Next
            End If
End select