【问题标题】:Sum of Column in datagridview in real time C#实时数据网格视图中的列总和C#
【发布时间】:2017-04-13 03:59:59
【问题描述】:

我正在使用数据网格视图。 如何实时获得数量上的总和。我试过这个:

DataTable Dt = (DataTable)dataGridView1.DataSource;

if (int.TryParse(Dt.Compute("SUM(Qty)", "").ToString(), out Sum))
{
    textBoxQtyinStock.Text = Sum.ToString("N0");
}

在datagridview的RowLeave、CellLeave、CellValueChanged、CellValidated事件中调用该函数。但这对我不起作用。我怎样才能完成这项工作?

【问题讨论】:

  • 您考虑过使用DataGridViews CellValueChanged 事件吗?每当单元格中的值发生更改时,都会触发此事件。只需检查更改的单元格是否在“数量”列中,如果是……然后更新文本框。只是一个想法。

标签: c# .net winforms datagridview


【解决方案1】:

DataGridViewCellValueChanged 事件似乎正是您所寻找的。每次单元格值更改时都会触发此事件。当此事件触发时,将检查更改的单元格是否在包含我们要求和的值的列中。如果更改的单元格在我们想要求和的列中,则只需遍历列中的值并更新文本框以反映这个新的求和值。

以下是我所描述的示例。第 4 列(称为“点”)在该列中包含整数值。 CellValueChanged 事件检查更改的单元格是否来自“点”列(第 3 列),如果是,则更新文本框。

当用户输入新值或更改现有值时……文本框应自动更新以反映这些更改。我希望这对你有意义并且对你有用。

DataTable dt = new DataTable();

private void Form_DGV_DataTable_Load(object sender, EventArgs e) {
  dt = Utilities.GetTableWithPlayers(filePath);
  dataGridView1.DataSource = dt;
  UpdatePoints();
}

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
  if (e.ColumnIndex == 3)
    UpdatePoints();
}

private void UpdatePoints() {
  textBox1.Text = dt.Compute("SUM(Points)", "").ToString();
}

【讨论】:

    【解决方案2】:

    您必须计算 Qty 列的 sun 的方法看起来是正确的,但是您是否在调试器中看到 Dt.Compute 返回的内容?

    // Declare an "object"
    object sumQty;
    sumQty = table.Compute("Sum(Qty)", "");
    

    据我所知,您不需要触发任何事件来计算 DataTable 中已有的数据。

    如果您的问题是在插入新数据后如何触发 DataTable 更新 - 这是您需要为正在编辑的单元格处理的 EndEdit 事件。

    我希望这是有道理的。

    【讨论】:

    • 它计算总和但不是实时的。我想在用户输入股票后立即计算总和
    • 好的,那么您只需要确保处理EndEdit事件或DataTable中有新数据后触发的任何事件并调用table.Compute("Sum(Qty)", " ");再次。
    • 你能推荐一个最好的活动吗?
    • 好吧,但是您需要说明如何将数据绑定到数据网格。截图其实并没有说太多!
    • 我错过了确切的问题,您正在寻找正确的事件,请查看stackoverflow.com/questions/19537784/…
    猜你喜欢
    • 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
    相关资源
    最近更新 更多