Select Case e.DataCol.Name
Case "物资名称","入库","出库","规格型号"
Dim drs As List(of DataRow)
Dim Filter As String
Filter = "[_SortKey] >= " & e.DataRow("_SortKey") & " And [物资名称] = '" & e.DataRow("物资名称") & "'And [规格型号] = '" & e.DataRow("规格型号") & "'"
drs = e.DataTable.Select(Filter)
For Each dr As DataRow In drs
Filter = "[_SortKey] <= " & dr("_SortKey") & " And [物资名称] = '" & dr("物资名称") & "'And [规格型号] = '" & dr("规格型号") & "'"
Dim Val1 As Double = e.DataTable.Compute("Sum(入库)",Filter)
Dim Val2 As Double = e.DataTable.Compute("Sum(出库)",Filter)
dr("库存") = Val1 - Val2
Next
If e.DataCol.Name = "物资名称" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
Filter = "[_SortKey] > " & e.DataRow("_SortKey") & " And [物资名称] = '" & e.OldValue & "'And [规格型号] = '" & e.datarow("规格型号") & "'"
drs = e.DataTable.Select(Filter)
For Each dr As DataRow In drs
Filter = "[_SortKey] <= " & dr("_SortKey") & " And [物资名称] = '" & dr("物资名称") & "' And [规格型号] = '" & dr("规格型号") & "'"
Dim Val1 As Double = e.DataTable.Compute("Sum(入库)",Filter)
Dim Val2 As Double = e.DataTable.Compute("Sum(出库)",Filter)
dr("库存") = Val1 - Val2
Next
End If
elseIf e.DataCol.Name = "规格型号" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
Filter = "[_SortKey] > " & e.DataRow("_SortKey") & " And [物资名称] = '" & e.datarow("物资名称") & "' And [规格型号] = '" & e.OldValue & "'"
drs = e.DataTable.Select(Filter)
For Each dr As DataRow In drs
Filter = "[_SortKey] <= " & dr("_SortKey") & " And [物资名称] = '" & dr("物资名称") & "' And [规格型号] = '" & dr("规格型号") & "'"
Dim Val1 As Double = e.DataTable.Compute("Sum(入库)",Filter)
Dim Val2 As Double = e.DataTable.Compute("Sum(出库)",Filter)
dr("库存") = Val1 - Val2
Next
End If
End Select
这种填充的,建议填充完毕后再调用一下重置列进行计算,因为填充是按单元格写入数据的,在写入物资名称的时候,出入库还没有数据,会导致多余的计算,或者计算不准确
[此贴子已经被作者于2021/4/24 9:34:52编辑过]