以下是引用狐狸爸爸在2010-12-20 17:09:00的发言:
如果你不比较_Identify,只比较日期,就不会有这个问题,但是这样同一天的先后顺序又分不开。
除非你将日期列的格式设置为日期时间,这样同一天的可以比较时间,不在通过_Identify比较。
现在我这样好像可以了,呵呵,还在测试,不知这样写是否可行?
经短时测试,好像达到我的目的了,现在还差当删除行时的代码重算写法了,不知有什么好的方法否?
Dim dr1 As DataRow
Dim dr2 As DataRow
Dim mr As DataRow = e.DataRow
Dim drs As List(of DataRow)
If mr.IsNull("料品编码") = False Then
dr1 = e.DataTable.Find("[会计期间] = '" & mr("会计期间") & "'and [日期] <= #" & mr("日期") & "# And [料品编码] = '" & mr("料品编码") & "'and [_sortkey] < " & mr("_sortkey") ,"[日期],[_SortKey] Desc")
If dr1 Is Nothing Then '如果没有上一行,说明本行就是同产品的第一行
If mr("摘要")="期初结存" Then
Return
Else
mr("结存量") = mr("生产供给量") - mr("订单需求量")
End If
dr1 = mr
End If
drs = e.DataTable.Select("[会计期间] = '" & dr1("会计期间") & "'and [料品编码] = '" & dr1("料品编码") & "'And [日期] >= #" & dr1("日期") & "#" ,"[日期],[_SortKey]")
For i As Integer = 1 To drs.Count - 1 '重算余下行的余额
drs(i)("结存量") = drs(i-1)("结存量") + drs(i)("生产供给量") - drs(i)("订单需求量")
Next
End If
[此贴子已经被作者于2010-12-20 17:21:20编辑过]