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

时间:2015-08-04 12:19:38

标签: c# database datagridview

这是我目前的代码:

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

    }

但是,无论何时在文本框中输入内容,我的数据网格表都会过滤所有内容并变为空白。知道为什么吗?提前谢谢!

4 个答案:

答案 0 :(得分:10)

您看到空白DataGridView可能原因是由于您的过滤字符串搜索与TextBox文本的完全匹配。

"Name='{0}'"

因为您要在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  ║
╚════╩══════╝

如果是这种情况,我在下面提供了一些选项。如果情况并非如此,那么你就有了一个谜。

  1. 完全匹配考虑使用 而是以下事件处理程序,以便仅过滤器 在您输入完整的搜索文本后应用:

    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);
        }
    }
    
  2. StartsWith matches:,以便对文字更改进行更多流畅的过滤:

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

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

答案 1 :(得分:1)

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

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

编辑:

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

答案 2 :(得分:1)

OhBeWise答案是最好的,但在我添加一些东西以获得积分之前,我不允许这样做。

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

对于我的示例中的实例" LoginID"在select语句中。

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

答案 3 :(得分:0)

此外,如果您想进行多列搜索,请使用此代码

foreach t_file : my_test_files
    t_name = t.split('.')[0]
    test( t_name, executable(t_name, t_file, ...))
endforeach