使用c#,winforms
我希望用户在文本框中键入数字。如果数字包含在我的数据网格视图的第一列中,那么该行应该突出显示或弹出,或者数据网格视图向下滚动以便用户可以看到它(你们得到了我的意图)
我正在讨论如何实现这一点,我正在尝试一种特殊的技术但是我得到错误:“对象引用未设置为对象的实例。”表示变量searchVal在我的代码的if语句中:
private void button3_Click_1(object sender, EventArgs e)
{
String searchVal = textBox1.Text;
for (int i = 0; i < dataGridView1.RowCount; i++)
{
if (dataGridView1.Rows[i].Cells[0].Value.ToString().Contains(searchVal))
{
// Also Is this how to make the row highlighted?
dataGridView1.Rows[i].Cells[0].Selected = true;
}
}
}
答案 0 :(得分:1)
你应该检查单元格的null
值,考虑到你的行中至少有一个单元格,你应该检查:
if (dataGridView1.Rows[i].Cells[0].Value != null &&
dataGridView1.Rows[i].Cells[0].Value.ToString().Contains(searchVal))
您还可以添加检查以检查细胞计数,如:
if (dataGridView1.Rows[i].Cells.Count > 0 &&
dataGridView1.Rows[i].Cells[0].Value != null &&
dataGridView1.Rows[i].Cells[0].Value.ToString().Contains(searchVal))
答案 1 :(得分:1)
检查dataGridView1中的“添加行”选项,因为它会导致n + 1项计数,当执行for时,n + 1为null,也可以完成上述所有操作。
重新考虑你需要改变的焦点
dataGridView1.Rows[i].Cells[0].Selected = true;
到
dataGridView1.Rows[i].Selected = true;
dataGridView1.CurrentCell = dataGridView1[0, i];
break;
因为你试图把这个行集中起来我猜
最好的问候