For Each循环NullReferenceException

时间:2014-02-13 15:26:04

标签: c# datagridview foreach

我使用foreach循环使用以下代码从我的datagridview中获取数据。

foreach (DataGridViewRow row in this.dataGridMultiSubmit.Rows)
{
    Model = row.Cells[0].Value.ToString();
    Module = row.Cells[1].Value.ToString();
    Section = row.Cells[2].Value.ToString();
    FunctionValue = row.Cells[3].Value.ToString();
    NewValue = row.Cells[4].Value.ToString();
    DefaultValue = row.Cells[5].Value.ToString();
    Description = row.Cells[6].Value.ToString();

    MessageBox.Show(Model + Module + Section + FunctionValue + NewValue + DefaultValue + Description);
}

它会在消息框中正确返回所有行,但是当它通过所有行运行时它会给我NullReferenceException未处理,我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:10)

如果您在迭代所有行时Value中的任何一个null,则对ToString()的调用将抛出异常。

尝试改为:

Model = Convert.ToString(row.Cells[0].Value);

方法Convert.ToString()会进行额外检查。

  • 如果值为null,则返回空字符串。
  • 如果不是null,则会执行ToString()

根据您的评论,您还需要确保不迭代显示在网格底部的新行。有一个名为IsNewRow的内置属性。

  

获取一个值,该值指示该行是否为新记录的行。

foreach (DataGridViewRow row in this.dataGridMultiSubmit.Rows)
{
    if (row.IsNewRow)
        continue;       // skip row, continue on to the next iteration

    ...
}