我正在通过以下代码在按钮点击事件中在gridview中添加数据:
int row = 0;
dataGridView1.Rows.Add();
row = dataGridView1.Rows.Count - 2;
dataGridView1["Description",row].Value = name;
dataGridView1["Quantity", row].Value = qty.Text;
dataGridView1["Price", row].Value = p;
dataGridView1["Discountcell", row].Value = "0000";
dataGridView1["amt", row].Value = tot;
它的工作非常好。 现在我想要在输入折扣时,折扣应减去总金额。为此,我有以下代码:
foreach (DataGridViewRow item in dataGridView1.Rows)
{
int n = item.Index;
dataGridView1["amt", n].Value = tot - float.Parse(dataGridView1.Rows[n].Cells[3].Value.ToString());
}
这里给出了以下错误:
未处理的类型异常 ' System.NullReferenceException'发生在Sales System1.exe
中附加信息:对象引用未设置为的实例 对象
没有这个减法代码数据被添加到gridview中。但是当我把这个代码放在上面时会出现上述错误。我需要做什么?
答案 0 :(得分:1)
foreach (DataGridViewRow item in dataGridView1.Rows)
{
float f;
int n = item.Index;
if (float.TryParse(dataGridView1.Rows[n].Cells[3].Value.ToString(), out f))
{
dataGridView1["amt", n].Value = tot - f;
}
}
答案 1 :(得分:1)
由于AllowUserToAddRows
已设置为true
,因此dataGridView1.Rows
包含行列表中的编辑器行。
事实上,item
周期中分配给foreach
变量的最后一个值正是该行(编辑器行)。如果您不想将AllowUserToAddRows
设置为false
,则可以使用行本身的IsNewRow
属性跳过处理该行。
foreach (DataGridViewRow item in dataGridView1.Rows)
{
if (item.IsNewRow) break;
dataGridView1["amt", item.Index].Value = tot - float.Parse(item.Cells["Discountcell"].Value.ToString());
}