【问题标题】:Totals Row in a DataGridViewDataGridView 中的总计行
【发布时间】:2011-04-08 06:23:39
【问题描述】:

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

目前我正在考虑在我的 datagridview 下方添加另一个带有记录的 datagridview,并在底部的 datagridview 中显示总和。

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

【问题讨论】:

标签: winforms datagridview


【解决方案1】:

不,需要添加另一个datagridview

解决方案一:请参考this solution

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

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

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

【讨论】:

    【解决方案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();
      }
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多