4

我正在开发一个 C# win-form 应用程序。

在我的表单中,我有与 Binding-Source 绑定的 Data-Grid-View,而 Binding-Source Data-source 是一个实体框架表。

当我使用实体框架时,我不能使用绑定源的过滤器和按数据网格视图的列排序,但是当我不使用实体框架时,我可以使用它们。我如何将它们与实体框架一起使用?

表单加载时我的代码是

contex = new myEntity();
myBindingSource.DataSource = contex.myTable;
4

2 回答 2

4

每个 BindingSource 都有一个属性SupportsFiltering(和SupportsSorting)。如果您将entitySet 设置为 DataSource,这两个属性将自动设置为false!所以有一些可能的解决方案。您可以为您提供一个扩展方法,如此处IEnumberable<T>所示或者您选择使用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上也是如此。

于 2012-08-25T20:20:43.637 回答
0

您标记了实体框架,但没有显示您的模型。假设 MyEntity 是您的 ObjectContext 或 DBContext ,您可以绑定到 DbSet 的本地属性,这是一个支持排序的可观察集合。

myBindingSource.DataSource = contex.myTable.Local;
于 2012-08-25T20:42:07.780 回答