方法一
If e.DataCol.Name = "产品" Then
e.DataRow("数量") = DataTables("订单").Compute("Sum(数量)","[产品] = '" & e.NewValue & "'")
End If
请在统计表设置好上述代码后,重置一次该表的产品列。
现在要求在订单表输入或修改某订单的数量后,能够即时更新统计表对应产品的数量统计值。
为此可将订单表的DataColChanged事件代码设置为:
If e.DataCol.Name = "数量" Then
Dim pr As DataRow
pr = DataTables("统计").Find("产品 = '" & e.DataRow("产品") & "'")
If pr IsNot Nothing Then
pr("数量")= pr("数量") + e.NewValue - e.OldValue
End If
End If
方法二
If e.DataCol.Name = "产品" Then
Dim Filter As String = "[产品] = '" & e.NewValue & "'"
e.DataRow("数量") = DataTables("订单").Compute("Sum(数量)", Filter)
e.DataRow("金额") = DataTables("订单").Compute("Sum(金额)", Filter)
End If
同样在统计表设置好上述代码后,请重置一次该表的产品列。
订单表的金额列是一个表达式列,其表达式为:[数量] * [单价] * (1 - [折扣])
我们知道表达式列有一个特性,就是其值发生变化后,并不会触发DataColChanged事件,此特性导致我们无法简单地用前面介绍的方法来自动更新统计表中的销售金额。
所以有必要考虑用另一重算方法,将订单表的DataColChanged事件代码设置为:
Select Case e.DataCol.Name
Case "数量","单价","折扣"
Dim pr As DataRow
pr = DataTables("统计").Find("产品 = '" & e.DataRow("产品") & "'")
If pr IsNot Nothing Then
DataTables("统计").DataCols("产品").RaiseDataColChanged(pr)
End If
End Select
方法三
If e.DataCol.Name = "产品" Then
e.DataRow("数量") = DataTables("订单").Compute("Sum(数量)","[产品] = '" & e.NewValue & "'")
e.DataRow("金额") = DataTables("订单").Compute("Sum(金额)","[产品] = '" & e.NewValue & "'")
End If
注:金额不是表达式字段
Select Case e.DataCol.Name
Case "数量","单价","折扣"
Dim pr As DataRow
pr = DataTables("统计").Find("产品 = '" & e.DataRow("产品") & "'")
If pr IsNot Nothing Then
DataTables("统计").DataCols("产品").RaiseDataColChanged(pr)
End If
End Select
问题:方法一和方法二是帮助实例,方法三是自己做,也能用,以方法一、方法二相比,好象不规范,会不会有潜在问题?