我按照本教程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.SupportsFiltering
为false
。
我用google搜索但只找到了这个主题MSDN topic,他们建议在加载(Users.Where(...).Load()
)之前过滤数据,而这不是我需要的。我想加载所有记录,然后允许过滤它。
答案 0 :(得分:2)
Filter
的{{1}}属性仅适用于实现BindingSource
接口的列表。由于IBindingListView
仅实现BindingList
(没有过滤功能),IBindingList
属性不执行任何操作。
将数据加载到类似Filter
的内容中,并为bsUsers.DataSource提供列表的过滤元素,例如: List<User>
或用实现IBindingListView的列表替换BindingList。可能的指针来自:Generic IBindingListView Implementations