为什么IsNewRow属性总是返回false?

时间:2014-01-26 16:28:58

标签: c# winforms datagridview

我有一个名为IncTbl的DataGridView。我正在循环它,我正在添加第4列中的值,索引i到yearSalary变量:

for (int i = 0; i < IncTbl.Rows.Count; i++)
{
    if (IncTbl.CurrentRow.IsNewRow) break;
    yearSalary += (decimal)IncTbl[4, i].Value;
}

我不想添加null,因为我会得到NullReferenceException,所以我使用IsNewRow属性。但是,即使是新行,它也会返回false。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

你并不是唯一一个看过这种行为的人。在this MSDN post中,IsNewRow似乎已被报告为错误。

事件break在这种情况下有点不寻常。您可以考虑按如下方式稍微调整循环:

 for (int i = 0; i < IncTbl.Rows.Count; i++)
        {
            if (!IncTbl.CurrentRow.IsNewRow)
              yearSalary += (decimal)IncTbl[4,i].Value;
        }

答案 1 :(得分:0)

你错了IsNewRow。仅适用于允许用户插入新数据的行。绑定行包含数据库数据,这意味着它不是新数据而是持久数据。

您需要避免NullReferenceException检查行类型。标题行可能搞砸了......

看看这是否有帮助:RowType

答案 2 :(得分:-1)

你可以这样循环,例如:

foreach (DataGridViewRow row in dataGridView1.Rows)
{
     decimal temp;
     if(!row.IsNewRow && decimal.TryParse(row.Cells[4].Value.ToString(), out temp))
        yearSalary += temp;
}