Mam DevExpress GridControl dla których jestem ustawienie to źródło danych tak:Powiązanie danych bezpośrednio do zapytania możliwy (DbSet, DbQuery, DbSqlQuery) nie jest obsługiwany Entity Framework 5
var regs = (from vcap in context.chaps
select vcap);
gridControl1.DataSource = new BindingList<chaps>(regs.ToList());
Ale kiedy używać siatki, wiersze, które dodaję lub usuwam, nie zostają zapisane, zapisywane są tylko zmiany w początkowych wierszach.
Gdybym to zrobić:
gridControl1.DataSource = context.chaps.Local;
nie dostanę żadnych wierszy i AddNewRow
nawet nie dodać nowy wiersz wizualnie.
Gdybym to zrobić:
gridControl1.DataSource = context.chaps.ToList();
uzyskać wiersze i może zapisać zmiany do nich; wiersze zostaną usunięte wizualnie, ale nie w db, i nie można AddNewRow
.
Gdybym to zrobić:
gridControl1.DataSource = context.chaps;
otrzymuję ten wyjątek:
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().
ale context.chaps.Local nie ma metody ToBindingList
albo.
Nie sądzę, że jest to problem devexpress, ale raczej nie mam pojęcia, jak poprawnie ustawić źródło danych. Czy istnieje sposób, aby uzyskać odpowiednik context.chaps.Local.ToBindingList()
?
Zrobiłem więc gridControl1.DataSource = DbExtensions.ToBindingList (context.capitulo.Local); co całkowicie działa! Mogę dodawać, modyfikować i usuwać. Poza tym, że nie ładuje wszystkich wierszy, które mam na początku (mój datagrid jest pusty). Masz pomysł, jak to zrobić? A może źle zrozumiałem odpowiedź? –
user2414791
@ user2414791: Standardowa składnia podczas używania metod rozszerzeń jest podobna do zwykłych metod instancji: 'gridControl1.DataSource = context.capitulo.Local.ToBindingList();'. Ale nie sądzę, że rozwiąże to problem. Oczywiście nadal musisz używać 'regs.ToList()' lub 'regs.Load()' lub 'context.chaps.Load()', aby załadować wszystko z DB. 'Local' nie uruchamia kwerendy, po prostu dostarcza encji, które zostały wcześniej załadowane jako' ObservableCollection'. – Slauma
Idealny! Dzięki!!!! – user2414791