DataGridView CellEndEdit事件不会更新除第一个之外的任何单元格

时间:2012-02-27 02:24:27

标签: c# datagridview

我很困惑,并且花了很长时间尝试调试此事件。我有一个列,我想在列中添加前3个单元格,并将第4个单元格更新为前3个单元格的总和。

这是我第一次填充前3个单元格时的工作原理。之后,如果我再次尝试编辑任何单元格,第4个单元格将不会更改其值。它仅在我编辑第一个单元格时才有效。

有谁知道为什么会这样?以下是我的代码的一小部分:

int sum = 0;
for (int i = 0; i < 3; i++)
{
  if (dataGridView1.Rows[i].Cells[1].Value == null)
    sum += 0;
  else
    sum += int.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString()) *  int.Parse(dataGridView1.Rows[0].Cells[1].Value.ToString());
}
dataGridView1.Rows[3].Cells[1].Value = sum;

这些代码行在dataGridView1_CellEndEdit函数中,因此在更改单元格的值后会发生。

1 个答案:

答案 0 :(得分:1)

我注意到的一些事情应该得到确认/修复。

if (dataGridView1.Rows[i].Cells[1].Value == null)
    sum += 0; 
else
    sum += int.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString()) * 
        int.Parse(dataGridView1.Rows[0].Cells[1].Value.ToString());

有了这条线,你究竟在做什么?您在此处检查相关行的第二列中的值,但之后您只需添加第一列中的项目(并将每个项目乘以第一行,第二列中的某个数字)。这并不完全清楚你要做什么。这是处理DataGridViews的难点之一,就是修改绑定数据源的猜测要多得多。例如,您确定列(索引)实际引用了您感兴趣的项目吗?你保持一致吗?此外,我认为只有在编辑后从特定单元格中丢失焦点时才会触发CellEndEdit事件。

我将提供一些经过修改的代码,但在不知道其他一些信息的情况下,我可能会误解错误。根据你所说的,你只需要列的前3个值的总和,这就是这个代码的作用。如果这是错的,请告诉我,我会纠正它(如果可以的话)。

// Note: Using DataGridView[int col, int row] syntax
int sum = 0;

for (int i = 0; i < 3; i++)
{
    if (dataGridView1[1,i] != null)
        sum += int.Parse(dataGridView1[1,i].ToString());
}

dataGridView1[1,3] = sum;