gridview中有复选框列,字符串值为" P"正在检查。所以,我想计算这个列的所有行都有相同的" P"值。我试过下面的代码:
int sumP = 0;
public void countpresent() //To count all Present Students in the gridview
{
for (int i = 0; i < (dgvAttendance.Rows.Count-1); i++)
{
if (dgvAttendance.Rows[i].Cells["Present"].Value.ToString() == "P")
{
sumP += 1;
}
}
lblPresent.Text = sumP.ToString();
}
它适用于所有的刺痛&#34; P&#34;但是当它显示值null时,它会抛出异常&#34;对象引用未设置为对象的实例&#34;。在异常细节中,它显示&#34; NullReferenceException&#34;。 请任何人建议帮助
答案 0 :(得分:3)
在执行操作之前,您可能想要检查dgv行是否为空:
在C#6中:
Thread t2 = new Thread(
new Runnable(){public void run(){f2();}}
);
t1.start();
t2.start();
或旧版本:
if (dgvAttendance.Rows[i].Cells["Present"].Value?.ToString() == "P")
{
sumP += 1;
}
或者实际上,在旧版本中,您可以尝试使用Convert.ToString,因为它旨在处理null
if (dgvAttendance.Rows[i].Cells["Present"].Value != null && dgvAttendance.Rows[i].Cells["Present"].Value?.ToString() == "P")
{
sumP += 1;
}
答案 1 :(得分:1)
它会引发异常,因为:
dgvAttendance.Rows[i].Cells["Present"].Value
为空,您无法对空值执行.ToString()
。
您可以先检查它是否为空:
if (dgvAttendance.Rows[i].Cells["Present"].Value != null &&
dgvAttendance.Rows[i].Cells["Present"].Value.ToString() == "P")
使用C#6,您可以在一行中完成此操作:
if (dgvAttendance.Rows[i].Cells["Present"].Value?.ToString() == "P")
?
是!= null &&