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

Winforms 分配给datagridview的实体集将禁用排序,winforms,entity-framework,entity-framework-4,datagridview,Winforms,Entity Framework,Entity Framework 4,Datagridview,我使用实体框架。当我将一个实体集绑定到一个标准DataGridView控件时,我失去了按点击标题排序的功能。我甚至尝试先将实体集绑定到绑定源,但结果是一样的 此外,如果我尝试从代码中对列进行排序,我甚至会得到一个异常,即没有实现接口。。。标准EF类不可排序会是一个麻烦吗?不用说,如果提供DataView作为数据源,则排序是有效的 我怎样才能避开这个问题?谢谢。晚会迟到了,但我想我至少应该发布一个答案。。。有两种方法可以轻松实现这一点——实际上是相同的方法,只是路线略有不同 所以我们有一个基本的E

我使用实体框架。当我将一个实体集绑定到一个标准DataGridView控件时,我失去了按点击标题排序的功能。我甚至尝试先将实体集绑定到绑定源,但结果是一样的

此外,如果我尝试从代码中对列进行排序,我甚至会得到一个异常,即没有实现接口。。。标准EF类不可排序会是一个麻烦吗?不用说,如果提供DataView作为数据源,则排序是有效的


我怎样才能避开这个问题?谢谢。

晚会迟到了,但我想我至少应该发布一个答案。。。有两种方法可以轻松实现这一点——实际上是相同的方法,只是路线略有不同

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

var query = context.Projects
    .Where(x => x.Division == selectedDivision);
加载查询,使实体位于本地缓存中。然后将DGV的绑定源指向本地缓存的同步绑定列表

query.Load();
projectBindingSource.DataSource = context.Projects.Local.ToBindingList(); 
var locs = new ObservableCollection<Location>(query.AsNoTracking().ToList());
locationBindingSource.DataSource = locs.ToBindingList();
或者。。。有时我不想/不需要更改跟踪,或者缓存妨碍了其他操作,因此我需要一个未跟踪的集合

在不跟踪的情况下执行查询,并将其结果加载到一个ObservableCollection中,即.Local。将DGV的绑定源指向ObservableCollection的同步绑定列表

query.Load();
projectBindingSource.DataSource = context.Projects.Local.ToBindingList(); 
var locs = new ObservableCollection<Location>(query.AsNoTracking().ToList());
locationBindingSource.DataSource = locs.ToBindingList();

所有文本、数字和布尔列都将启用排序以进行标题单击。不排序的是导航属性的列:假设项目具有所有者导航属性,由于我让Owner entity的ToString override显示Owner.FullName属性,我将看到一个具有FullName值的Owner列,但我假设排序器仍然将该列的类型视为System.Data.entity对象,而不是显示的冒泡文本,因此没有默认的排序器。

没有人遇到过这种情况问题?看起来很有趣。我们已经开发了Xpress,所以我们选择了直接运行的路线。但我一定会看看你的想法。谢谢你回到这个老问题,派对永远不会结束:。