以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  DataColChanged事件代码  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=181004)

--  作者:冷泉
--  发布时间:2022/10/22 10:16:00
--  DataColChanged事件代码
DataColChanged事件
现在数据记录有4000行,直接录数量不卡,录完后修改个数量或者单价就非常卡,能不能帮忙优化一下代码

If e.DataCol.Name = "数量" Or e.DataCol.Name = "单价" Then
    Dim dr As DataRow
    dr= DataTables("订单").Find("订单编号=\'" & e.DataRow("订单编号") & "\'")
    If dr IsNot Nothing Then
        dr("金额")= DataTables("订单明细").Compute("Sum(金额)","订单编号 =\'" & e.DataRow("订单编号") & "\'")
        dr("数量")= DataTables("订单明细").Compute("Sum(数量)","订单编号 =\'" & e.DataRow("订单编号") & "\'")
    End If
End If

Select Case e.DataCol.Name
    Case "数量","单价"
        If e.DataRow.IsNull("数量") OrElse e.DataRow.IsNull("单价") Then
e.DataRow("金额")=Nothing
Else
e.DataRow("金额")=e.DataRow("数量")*e.DataRow("单价")
End If
End Select

--  作者:有点蓝
--  发布时间:2022/10/22 10:26:00
--  
代码在哪个表?都是同一个事件的代码?
--  作者:冷泉
--  发布时间:2022/10/23 11:02:00
--  
代码都是放在订单明细表 DataColChanged事件 里面
--  作者:有点蓝
--  发布时间:2022/10/23 20:27:00
--  
应该不是这个代码的原因,可能又触发了其它事件,或者有多处表达式列计算受数量、单价、金额的影响。

金额的计算要放到统计前
If e.DataCol.Name = "数量" Or e.DataCol.Name = "单价" Then
        If e.DataRow.IsNull("数量") OrElse e.DataRow.IsNull("单价") Then
e.DataRow("金额")=Nothing
Else
e.DataRow("金额")=e.DataRow("数量")*e.DataRow("单价")
End If
    Dim dr As DataRow
    dr= DataTables("订单").Find("订单编号=\'" & e.DataRow("订单编号") & "\'")
    If dr IsNot Nothing Then
        dr("金额")= DataTables("订单明细").Compute("Sum(金额)","订单编号 =\'" & e.DataRow("订单编号") & "\'")
        dr("数量")= DataTables("订单明细").Compute("Sum(数量)","订单编号 =\'" & e.DataRow("订单编号") & "\'")
    End If
End If