如何重置的BindingSource过滤不了了之(How to reset bindingsourc

2019-07-30 18:03发布

使用BindingSource上的LINQ to SQL,并且已经实施了BindingList在我的项目,我必须用一个Textbox在筛选行DataGridView ,所以当我删除文本框的内容,过滤器应复位不了了之。

我的代码如下:

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

不过这并没有什么,什么想法吗?

Answer 1:

试着这样说:

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

// productDataGridView.DataSource = productBindingSource;

在DataGridView不应该需要的,如果它已经使用productBindingSource再次DataSourced。



Answer 2:

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

如图那里bindingsource.Filter是一个字符串值。 默认值是零,所以才这样做:

productBindingSource.Filter = null;

其可能的,虽然你必须做一些事情来更新你的UI,但通常BindingSource的需要本身的照顾。



Answer 3:

我发现,“查找”方法不能直接使用的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;
    }


Answer 4:

我假设你测试,如果文本框在TextChanged事件是空的。 也许当文本长度= 0。我不记得确切为什么,但我经历过的这种情况下,你的方法不会被调用。

如果你正在使用你写一个的BindingList,提供代码。 removefilter我的,设置过滤器为空或空字符串一直为我工作。



文章来源: How to reset bindingsource filter to nothing