以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于DataColChanged的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=140015)

--  作者:2327153574
--  发布时间:2019/8/27 17:02:00
--  关于DataColChanged的问题
想实现以下功能:新增合同后,同时在租金明细表、租金应缴明细表、租金实缴明细表、保证金信息表中增加相应的行,在合同信息表的DataColChanged事件中加入以下代码:
Select Case e.DataCol.Name
    Case "合同编号"
        If e.DataRow.IsNull("合同编号") = False Then \'如果已经输入合同编号
            Dim pr1 As List(Of DataRow)  = DataTables("租金明细表").Select("[合同编号] = \'" & e.DataRow("合同编号") & "\'")
            Dim pr2 As List(Of DataRow)  = DataTables("租金应缴明细表").Select("[合同编号] = \'" & e.DataRow("合同编号") & "\'")
            Dim pr3 As List(Of DataRow)  = DataTables("租金实缴明细表").Select("[合同编号] = \'" & e.DataRow("合同编号") & "\'")
            Dim pr4 As List(Of DataRow)  = DataTables("保证金信息表").Select("[合同编号] = \'" & e.DataRow("合同编号") & "\'")           
            If pr1.Count = 0 Then \'而且无租金明细
                Dim dr1 As DataRow = DataTables("租金明细表").AddNew()
                dr1("合同编号") = e.DataRow("合同编号")
            End If
            If pr2.Count = 0 Then \'而且无租金应缴明细
                Dim dr2 As DataRow = DataTables("租金应缴明细表").AddNew()
                dr2("合同编号") = e.DataRow("合同编号")
            End If
            If pr3.Count = 0 Then \'而且无租金实缴明细
                Dim dr3 As DataRow = DataTables("租金实缴明细表").AddNew()
                dr3("合同编号") = e.DataRow("合同编号")
            End If
            If pr4.Count = 0 Then \'而且无保证金明细
                Dim dr4 As DataRow = DataTables("保证金信息表").AddNew()
                dr4("合同编号") = e.DataRow("合同编号")
            End If
        End If
End Select


报错内容如下:
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2019.7.8.1
错误所在事件:表,租金明细表,DataColChanged
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。
 。。。。。。

同时增加行的租金明细表、租金应缴明细表、租金实缴明细表、保证金信息表的都报错,请问是什么原因?

[此贴子已经被作者于2019/8/27 17:02:48编辑过]

--  作者:有点蓝
--  发布时间:2019/8/27 17:05:00
--  
和这段代码没有关系。

错误所在事件:表,租金明细表,DataColChanged

--  作者:2327153574
--  发布时间:2019/8/27 17:10:00
--  
租金明细表、保证金信息表中,DataColChanged 中只有以下代码:

If e.DataCol.name = "审核" Then
    Dim pr As DataRow = e.DataRow.GetParentRow("合同信息表")
    If e.DataRow("审核") = False Then
        pr("审核") = False
    End If
End If

租金应缴明细表,DataColChanged 中有以下代码:
\'-----------------------------------------自动生成缴费号-------------------------------------------
Dim bh As String = e.DataRow("合同编号") & "_"  \'生成编号的前半部分
If e.DataRow.RowState = DataRowState.Added Then
    If e.DataRow("缴费号").StartsWith(bh) = False \'如果编号的前半部分不符
        Dim max As String
        Dim idx As Integer
        Dim bit As Integer
        max = e.DataTable.Compute("Max(缴费号)","[缴费号] like \'" & bh & "*\'") \'取得该合同的最大编号
        bit = bh.Length
        If max > "" Then \'如果存在最大编号
            idx = CInt(max.Substring(bit,2)) + 1 \'获得最大编号的后两位顺序号,并加1
        Else
            idx = 1 \'否则顺序号等于1
        End If
        e.DataRow("缴费号") = bh & Format(idx,"00")
    End If
End If
\'-----------------------------------------自动生成缴费号-------------------------------------------
If e.DataCol.Name = "实缴金额" Then
    e.DataRow("实缴金额") = DataTables("租金实缴明细表").Compute("Sum(实缴金额)","[缴费号] = \'" & e.DataRow("缴费号") & "\'")
End If

Select Case e.DataCol.name
    Case "欠缴金额"
        If e.DataRow.IsNull("应缴金额")=False AndAlso e.DataRow.IsNull("实缴金额")=False Then
            e.DataRow("欠缴金额")= e.DataRow("应缴金额") - e.DataRow("实缴金额")
        End If
End Select
\'当我们在实缴明细表输入实缴金额时,应缴明细表/合同信息表的数据会自动更新
Select Case e.DataCol.name
    Case "截止日期","应缴金额"
       
        Dim pr2 As DataRow = e.DataRow.GetParentRow("合同信息表")
       
        DataTables("合同信息表").DataCols("合同金额_已缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("合同金额_欠缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("合同金额_未缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("往年_应缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("往年_实缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("往年_欠缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_应缴金额_按合同").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_应缴金额_含往年欠缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_实缴金额_按合同").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_实缴金额_补往年欠缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_实缴金额_总额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_欠缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_未缴金额").RaiseDataColChanged(pr2)
End Select
If e.DataCol.name = "审核" Then
    Dim pr As DataRow = e.DataRow.GetParentRow("合同信息表")
    If e.DataRow("审核") = False Then
        pr("审核") = False
    End If
End If


租金实缴明细表,DataColChanged 中有以下代码:
\'当我们在实缴明细表输入实缴金额时,应缴明细表/合同信息表的数据会自动更新
If e.DataCol.name = "实缴金额" Then
    Dim pr1 As DataRow = e.DataRow.GetParentRow("租金应缴明细表") \'找出对应的父行
    Dim pr2 As DataRow = e.DataRow.GetParentRow("合同信息表")
        DataTables("租金应缴明细表").DataCols("实缴金额").RaiseDataColChanged(pr1)
        DataTables("租金应缴明细表").DataCols("欠缴金额").RaiseDataColChanged(pr1)
        DataTables("合同信息表").DataCols("合同金额_已缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("合同金额_欠缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("合同金额_未缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("往年_应缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("往年_实缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("往年_欠缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_应缴金额_按合同").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_应缴金额_含往年欠缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_实缴金额_按合同").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_实缴金额_补往年欠缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_实缴金额_总额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_欠缴金额").RaiseDataColChanged(pr2)
        DataTables("合同信息表").DataCols("本年度_未缴金额").RaiseDataColChanged(pr2)
End If



请问是什么问题
[此贴子已经被作者于2019/8/27 17:35:05编辑过]

--  作者:有点蓝
--  发布时间:2019/8/27 17:39:00
--  
If e.DataCol.name = "审核" Then
    Dim pr As DataRow = e.DataRow.GetParentRow("合同信息表")
if pr isnot nothing then
    If e.DataRow("审核") = False Then
        pr("审核") = False
    End If
end if
End If