DataGridView C#搜索给出空值

DataGridView C#搜索给出空值,c#,datagridview,null,C#,Datagridview,Null,我想创建一个简单的程序,通过特定单元格上dataGridView的每一行进行查看。 我让它工作,但如果没有找到我搜索的字符串,它将返回null。搞砸了。代码如下: string targetSearch = textBox2.Text; dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; foreach(DataGridViewRow row in dataGridView1.Rows) { if

我想创建一个简单的程序,通过特定单元格上dataGridView的每一行进行查看。 我让它工作,但如果没有找到我搜索的字符串,它将返回null。搞砸了。代码如下:

string targetSearch = textBox2.Text;

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
foreach(DataGridViewRow row in dataGridView1.Rows)
{
    if (row.Cells[0].Value.ToString().Equals(targetSearch))
    {
        row.Selected = true;
        break;
    }
}

您正在将空值转换为字符串,这将给出
System.NullReferenceException

string targetSearch = textBox2.Text;

dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
foreach(DataGridViewRow row in dataGridView1.Rows)
{
    if (row.Cells[0].Value == null) continue; //add this 
    if (row.Cells[0].Value.ToString().Equals(targetSearch))
    {
        row.Selected = true;
        break;
    }
}

有两件事你可以尝试:

  • 将“AllowUserstoAddRows”设置为False
  • 将foreach循环放在Try-catch块中以处理NullReference异常
  • 这些解决方案适合我。

    示例用户界面


    验证该值是否为空。

    private void btnSearch_Click(object sender, EventArgs e)
    {
       string targetSearch = txtSearch.Text.Trim();
    
       dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
       foreach(DataGridViewRow row in dataGridView1.Rows) {
          if (row.cells[0].value == null)
              continue;
          if(row.cells[0].value.Tostring().Trim().Equals(targetSearch)) {
              row.Selected = true;
              break;
           }
       }
    }
    
    处理NullReference异常

    private void btnSearch_Click(object sender, EventArgs e)
    {
         string targetSearch = txtSearch.Text.Trim();
         dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    
                try
                {
                    foreach (DataGridViewRow row in dataGridView1.Rows)
                    {
                        if (row.Cells[0].Value.ToString().Equals(targetSearch))
                        {
                            row.Selected = true;
                            break;
                        }
                    }
                }
                catch (NullReferenceException ex) {   }
    }
    

    如果DGV设置为
    AllowUserToAddress
    您正在循环通过一个过多的行。如果不是
    null
    ,它应该有什么值?请解释问题中“it”的每个用法指的是什么。将AllowUserToAddRows设置为False。顺便说一句,如果我的问题不够清楚,对不起!但是有人已经修好了,这对mutch不重要,谢谢!