DataGridView中的Totals Row

时间:2011-04-08 06:23:39

标签: winforms datagridview

我正在开发一个winform应用程序。我想在每列的最后一行显示列的总和。此行必须始终可见。

我正考虑在datagridview下面添加另一个datagridview和记录,并在底部datagridview中显示总和。

如果有更好的方法来完成这项任务?

4 个答案:

答案 0 :(得分:3)

不,需要添加另一个datagridview

解决方案1:请参阅this solution

解决方案2:如果上述链接不是您想要的,那么

您可以尝试手动添加最后一个摘要行,您可以在其中显示所需的信息。例如,您可以尝试执行以下操作:

  
      
  1. 从数据库中读取数据并填写System.Data.DataTable
  2.   
  3. 向新创建的DataTable添加一列 - 可以设置该列   对于最后一个,摘要,行
  4. 为真   
  5. 以编程方式添加一个包含合适摘要数据的额外行
  6.   
  7. 将数据绑定到DataGridView控件
  8.   
  9. 使用适当的事件,粗体或其他图形不同的摘要   row(具有额外列值的行)   设置为true)
  10.   

答案 1 :(得分:1)

您可以按照建议的方式执行此操作,例如放置数据网格视图以显示总和。如果有更多列,你也可以使用它来处理水平滚动。

link

中有另一种方法

另一种可以将行添加到数据源本身以显示总和的方法。

答案 2 :(得分:0)

即使这个问题很老,我也想提出延伸到Niraj Doshis的答案。他的回答适用于数据绑定DataGridView。我最近遇到了在用户可编辑的DataGridView中计算摘要的问题,其解决方案的细节不同。无论如何,它也非常直截了当。我正在更高的抽象级别编写我的函数,它概述了工作流程,但忽略了实现细节。

首先,您必须初始化DataGridView,请参阅

private void InitializeDataGridView()
{
    SetColumnTypes();
    AddEmptyRow();
    AddSummaryRow();
}

我将DataGridView.AllowUsersToAddRows设置为false,因为新行位于摘要行的下方。因此,我添加了一个空行,用户可以填写他的数据。摘要行设置为ReadOnly,因为我们不希望用户编辑它。每当引发CellEndEdit时,我都会使用以下方法更新DataGridView

private void UpdateDataGridView()
{
    RemoveSummaryRow();
    RemoveEmptyRows();
    UpdateRowNumbers();
    AddEmptyRow();
    AddSummaryRow();
}

首先,我删除摘要和所有空行(您必须小心。如果您要删除刚编辑的行,则会抛出异常。我还没弄明白要做到这一点,但我刚刚制定了解决方案。当我提出解决方案时,我会进行修改。)之后我在每一行中设置一个运行编号。这不是真正需要的,而是我实现的细节。最后,我再次添加一个空行,用户可以使用该行添加更多数据,然后计算并添加摘要行。

正如我之前所说,这还不是一个现成的解决方案,而是我的概念可行,但有一些怪癖和错误。

答案 3 :(得分:0)

在下面的示例中,我尝试利用DataGridView的NewRow。 DataGridView通过BindingSource绑定到DataTable。

https://repo.spring.io/libs-milestone/

这是截图

enter image description here