DevExpress-xtragrid列运行总计

DevExpress-xtragrid列运行总计,devexpress,calculated-columns,xtragrid,calculated-field,Devexpress,Calculated Columns,Xtragrid,Calculated Field,我正在使用绑定到数据源的DevExpress xtragrid。。。那里一切都很好。我添加了一个未绑定的列(balance),它将保存计算结果。当借方和/或贷方列在网格中的任何位置发生更改时,“余额”列必须重新计算。鉴于可能有大量记录,我希望循环语句不是我唯一的选择。相反,我希望使用 表达式编辑器 例如: dr cr balance 100 0 100 0 50 50 0 45 5 在数据源中创建一个名为Amo

我正在使用绑定到数据源的DevExpress xtragrid。。。那里一切都很好。我添加了一个未绑定的列(balance),它将保存计算结果。当借方和/或贷方列在网格中的任何位置发生更改时,“余额”列必须重新计算。鉴于可能有大量记录,我希望循环语句不是我唯一的选择。相反,我希望使用 表达式编辑器

例如:

dr      cr      balance
100     0       100
0       50      50
0       45      5
  • 在数据源中创建一个名为Amount的新列。在此列中,您将借项和贷项存储为正值和负值
  • 将新列添加到xtragrid。命名为colRunningBalance
  • 将列的未绑定类型设置为decimal。这告诉网格 您将自己处理数据
  • 将以下事件添加到表格中以用于网格。代码在VB.NET中,但是它应该很容易转换成任何语言

    Private Sub gridView_CustomUnboundColumnData(sender As System.Object, e As DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs) Handles
    gvCash.CustomUnboundColumnData
                 Dim view = DirectCast(sender, GridView)
    
            If e.Column.FieldName = "colRunningBalance" And e.IsGetData Then
                 Dim total = 0D
                 For i As Integer = -1 To e.ListSourceRowIndex - 1
                     total += CDec(view.GetListSourceRowCellValue(i + 1, "Amount"))
                 Next
                 e.Value = total
             End If
      End Sub