我很困惑,并且花了很长时间尝试调试此事件。我有一个列,我想在列中添加前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函数中,因此在更改单元格的值后会发生。
答案 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;