这是我当前的代码:
private void searchTextBox_TextChanged(object sender, EventArgs e)
{
(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name='{0}'", searchTextBox.Text);
}
但是,每当我在文本框中输入内容时,我的数据网格表就会过滤所有内容并变为空白。知道为什么吗?先感谢您!
The likely你看到空白的原因DataGridView
是由于您的过滤字符串搜索与TextBox
text.
"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);
}
}
-
开始匹配:对文本更改进行更流畅的过滤:
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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)