以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  删除行后不会更新汇总数  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=152086)

--  作者:nbsugu_z
--  发布时间:2020/7/8 16:33:00
--  删除行后不会更新汇总数
借款单   窗口上部是  借款表 名称为dk_cpd、下部  借款明细 名称:dk_jkb  用cpbm关联

父表借款表单 DataColChanged代码


\'以下自动编制批号

If e.DataCol.Name = "dkrq" Then

    If e.DataRow.IsNull("dkrq") Then

        e.DataRow("cpbm") = Nothing

    Else

        Dim d As Date = e.DataRow("dkrq")

        Dim y As Integer = d.Year

        Dim m As Integer = d.Month

        Dim Days As Integer = Date.DaysInMonth(y,m)

        Dim fd As Date = New Date(y,m,1) \'获得该月的第一天

        Dim ld As Date = New Date(y,m,Days) \'获得该月的最后一天

        Dim bh As String = Format(d,"yyyyMM") \'生成编号的前6位,4位年,2位月.

        If e.DataRow("cpbm").StartsWith(bh) = False \'如果编号的前6位不符

            Dim max As String

            Dim idx As Integer

            max = e.DataTable.Compute("Max(cpbm)","dkrq >= #" & fd & "# And dkrq <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")) \'取得该月的最大编号

            If max > "" Then \'如果存在最大编号

                idx = CInt(max.Substring(7,3)) + 1 \'获得最大编号的后三位顺序号,并加1

            Else

                idx = 1 \'否则顺序号等于1

            End If

            e.DataRow("cpbm") = bh & "-" & Format(idx,"000")

        End If

    End If

End If

\'计算总借款金额计算


If e.DataCol.Name = "cpbm" Then

    Dim Filter As String = "[cpbm] = \'" & e.NewValue & "\'"

    e.DataRow("fdze") = DataTables("dk_jkb").Compute("Sum(je)", Filter)

End If


子表明细表DataColChanged代码
Select Case e.DataCol.Name
    Case "je"
        Dim pr As DataRow
        pr = DataTables("dk_cpb").Find("cpbm = \'" & e.DataRow("cpbm") & "\'")
        If pr IsNot Nothing Then
            DataTables("dk_cpb").DataCols("cpbm").RaiseDataColChanged(pr)
        End If
End Select

子表明细表DataRowDeleted代码

Dim pr As DataRow
        pr = DataTables("dk_cpb").Find("cpbm = \'" & e.DataRow("cpbm") & "\'")
        If pr IsNot Nothing Then
            DataTables("dk_cpb").DataCols("cpbm").RaiseDataColChanged(pr)
        End If


窗口明细删除按钮代码
Dim Result As DialogResult
Result = MessageBox.Show("您确认要删除此条记录吗?删除后将不能恢复", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
    Tables("dk_cpb.dk_jkb").AllowEdit=True
    If Tables("dk_cpb.dk_jkb").rows.count > 0 Then \'判断记录是否为空成立
        Tables("dk_cpb.dk_jkb").Current.Locked = False
    Else
        Return
    End If
    Tables("dk_cpb.dk_jkb").Current.Delete
End If
DataTables("dk_jkb").Save()
If Tables("dk_cpb.dk_jkb").rows.count > 0 Then \'判断记录是否为空成立
    Tables("dk_cpb.dk_jkb").Current.Locked = True
Else
    Return
End If
Tables("dk_cpb.dk_jkb").AllowEdit=False

出现问题:修改明细后,主表总金额会同步修改,删除明细时,一行或者全部删除完,主表总金额不会变化,有时还出现:此行已从表中移除并且没有任何数据。BeginEdit() 将允许在此行中创建新数据“提示,请老师帮修改代码,谢谢



[此贴子已经被作者于2020/7/8 16:34:54编辑过]

--  作者:有点蓝
--  发布时间:2020/7/8 16:41:00
--  
子表明细表DataRowDeleted代码去掉,DataRowDeleting代码

Dim pr As DataRow
        pr = DataTables("dk_cpb").Find("cpbm = \'" & e.DataRow("cpbm") & "\'")
        If pr IsNot Nothing Then
e.DataRow("je") = nothing
            DataTables("dk_cpb").DataCols("cpbm").RaiseDataColChanged(pr)
        End If