我使用实体框架。当我将实体集绑定到标准DataGridView控件时,我失去了逐个按钮的功能。我甚至尝试将实体集绑定到绑定源,但结果是相同的。
此外,如果我尝试从代码中对列进行排序,我甚至会得到一个未实现接口的异常......标准EF类是否无法排序(会是一个无赖)?不用说,如果将DataView作为数据源提供,则排序有效。
我怎么能解决这个问题?感谢。
答案 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对象(而不是显示的冒泡文本),因此没有默认的分拣机。