在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;
但这没有任何意义,请问?
答案 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或空字符串一直对我有效。