我将代码修改了一下:
Select Case e.DataCol.Name
Case "客户名称","本期减少","本期增加"
Dim dr As DataRow
Dim drs As List(of DataRow)
dr = e.DataTable.Find("年*100+月 < " & e.DataRow("年")*100+e.DataRow("月") & " And _sortkey < " & e.DataRow("_Sortkey"), "[_SortKey] Desc") '找出上一行
If dr Is Nothing Then '如果没有找到上一行,说明本行就是第一行
'计算之前的结存
Dim jk As Double
Dim ck As Double
jk = e.DataTable.SQLCompute("Sum(本期增加)","年*100+月 < " & e.DataRow("年")*100+e.DataRow("月") & " and [_SortKey] < " & e.DataRow("_SortKey")& " And 客户名称 = '" & e.DataRow("客户名称") & "'")
ck = e.DataTable.SQLCompute("Sum(本期减少)","年*100+月 < " & e.DataRow("年")*100+e.DataRow("月") & " and [_SortKey] < " & e.DataRow("_SortKey")& " And 客户名称 = '" & e.DataRow("客户名称") & "'")
e.DataRow("期初") = jk - ck
e.DataRow("期末余额") = e.DataRow("本期增加") - e.DataRow("本期减少") + jk -ck
dr = e.DataRow
End If
drs = e.DataTable.Select("[_SortKey] >= " & dr("_SortKey"), "[_SortKey]")
For i As Integer = 1 To drs.Count - 1 '重算余下行的余额
drs(i)("期末余额") = drs(i-1)("期末余额") + drs(i)("本期增加") - drs(i)("本期减少")
Next
End Select
但是,只是计算第一个的客户信息(正确),其他的不计算,求解!!

此主题相关图片如下:1.png
[此贴子已经被作者于2017/12/6 15:00:49编辑过]