我有一个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++; } }
有关解决此问题的任何提示?感谢。
答案 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++;
}
}