流水账与重置列
假定下图的流水账有10000行数据:
如果重置收入列,当我们重置第一行的时候,会重算所有10000行的余额,当重置第二行的时候,会重算剩下的9999行的余额,同样重置第三行的时候,回重算余下的9998行的余额,这样算下来,重置一次收入列,等于重算了50005000行的余额,也许一个昼夜也无法完成这样一次重置,而我们实际只有10000行数据,也只需重算1万行的余额。
显然我们只需重置第一行的收入列,即可重算所有10000行的余额,所以我们应该针对上面的流水账加上一个自定义的重置命令:
Dim
dr As
DataRow
dr =
DataTables("表名").Find("","[_SortKey]")
'找出第一行
If
dr IsNot
Nothing Then
'模拟第一行的支出发生变化,
刷新已加载行的余额.
DataTables("表名").DataCols("支出").RaiseDataColChanged(dr)
End
If
上述代码的效率比直接重置收入列快5000倍。
对于下图这种区分产品的流水账:
显然也只需重置每个产品的第一行的入库列,即可重算所有行的库存,所以我们也应该加上一个自定义的重置按钮:
Dim nms
As New
List(Of
String)
Dim drs As
New
List(of
DataRow)
With DataTables("表名")
nms = .GetValues("产品")
For Each nm
As String
In nms
'找出每个产品的第一行数据, 添加到集合drs中
drs.Add(.Find("产品
= '" &
nm
&
"'",
"[_SortKey]"))
Next
For Each dr
As DataRow
In drs
.DataCols("入库").RaiseDataColChanged(dr)
Next
End With