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);