int解析DataGridView行值时异常
本文关键字:异常 解析 DataGridView int | 更新日期: 2023-09-27 18:08:04
下面代码的目的是总结在订单系统中会不断添加的datagridview
的所有索引3,并将其显示在一个名为Price
的标签中。
private void Add_Click(object sender, EventArgs e)
{
dgvSelected.Rows.Add(dgvItem.SelectedCells[0].Value.ToString(),
dgvItem.SelectedCells[1].Value.ToString(),
dgvItem.SelectedCells[2].Value.ToString(),
dgvItem.SelectedCells[3].Value.ToString());
for (int i = 0; i < dgvSelected.Rows.Count; i++)
{
price = price + int.Parse(dgvSelected.Rows[i].Cells[3].Value.ToString());
Price.Text = price.ToString();
}
}
问题是它一直在说:
"对象引用未设置为对象的实例。"
…作为以下行的错误:
price = price + int.Parse(dgvSelected.Rows[i].Cells[3].Value.ToString());
表中应该没有null,但错误一直坚持存在null。表中有多行,但它只能读取第一行。当涉及到有值的第二行时,它会显示有关的错误。
当然编程语言没有错。它向您报告您正在尝试使用实际上为空的对象引用。
在dgvSelected.Rows[i].Cells[3].Value.ToString()
部分中,下面有一个是null
-
dgvSelected
dgvSelected.Rows[i]
dgvSelected.Rows[i].Cells
-
dgvSelected.Rows[i].Cells[3]
-
dgvSelected.Rows[i].Cells[3].Value
dgvSelected.Rows
正如你所看到的,你应该做很多检查来确保这些对象都不是空的
编辑:删掉其中一些,正如在注释中正确指出的那样,如果这些为空,则不会进入循环。
是你,这一行有些东西是空的
price = price + int.Parse(dgvSelected.Rows[i].Cells[3].Value.ToString())
几乎可以肯定的是,对于抛出异常的特定值i,没有dgvSelected.Rows[i].Cells[3]
。在该行上设置一个断点并检查dgvSelected.Rows[i].Cells.Length
。
您只向dgvSelected
添加一行。我假设,这里还有其他的行,添加在其他列更少的地方。检查您访问dgvSelected
的所有地方,并确保没有添加少于4列的行。
您可以简单地使用调试器来检查问题究竟是什么。
因为,其他人已经给出了一个'宽泛'的答案。我建议一个"可能"的答案。
将以下代码行作为循环中的第一行追加,控制台输出将给您正确的解决方案。
if(dgvSelected.Rows[i].Cells[3].Value==null){
Console.Writeline(String.Format("Row Index:{0}, Column Index:3 has an unexpected null value. Ignoring this row.", i)
continue;
}
因为,查看您的代码,Row/column对象似乎不太可能为空。祝你一切顺利。