我有一个devexpress GridControl,我正在设置它的数据源如下:
var regs = (from vcap in context.chaps
select vcap);
gridControl1.DataSource = new BindingList<chaps>(regs.ToList());
但是当我使用网格时,我添加或删除的行不会被保存,只会保存对初始行的更改。
如果我这样做:
gridControl1.DataSource = context.chaps.Local;
我没有得到任何行,AddNewRow
甚至没有在视觉上添加新行。
如果我这样做:
gridControl1.DataSource = context.chaps.ToList();
我获取行并可以保存对它们的更改;行在视觉上被捕获但不在数据库中,并且不能AddNewRow
。
如果我这样做:
gridControl1.DataSource = context.chaps;
我得到了这个例外:
Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList().
但context.chaps.Local也没有ToBindingList
方法。
我不认为这是devexpress的问题,而是我没有得到如何正确设置数据源。有没有办法获得context.chaps.Local.ToBindingList()
等价物?
答案 0 :(得分:7)
context.chaps.Local
是ObservableCollection<T>
。但ToBindingList
不是ObservableCollection<T>
的方法,而是DbExtensions
中的扩展方法:
public static BindingList<T> ToBindingList<T>(
this ObservableCollection<T> source) where T : class;
为了使用此方法并使用Intellisense查看它,您需要在尝试调用ToBindingList()
的代码文件中包含相应的命名空间:
using System.Data.Entity;
答案 1 :(得分:1)
确保在将数据源绑定到绑定列表之前已加载所有行。
context.chaps.load
&#39;加载您的数据
gridcontrol1.datasource = context.chaps.Local.ToBindingList()
&#39;这将在网格上加载记录。还会为您添加一个新行以添加新行,或者您也可以更新网格。