hue*_*hue 5 c# database datagridview
这是我目前的代码:
private void searchTextBox_TextChanged(object sender, EventArgs e)
{
(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name='{0}'", searchTextBox.Text);
}
Run Code Online (Sandbox Code Playgroud)
但是,每当我在文本框中输入内容时,我的数据网格表都会过滤所有内容并变为空白.知道为什么吗?先感谢您!
OhB*_*ise 13
您看到空白的可能原因DataGridView是您的过滤字符串搜索与TextBox文本的完全匹配.
Run Code Online (Sandbox Code Playgroud)"Name='{0}'"
因为您在TextBox.TextChanged事件中更新此过滤器,所以第一次输入字符时 - 找不到匹配项.例如,给定以下网格:
????????????? ??????????
? ID ? Name ? searchTextBox ? ?
????????????? ??????????
? 1 ? Foo ?
? 2 ? Bar ?
? 3 ? Baz ?
?????????????
Run Code Online (Sandbox Code Playgroud)
输入Bar将给出以下结果:
????????????? ??????????
? ID ? Name ? searchTextBox ? B ?
????????????? ??????????
?????????????
????????????? ??????????
? ID ? Name ? searchTextBox ? Ba ?
????????????? ??????????
?????????????
????????????? ??????????
? ID ? Name ? searchTextBox ? Bar ?
????????????? ??????????
? 2 ? Bar ?
?????????????
Run Code Online (Sandbox Code Playgroud)
如果是这种情况,我在下面提供了一些选项.如果情况并非如此,那么你就有了一个谜.
完全匹配:请考虑使用以下事件处理程序,以便仅在输入完整搜索文本后应用过滤器:
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);
}
}
Run Code Online (Sandbox Code Playgroud)StartsWith匹配:对文本更改进行更流畅的过滤:
private void searchTextBox_TextChanged(object sender, EventArgs e)
{
(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name LIKE '{0}%'", searchTextBox.Text);
}
Run Code Online (Sandbox Code Playgroud)包含匹配:再次,流体过滤:
private void searchTextBox_TextChanged(object sender, EventArgs e)
{
(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Name LIKE '%{0}%'", searchTextBox.Text);
}
Run Code Online (Sandbox Code Playgroud)