如何将bindingsource过滤器重置为空

时间:2012-08-01 17:36:53

标签: .net winforms c#-4.0 bindingsource bindinglist

在LINQ to SQL上使用BindingSource,并且在我的项目中实现了BindingList,我必须使用Textbox来过滤DataGridView中的行,所以当我删除了文本框内容,过滤器应该重置为空。

我的代码如下:

if (textBox1.Text.Length == 0)
{
    productBindingSource.Filter = null;
}
else
{
    productBindingSource.Filter = "ProductName = '" + textBox1.Text +"'";
    //productBindingSource.RemoveFilter();
}
productDataGridView.DataSource = productBindingSource;

但这没有任何意义,请问?

3 个答案:

答案 0 :(得分:2)

http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.filter.aspx

如图所示,bindingsource.Filter是一个字符串值。默认为null,所以只需这样做:

productBindingSource.Filter = null;

虽然你必须做一些事情来更新你的UI,但是绑定源通常会自己解决这个问题。

答案 1 :(得分:0)

我发现“Find”方法不能直接与BindingList一起使用,但幸运的是有另一种方法,使用IEnumerable。在项目中实现BindingList之后,我可以使用下一个代码过滤绑定的datagridview:

    private void button1_Click(object sender, EventArgs e)
    {
        var qry = (from p in dc.Products
                   select p).ToList();
        BindingList<Product> list = new BindingList<Product>(qry);
        IEnumerable<Product> selection = list.Where(m => m.ProductName.Contains(textBox1.Text) == true);
        productBindingSource.DataSource = selection;
    }

答案 2 :(得分:0)

我假设你测试TextChanged事件中textbox是否为空。 当文本长度= 0时,可能没有调用您的方法。 我不记得究竟为什么,但我以前经历过这个案子。

如果您使用的是您编写的BindingList,请提供代码。 RemoveFilter,将Filter设置为null或空字符串一直对我有效。