更新DataGridView内部的数量不会更改总计

时间:2013-09-27 12:21:49

标签: c# winforms ms-access datagridview

我有一个问题。这是我的问题:

我的DataGridView中有这样的东西:

Product Code || Quantity || Description || SubTotal || Total || ....... (and so on)

SM0001 for the Product Code, 100 for the Quantity, AS 5 for the Description, 10,000 for the Sub Total, and 1,000,000 for the Total

以上是正确的,因为10,000100我们得到1,000,000

我将数据添加到DataGridView,当数据添加到DataGridView时,我在DataGridView中单击编辑,当我更改其中的某个值时,它将被更改和更新。但问题是,当我尝试将“数量”从100更改为500时,它没有更改TotalTotal假设更新和更改也基于Quantity * Sub Total(因为我更改了Quantity

这是怎么回事?

当我尝试从DataGridView更新它时,上面是我的问题的代码:

private void DataGridViewCalculation(object sender, EventArgs e)
        {
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                int _quantity = Convert.ToInt32(this.dataGridView1.Rows[i].Cells[1].Value);
                int _subTotal = Convert.ToInt32(this.dataGridView1.Rows[i].Cells[3].Value);
                int _total = Convert.ToInt32(_quantity * _subTotal);

                this.dataGridView1.Rows[i].Cells[4].Value = _total;
            }

            dataGridView1.DataSource = null;
            dataGridView1.DataSource = _ds.Tables[0];
        }

以下是我在100之后将数量更改为500之前和之后的问题的屏幕截图:

enter image description here

当我未将Quantity更改为500(仍为100)

时,屏幕上方会显示

enter image description here

我已将Quantity更改为500,但Total仍然与Quantity 100

相同时,会显示以上屏幕截图

基本上,我希望当用户在DataGridView中单击EDIT并对其进行更改时(假设用户在DataGridView中对Quantity进行更改,DataGridView中的Total也应该更改)

EDITED

dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(this.DataGridViewCalculation);

private void DataGridViewCalculation(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex.Equals(1))
            {
                int _total = Convert.ToInt32(dataGridView1["Quantity", e.RowIndex].Value) * Convert.ToInt32(dataGridView1["SubTotal", e.RowIndex].Value);
                dataGridView1["Total", e.RowIndex].Value = _total.ToString();
            }
        }

注意

当我尝试更改Quantity值时,编辑后的代码仍无效,Total仍然保持不变。

1 个答案:

答案 0 :(得分:2)

您可以使用CellValueChanged事件。更改单元格值时将引发此事件。 基本上你要做的是,

  • 通过检查列索引
  • 检查是否编辑了数量单元格
  • 使用已编辑单元格的Sub Total在同一行中获取Quantity列和RowIndex的值。
  • 将两者相乘并将其设置为Total单元格。

Sample Code

请注意,这是一个示例代码,在执行任何操作之前,您可能必须考虑将值转换为所需的数字格式。

    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex.Equals("column Index of Quantity"))
        {
            double total = Convert.ToDouble(dataGridView1["Subtotal column name", e.RowIndex].Value) * Convert.ToDouble(dataGridView1["Quantity column name", e.RowIndex].Value);
            dataGridView1["Total Column name", e.RowIndex].Value = total.ToString();
        }            
    }