这是我目前的代码:
private void searchTextBox_TextChanged(object sender, EventArgs e)
{
(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name='{0}'", searchTextBox.Text);
}
但是,无论何时在文本框中输入内容,我的数据网格表都会过滤所有内容并变为空白。知道为什么吗?提前谢谢!
答案 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 ║
╚════╩══════╝
如果是这种情况,我在下面提供了一些选项。如果情况并非如此,那么你就有了一个谜。
完全匹配考虑使用 而是以下事件处理程序,以便仅过滤器 在您输入完整的搜索文本后应用:
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);
}
}
StartsWith matches:,以便对文字更改进行更多流畅的过滤:
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);
}
答案 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