代码之家  ›  专栏  ›  技术社区  ›  Ben Gribaudo

DataGrid-显示从网格顶部到当前行的运行汇总

  •  1
  • Ben Gribaudo  · 技术社区  · 15 年前

    如何显示数据报中显示的每个记录的特定列的运行汇总?我想把计算逻辑保存在视图模型中。

    期望输出:

    Value      | Running Total
    25           25
    10           35
    -2           33
    

    谢谢您,

    编辑: 请记住,当发生用户触发的数据报排序时,必须重新计算正在运行的总计,因为记录显示顺序已更改。

    我真的想把这个逻辑放到视图模型中,而不是WPF代码中(例如,不使用IValueConverter)。

    5 回复  |  直到 14 年前
        1
  •  0
  •   STO    15 年前

    这是唯一的想法:实际上,DataGrid使用ICollectionView接口( http://msdn.microsoft.com/en-us/library/system.componentmodel.icollectionview.aspx )执行排序(如中所述 http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid(VS.95).aspx 分组、排序和筛选 部分。

    因此,您可以创建实现ICollectionView接口的类,并观察排序和运行汇总的相应更新。

        2
  •  0
  •   Berryl    15 年前

    我不知道有什么推荐/支持/简单的方法可以做到这一点。我能想到的选择是:
    1)在数据网格之外有一些UI元素来保存总计。这很容易绑定到您的虚拟机,但是要解决将要出现的对齐问题有点困难,因为您可能希望在列的正下方得到总计。这是我的建议。
    2)在网格中有一个虚拟的最后一行;这就解决了对齐问题,但在VM中添加了黑客逻辑,而且在其上看起来可能不太好。

    HTH
    贝里尔

        3
  •  0
  •   Kyra    15 年前

    如果你不介意用vb或c回答,那么 this tutorial 显示如何在VB中执行所需操作,以及 this tutorial 用C显示。两者都使用网格中的虚拟列。

        4
  •  0
  •   Ben Gribaudo    14 年前

    我最终通过扩展DataGrid来解决这个问题,以公开一个可以绑定到视图模型上的“Resort has occured”回调的属性。

    细节: http://bengribaudo.com/blog/2010/07/14/3/datagrid-per-row-running-totals

        5
  •  0
  •   Community CDub    8 年前

    查看此答案,了解如何向列表框中添加行计数列,并使用值转换器进行填充。不计算项目,而是将项目的总和相加。如果您的虚拟机中需要总计,这当然不是一个好的解决方案。

    Numbered listbox

    推荐文章