以下代码的目的是总结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。表中有多行,但它可以读取的唯一行是第1行。当涉及到具有值的第二行时,它会说出有关的错误。
答案 0 :(得分:6)
当然编程语言不错。它向您报告您要使用的对象引用实际上是空的。
在dgvSelected.Rows[i].Cells[3].Value.ToString()
部分中,以下之一为null
dgvSelected
击> dgvSelected.Rows
击> dgvSelected.Rows[i]
击> dgvSelected.Rows[i].Cells
击> dgvSelected.Rows[i].Cells[3]
dgvSelected.Rows[i].Cells[3].Value
正如您所看到的,您应该进行大量检查以确保这些对象都不为空
编辑:Strikeout其中一些,正如在评论中正确指出的那样,如果那些是null,则不会输入循环。
答案 1 :(得分:1)
就是你,在这一行上,某些东西是空的。
price = price + int.Parse(dgvSelected.Rows[i].Cells[3].Value.ToString())
几乎可以肯定的是,对于抛出异常的i的特定值,没有dgvSelected.Rows[i].Cells[3]
。在该行上设置断点并检查dgvSelected.Rows[i].Cells.Length
。
答案 2 :(得分:0)
您只向dgvSelected
添加一行。我假设,其中有其他行,在其他地方添加了较少的列。检查您访问dgvSelected
的所有位置,并确保不添加少于4列的行
您只需使用调试器来检查问题究竟是什么。
答案 3 :(得分:0)
因为,其他人已经给出了“广泛”的答案。我会建议一个更“苗条”的答案。
将下面的代码行添加为循环中的第一行,控制台输出将为您提供最正确的解决方案。
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对象似乎不太可能为null。 一切顺利。