Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用文本框在数据网格视图中搜索数据?_C#_Database_Datagridview - Fatal编程技术网

C# 如何使用文本框在数据网格视图中搜索数据?

C# 如何使用文本框在数据网格视图中搜索数据?,c#,database,datagridview,C#,Database,Datagridview,以下是我当前的代码: private void searchTextBox_TextChanged(object sender, EventArgs e) { (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name='{0}'", searchTextBox.Text); } 但是,我的数据网格表会过滤所有内容,每当我在文本框中键入内容时,它就会变成

以下是我当前的代码:

private void searchTextBox_TextChanged(object sender, EventArgs e)
    {
        (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name='{0}'", searchTextBox.Text);

    }

但是,我的数据网格表会过滤所有内容,每当我在文本框中键入内容时,它就会变成空白。知道为什么吗?提前谢谢你

只需针对填充网格的数据库创建一个新查询

将文本框文本与LIKE一起使用

编辑:

如果希望网格随搜索更新,请使用AJAX。

看到空白的
DataGridView
可能是由于您的筛选字符串搜索与
文本框
文本的精确匹配

由于您正在
TextBox.TextChanged
事件中更新此筛选器,因此第一次输入字符时-未找到匹配项。例如,给定以下网格:

╔════╦══════╗                    ╔════════╗
║ ID ║ Name ║      searchTextBox ║        ║
╠════╬══════╣                    ╚════════╝
║ 1  ║ Foo  ║
║ 2  ║ Bar  ║
║ 3  ║ Baz  ║
╚════╩══════╝
输入
Bar
将给出以下结果:

╔════╦══════╗                    ╔════════╗
║ ID ║ Name ║      searchTextBox ║ B      ║
╠════╬══════╣                    ╚════════╝
╚════╩══════╝
╔════╦══════╗                    ╔════════╗
║ ID ║ Name ║      searchTextBox ║ Ba     ║
╠════╬══════╣                    ╚════════╝
╚════╩══════╝
╔════╦══════╗                    ╔════════╗
║ ID ║ Name ║      searchTextBox ║ Bar    ║
╠════╬══════╣                    ╚════════╝
║ 2  ║ Bar  ║
╚════╩══════╝
如果是这种情况,我在下面提供了一些选项。如果不是这样,那么你就有一个谜


<> >强>匹配:< /强>考虑使用 改为使用以下事件处理程序,以便仅 输入完整搜索文本后应用:

private void searchTextBox_Leave(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(searchTextBox.Text))
    {
        (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Empty;
    }
    else
    {
        (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name='{0}'", searchTextBox.Text);
    }
}
  • 使用匹配项启动:在文本更改时进行更流畅的过滤:

    private void searchTextBox_TextChanged(object sender, EventArgs e)
    {
        (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name LIKE '{0}%'", searchTextBox.Text);
    }
    
  • 包含匹配项:同样,流体过滤:

    private void searchTextBox_TextChanged(object sender, EventArgs e)
    {
        (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name LIKE '%{0}%'", searchTextBox.Text);
    }
    

  • Ohbouse的答案是最好的,但除非我添加一些东西来获得分数,否则我不允许喜欢它

    所以我要加上这个, 请记住,在Ohbouse的回答中,您过滤了要列出的行,但使用了查询中的列名。用于设置datagridview的数据源的查询

    例如,在我的示例中,“LoginID”在select语句中

    (dataGridViewTheToGrid.DataSource as DataTable).DefaultView.RowFilter = string.Format("LoginID LIKE '{0}%'", textBoxFindUserID.Text);
    

    此外,如果需要多列搜索,请使用此代码

    (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name LIKE '%{0}%' OR ID LIKE '%{0}%'", searchTextBox.Text);
    

    是否确实触发了该事件?如果创建BindingSource以将DataTable绑定到DataGridView,则可以使用BindingSource的“Filter”属性筛选DGV,而无需在每次筛选条件更改时更新数据源。请遵循此步骤。非常感谢你!现在可以了。你介意我再问一个问题吗?如何在datagridview中刷新数据?datagridview1.refresh()都不是;也不是datagridview1.update();适用于Mei如果您使用的是精确匹配,并且您的意思是清空搜索框后刷新数据:请参见“编辑我的答案”。如果您有其他想法,可能需要更多信息,如果信息量很大,可能需要单独提问。我使用了第三种方法,但编译器总是显示错误
    对象引用未设置为对象的实例
    。是什么原因造成的?@TravisSu,这是一个错误。您正在访问的一个对象可能未初始化。@哦,我是否需要初始化
    DataTable
    DefaultView
    (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name LIKE '%{0}%' OR ID LIKE '%{0}%'", searchTextBox.Text);