分配给datagridview的实体集将禁用排序

时间:2012-06-13 08:43:36

标签: winforms entity-framework entity-framework-4 datagridview

我使用实体框架。当我将实体集绑定到标准DataGridView控件时,我失去了逐个按钮的功能。我甚至尝试将实体集绑定到绑定源,但结果是相同的。

此外,如果我尝试从代码中对列进行排序,我甚至会得到一个未实现接口的异常......标准EF类是否无法排序(会是一个无赖)?不用说,如果将DataView作为数据源提供,则排序有效。

我怎么能解决这个问题?感谢。

1 个答案:

答案 0 :(得分:0)

参加晚会,但我认为我至少会发布一个答案......有两种方法可以实现这一目标(实际上是相同的方法,只是略有不同的路线)。

所以我们有一个基本的EF上下文查询,预执行。

var query = context.Projects
    .Where(x => x.Division == selectedDivision);

加载查询,使实体位于本地缓存中。然后将DGV的绑定源指向本地缓存的同步BindingList

query.Load();
projectBindingSource.DataSource = context.Projects.Local.ToBindingList(); 

或者...有时我不想/需要更改跟踪或缓存“妨碍”其他操作,所以我需要一个非跟踪的集合。

执行查询而不跟踪,并将其结果加载到ObservableCollection(这是.Local是什么)。将DGV的绑定源指向ObservableCollection的同步BindingList

var locs = new ObservableCollection<Location>(query.AsNoTracking().ToList());
locationBindingSource.DataSource = locs.ToBindingList();

所有text,numeric和bool列都将为header-click启用排序。什么不会排序导航属性的列:假设项目具有所有者导航属性,因为我有所有者实体的ToString()覆盖显示Owner.FullName属性我将看到具有FullName值的所有者列但我假设分拣机仍然将列的类型视为System.Data.Entity对象(而不是显示的冒泡文本),因此没有默认的分拣机。