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

C#使用LIKE从单元格值不为NULL的数据网格中删除行,c#,datagrid,C#,Datagrid,下面是我的代码,当strFilterText有一个值时,代码可以正常工作,但是如果字符串为空,那么它会过滤没有值的行,这些行就是我要显示的行,例如,如果strFilterText包含“shoes”,那么数据网格会显示包含“shoes”的所有行但是,如果我想查找没有类别的行,即category为NULL,则strFilterText包含“”,我希望它返回类别中带有“”的所有内容,但下面的代码显示了带有类别的所有内容,如果strFilterText为“” 谢谢你的帮助 strFilterTe

下面是我的代码,当strFilterText有一个值时,代码可以正常工作,但是如果字符串为空,那么它会过滤没有值的行,这些行就是我要显示的行,例如,如果strFilterText包含“shoes”,那么数据网格会显示包含“shoes”的所有行但是,如果我想查找没有类别的行,即category为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();
        }
}
strFilterText+=“类似“%”+txtboxValue.Text+“%”;
performFilter(strFilterText);
}
私有void performFilter(字符串strFilterText)
{
DataTable table=dataGridView1.DataSource作为DataTable;
如果(表!=null)
{
List filteredRows=新列表(table.Select(strFilterText));
CurrencyManager cm=(CurrencyManager)BindingContext[dataGridView1.DataSource];
cm.SuspendBinding();
foreach(dataGridView1.Rows中的DataGridViewRow行)
{
row.Visible=filteredRows.Contains(((DataRowView)row.DataBoundItem).row);
}
cm.ResumeBinding();
}
}

<代码> > p>您是否考虑使用BindingSource作为DATAGIDVIEW的数据源?它包含一个名为“Filter”的属性,您可以将筛选器字符串分配给该属性


但是,您必须更改strFilterText。要筛选,应使用FieldName IS NULL。您可能也希望在代码中尝试此操作-它可能适用于表。选择…

如果字段为空,您可以尝试以不同方式设置筛选文本:

strFilter += String.IsNullOrEmpty(txtboxValue.Text) ? " = ''" : " LIKE '%" + txtboxValue.Text + "%'";

尝试将第一行更改为:

strFilterText+= string.IsNullOrEmpty(txtboxValue.Text)? " IS NULL" : " LIKE '%" + txtboxValue.Text + "%'";

谢谢你,它为我解决了另一个问题

CurrencyManager cm = (CurrencyManager)BindingContext[dataGridView1.DataSource];
cm.SuspendBinding();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
     row.Visible = filteredRows.Contains(((DataRowView)row.DataBoundItem).Row);
}
cm.ResumeBinding();

应该是这样的…但听起来他的字段包含的是空字符串,而不是真正的空值。是的,不太清楚这些值是空还是“”。我相信他现在会成功的。两个答案都有效,但这是我的答案,谢谢格泽尼奥!