使用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;
不过这并没有什么,什么想法吗?
试着这样说:
if (textBox1.Text.Length == 0) {
productBindingSource.RemoveFilter();
} else {
productBindingSource.Filter = "ProductName = '" + textBox1.Text +"'";
}
// productDataGridView.DataSource = productBindingSource;
在DataGridView不应该需要的,如果它已经使用productBindingSource再次DataSourced。
http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.filter.aspx
如图那里bindingsource.Filter
是一个字符串值。 默认值是零,所以才这样做:
productBindingSource.Filter = null;
其可能的,虽然你必须做一些事情来更新你的UI,但通常BindingSource的需要本身的照顾。
我发现,“查找”方法不能直接使用的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;
}
我假设你测试,如果文本框在TextChanged事件是空的。 也许当文本长度= 0。我不记得确切为什么,但我经历过的这种情况下,你的方法不会被调用。
如果你正在使用你写一个的BindingList,提供代码。 removefilter我的,设置过滤器为空或空字符串一直为我工作。