流水账与重置列

假定下图的流水账有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


本页地址:http://www.foxtable.com/webhelp/topics/2237.htm