6

我有一个 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()等价物?

4

2 回答 2

7

context.chaps.Local是一个ObservableCollection<T>。ButToBindingList不是一种方法,ObservableCollection<T>而是一种扩展方法DbExtensions

public static BindingList<T> ToBindingList<T>(
    this ObservableCollection<T> source) where T : class;

为了使用此方法并通过 Intellisense 查看它,您需要在您尝试调用的代码文件中包含相应的命名空间ToBindingList()

using System.Data.Entity;
于 2013-05-23T19:52:39.617 回答
1

在将数据源绑定到绑定列表之前,请确保已加载所有行。

context.chaps.load “加载您的数据 gridcontrol1.datasource = context.chaps.Local.ToBindingList()”这将加载网格上的记录。也给你一个新的行来添加新的,或者你也可以更新网格。

于 2015-08-27T06:59:29.897 回答