Tôi có một devexpress GridControl mà tôi đang thiết đó là nguồn dữ liệu như vậy:dữ liệu ràng buộc trực tiếp đến một truy vấn cửa hàng (DbSet, DbQuery, DbSqlQuery) không được hỗ trợ Entity Framework 5
var regs = (from vcap in context.chaps
select vcap);
gridControl1.DataSource = new BindingList<chaps>(regs.ToList());
Nhưng khi tôi sử dụng lưới, hàng tôi thêm hoặc xóa không được lưu, chỉ những thay đổi đối với các hàng ban đầu mới được lưu.
Nếu tôi làm điều này:
gridControl1.DataSource = context.chaps.Local;
Tôi không nhận được bất kỳ hàng, và AddNewRow
không thậm chí thêm một hàng mới trực quan.
Nếu tôi làm điều này:
gridControl1.DataSource = context.chaps.ToList();
tôi nhận được hàng và có thể lưu các thay đổi đối với họ; các hàng được xóa trực quan nhưng không phải trong db và không thể AddNewRow
.
Nếu tôi làm điều này:
gridControl1.DataSource = context.chaps;
tôi nhận được ngoại lệ này:
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().
nhưng context.chaps.Local không có một phương pháp ToBindingList
một trong hai.
Tôi không nghĩ rằng đây là vấn đề của devexpress, nhưng thay vào đó tôi không nhận được cách đặt nguồn dữ liệu đúng cách. Có cách nào để có được số tương đương context.chaps.Local.ToBindingList()
không?
Vì vậy, tôi đã thực hiện gridControl1.DataSource = DbExtensions.ToBindingList (context.capitulo.Local); hoàn toàn hoạt động! Tôi có thể thêm, sửa đổi và xóa. Ngoại trừ việc nó không tải tất cả các hàng tôi có ban đầu (DataGrid của tôi là trống). Có ý tưởng nào để làm việc này không? Hay tôi đã hiểu sai câu trả lời? –
user2414791
@ user2414791: Cú pháp chuẩn khi sử dụng các phương thức mở rộng giống như các phương thức thể hiện thông thường: 'gridControl1.DataSource = context.capitulo.Local.ToBindingList();'. Nhưng tôi không nghĩ rằng nó sẽ khắc phục được vấn đề. Tất nhiên bạn vẫn phải sử dụng 'regs.ToList()' hoặc 'regs.Load()' hoặc 'context.chaps.Load()' để tải bất cứ thứ gì từ DB. 'Local' không chạy một truy vấn, nó chỉ cung cấp các thực thể đã được tải trước đó như là một' ObservableCollection'. – Slauma
Hoàn hảo! Cảm ơn!!!! – user2414791