【问题标题】:use filter of bindingSource with Entity Framework在实体框架中使用 bindingSource 的过滤器
【发布时间】: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;

【问题讨论】:

标签: c# entity-framework bindingsource


【解决方案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 - 对不起,我不明白这个评论。你到底是什么意思,也许你可以根据这个细节更新你的问题 - 提前谢谢
    猜你喜欢
    • 2011-06-18
    • 2019-04-14
    • 2017-11-08
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    相关资源
    最近更新 更多