我的代码如下,当strFilterText有一个值时,代码工作正常,但如果字符串为空,那么它会筛选没有值的行,这些是我想要显示的行,例如,如果strFilterText包含“shoes”然后datagrid显示包含“shoes”的所有行,但是如果我想找到没有类别的行,即catergory为NULL,那么strFilterText包含“”,我希望它返回类别中的所有内容,但是代码如果strFilterText为“”,则下面显示了包含类别的所有内容。
感谢您的帮助。
strFilterText += " LIKE '%" + txtboxValue.Text + "%'";
performFilter(strFilterText);
}
private void performFilter(string strFilterText)
{
DataTable table = dataGridView1.DataSource as DataTable;
if (table != null)
{
List<DataRow> filteredRows = new List<DataRow>(table.Select(strFilterText));
CurrencyManager cm = (CurrencyManager)BindingContext[dataGridView1.DataSource];
cm.SuspendBinding();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
row.Visible = filteredRows.Contains(((DataRowView)row.DataBoundItem).Row);
}
cm.ResumeBinding();
}
}
答案 0 :(得分:0)
你考虑过使用BindingSource作为DataGridView的DataSource吗?它包含一个名为“Filter”的属性,您可以将过滤器字符串分配给。
但是,您必须更改strFilterText。要过滤,您应该使用 FieldName IS NULL 。您可能也希望在代码中尝试此操作 - 它可能适用于 table.Select ...
答案 1 :(得分:0)
如果字段为空,您可以尝试以不同方式设置过滤器文本:
strFilter += String.IsNullOrEmpty(txtboxValue.Text) ? " = ''" : " LIKE '%" + txtboxValue.Text + "%'";
答案 2 :(得分:0)
尝试将第一行更改为:
strFilterText+= string.IsNullOrEmpty(txtboxValue.Text)? " IS NULL" : " LIKE '%" + txtboxValue.Text + "%'";
答案 3 :(得分:0)
谢谢你,它为我解决了另一个问题
CurrencyManager cm = (CurrencyManager)BindingContext[dataGridView1.DataSource];
cm.SuspendBinding();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
row.Visible = filteredRows.Contains(((DataRowView)row.DataBoundItem).Row);
}
cm.ResumeBinding();