【问题标题】:DataGridView CellEndEdit Event won't update any cell other than the firstDataGridView CellEndEdit 事件不会更新除第一个以外的任何单元格
【发布时间】:2012-05-31 23:33:57
【问题描述】:

我很困惑,花了很长时间试图调试这个事件。我有一列,我想在列中添加前 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 函数中,所以在我更改单元格的值之后发生。

【问题讨论】:

  • 请不要在标题前加上“C#”之类的前缀。这就是标签的用途。
  • 对不起,约翰,我在这里问的不多,提示一直告诉我要更具体,所以我试着把它扔进去。我会记住这一点,以备将来的问题。跨度>
  • dataGridView1.Rows[0] 在你的 else 语句中应该是 dataGridView1.Rows[i] ???
  • 谢谢Thit,我想我一定是在做一些愚蠢的事情。不知道为什么我不能早点发现。
  • @user1234672:您需要将不同的行值添加到索引为 0 的第 4 行的第 2 列或每行的第 4 列吗?

标签: c# datagridview


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    相关资源
    最近更新 更多