C#:使用参数在DataGridView中选择一行

时间:2012-08-14 12:12:01

标签: c# datagridview

我有一个DataGridView和一个Add New Entry按钮。每次我向数据库添加一个新条目时,我希望程序在DataGridView中选择新条目的行。单击Add New Entry按钮后,将调用以下函数,其中参数studentName和date传递给函数。 DataGridView的名称是dvgPontengHistory。

但是有一个例外:

未将对象引用设置为对象的实例。

在这一行:

if(r.Cells["student_name"].Value.ToString().Contains(studentName))

以下是代码:

   private void selectRow(string studentName, string date)
    {
        int i = 0;
        foreach (DataGridViewRow r in dgvPontengHistory.Rows)
        {
            if(r.Cells["student_name"].Value.ToString().Contains(studentName)) // error in this line
            {
                if (r.Cells["date"].Value.ToString().Contains(date))
                {
                    dgvPontengHistory.Rows[i].Selected = true;
                    return;
                }
            }
            i++;
        }
    }

有关解决此问题的任何提示?感谢。

2 个答案:

答案 0 :(得分:2)

可能是结果集中的行中的student_name为空的情况。这会导致ToString()失败。

我的猜测是你的更新语句将null放入你的表中。

以下是您测试的方式:

(在投掷线上设置断点)。

  private void selectRow(string studentName, string date)
    {
        int i = 0;
        foreach (DataGridViewRow r in dgvPontengHistory.Rows)
        {
            if (r.Cells["student_name"] == null) { throw("can't find cell"); }
            if(r.Cells["student_name"].Value == null) { throw("cell has no value"); }
            if(r.Cells["student_name"].Value.ToString().Contains(studentName)) // error in this line
            {
                if (r.Cells["date"].Value.ToString().Contains(date))
                {
                    dgvPontengHistory.Rows[i].Selected = true;
                    return;
                }
            }
            i++;
        }
    }

答案 1 :(得分:1)

private void selectRow(string studentName, string date)
{
    int i = 0;
    foreach (DataGridViewRow r in dgvPontengHistory.Rows)
    {
        if(r.Cells["student_name"].Value == null) return;
        if(r.Cells["student_name"].Value.ToString().Contains(studentName)) // error in this line
        {
            if (r.Cells["date"].Value.ToString().Contains(date))
            {
                dgvPontengHistory.Rows[i].Selected = true;
                return;
            }
        }
        i++;
    }
}