想要在gridview列中获得相同的字符串值

时间:2016-02-20 19:28:12

标签: c# gridview

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;。 请任何人建议帮助

2 个答案:

答案 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 &&

的简写