C#使用LIKE从数据网格中删除单元格值不为NULL的行

时间:2009-06-04 13:55:34

标签: c# datagrid

我的代码如下,当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();
        }
}

4 个答案:

答案 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();