【问题标题】:Totals Row in a DataGridViewDataGridView 中的总计行
【发布时间】:2011-04-08 06:23:39
【问题描述】:
我正在开发一个 winform 应用程序。我想在每列的最后一行显示列的总和。此行必须始终可见。
目前我正在考虑在我的 datagridview 下方添加另一个带有记录的 datagridview,并在底部的 datagridview 中显示总和。
如果有更好的方法来完成这个任务?
【问题讨论】:
标签:
winforms
datagridview
【解决方案1】:
不,需要添加另一个datagridview
解决方案一:请参考this solution
解决方案2:如果上面的链接不是你想要的,那么
您可以尝试手动添加最后一行、摘要行,您可以在其中显示您需要的信息。例如,您可以尝试执行以下操作:
- 从数据库中读取数据并填写 System.Data.DataTable
- 向新创建的 DataTable 添加一列 - 该列可能已设置
最后一行、摘要、行为真
- 以编程方式添加包含合适摘要数据的额外行
- 将数据绑定到 DataGridView 控件
- 使用适当的事件、粗体或其他图形不同的摘要
行(具有额外列值的行
设置为真)
【解决方案2】:
您可以按照您的建议进行操作,例如放置一个 datagridview 来显示总和。如果有更多列,您也可以使用它来处理水平滚动。
在这个link中还有另一种方法
另一种方法是向数据源本身添加行以显示总和。
【解决方案3】:
即使这个问题已经很老了,我也想提议对 Niraj Doshis 的回答进行扩展。他的回答适用于数据绑定的 DataGridView。我最近遇到了在用户可编辑的 DataGridView 中计算摘要的问题,其解决方案在细节上有所不同。无论如何,这也很简单。我在更高的抽象级别上编写函数,它概述了工作流程,但省略了实现细节。
首先你必须初始化 DataGridView,参见
private void InitializeDataGridView()
{
SetColumnTypes();
AddEmptyRow();
AddSummaryRow();
}
我将DataGridView.AllowUsersToAddRows 设置为false,因为新行将位于摘要行下方。因此,我添加了一个空行,用户可以填写他的数据。摘要行设置为只读,因为我们不希望我们的用户编辑它。每当引发 CellEndEdit 时,我都会使用以下方法更新 DataGridView
private void UpdateDataGridView()
{
RemoveSummaryRow();
RemoveEmptyRows();
UpdateRowNumbers();
AddEmptyRow();
AddSummaryRow();
}
首先我删除摘要和所有空行(您必须小心。如果您尝试删除刚刚编辑的行,则会引发异常。我还没有弄清楚如何做到这一点,但我只是提出了解决方案。当我想出解决方案时我会修改。)然后我在每一行中设置一个运行编号。这并不是真正需要的,而是我实现的一个细节。最后我再次添加一个空行,用户可以使用它来添加更多数据,然后计算并添加摘要行。
正如我之前所说,这还不是一个现成的解决方案,而是我的概念,它可以工作,但有一些怪癖和错误。