在实体框架中使用 bindingSource 的过滤器
Posted
技术标签:
【中文标题】在实体框架中使用 bindingSource 的过滤器【英文标题】:use filter of bindingSource with Entity Framework 【发布时间】:2012-08-20 22:34:57 【问题描述】:我正在开发一个 C# win-form 应用程序。
在我的表单中,我有与 Binding-Source 绑定的 Data-Grid-View,而 Binding-Source Data-source 是一个实体框架表。
当我使用实体框架时,我不能使用绑定源的过滤器和按数据网格视图的列排序,但是当我不使用实体框架时,我可以使用它们。 我如何将它们与实体框架一起使用?
表单加载时我的代码是
contex = new myEntity();
myBindingSource.DataSource = contex.myTable;
【问题讨论】:
How to sort DataGridView when bound to a binding source that is linked to an EF4 Entity 的可能重复项 【参考方案1】:您标记了实体框架,但没有显示您的模型。假设 MyEntity 是您的 ObjectContext 或 DBContext,您可以绑定到 DbSet 的 local property,这是一个支持排序的可观察集合。
myBindingSource.DataSource = contex.myTable.Local;
【讨论】:
【参考方案2】:每个 BindingSource 都有一个属性 SupportsFiltering(和 SupportsSorting)。如果您将 entitySet 设置为 DataSource,这两个属性会自动设置为 false!所以有一些可能的解决方案。您可以为IEnumberable<T>
提供扩展方法,如here 所示,或者您选择使用Linq2Entities
进行过滤/排序。
Linq2Entities 的片段可以是:
myEntity context = new myEntity();
myBindingSource.DataSource = (from m in context.myTable
where m.PROPERTY MEETS CONDITION
select m).ToList<TYPE>();
扩展方法的片段:
// extension method
public static IEnumerable<T> Filter<T>(this IEnumerable<T> list, Func<T, bool> filterParam)
return list.Where(filterParam);
// filtering example
context.myTable.Filter(x => x.ItemName.StartsWith("Test"))
此外,这个主题之前已经讨论过很多次,甚至在SO 上也是如此。
【讨论】:
编辑和更新答案。 @calling saveChanges on bindingSourceChange - 对不起,我不明白这个评论。你到底是什么意思,也许你可以根据这个细节更新你的问题 - 提前谢谢以上是关于在实体框架中使用 bindingSource 的过滤器的主要内容,如果未能解决你的问题,请参考以下文章
Linq 表未出现在 BindingSources 的数据源列表中
如何:用BindingSource将Windows Forms控件绑定到工厂对象