WinForms中的EF:如何在BindingSource / DGW中过滤数据(.Local.ToBindingList())

时间:2014-04-26 09:41:26

标签: c# winforms entity-framework ado.net entity-framework-6

我按照本教程http://msdn.microsoft.com/en-us/data/jj682076.aspx

生成了EF模型(数据库优先)和DataSource

在我的表单上,我创建了BindingSource(bsUsers)并将DataGridView绑定到它。

以下是我在表单启动时加载数据的方法:

    _myDbContext = new MyDbContext();

    _myDbContext.Users.Load();

    bsUsers.DataSource = _myDbContext.Users.Local.ToBindingList();

它可以工作,我可以使用DataGridView和其他绑定控件添加和修改记录。

但我没想到的是如何过滤数据。例如,我想拥有可以输入用户名(或部分用户名)的文本框,它将隐藏所有其他记录。

看起来ToBidingList()方法返回的BindingList不支持过滤?

我试过这个

bsUsers.Filter = "Id = 1";

bsUsers.Filter = "Username like 'admin'";

但没有效果。 UPD:bsUsers.SupportsFilteringfalse

我用google搜索但只找到了这个主题MSDN topic,他们建议在加载(Users.Where(...).Load())之前过滤数据,而这不是我需要的。我想加载所有记录,然后允许过滤它。

1 个答案:

答案 0 :(得分:2)

Filter的{​​{1}}属性仅适用于实现BindingSource接口的列表。由于IBindingListView仅实现BindingList(没有过滤功能),IBindingList属性不执行任何操作。

将数据加载到类似Filter的内容中,并为bsUsers.DataSource提供列表的过滤元素,例如: List<User>或用实现IBindingListView的列表替换BindingList。可能的指针来自:Generic IBindingListView Implementations