2013-07-04 10 views
20

modifiye nesnelerin listesini almak için nasıl böyle bir veri tablo görünümüne entities listesini bağlayıcı ediyorum:İdare Framework 5

var orders = context.Order.ToList(); 

BindingList<Order> orderList = new BindingList<Order>(orders); 

dataGridView1.DataSource = orderList; 

Kullanıcı düzenlemek veya doğrudan DataGridView üzerinde yeni ekleyebilir. Kullanıcı, performansı en iyi duruma getirmek için Save düğmesini tıkladığında, ekleme/güncelleştirme gerçekleştirmek için değiştirilmiş/yeni olan varlıkların listesini almak istiyorum. Bunu nasıl başarabilirim? 2 çözün

BindinList<Order> orders = (BindingList<Order>)dataGridView1.Datasource; 

order.Add(new Order()); 

edit:

DÜZENLEME GRIDVIEW için yeni bir satır eklemek tanımla

BindinList<Order> orders = (BindingList<Order>)dataGridView1.Datasource; 

Order order = new Order(); 

context.Order.Add(order); 

order.Add(order); 

cevap

39
List<Object> modifiedOrAddedEntities = context.ChangeTracker.Entries() 
.Where(x => x.State == System.Data.EntityState.Modified 
     || x.State == System.Data.EntityState.Added) 
.Select(x=>x.Entity).ToList(); 

yaratmak için sıklıkla tercih edilir bir DataGridView için EF varlıkları bağlama DbSet.Local'den bir . Bu şekilde, iki yönlü veri tabanına sahip olursunuz ve yeni varlıklarınız, BindingSource.Add() veya IBindingList.Add() aracılığıyla eklerken içeriğe otomatik olarak eklenir. Bu çalışmayı elde etmenin en kolay yolu, bir kez düzgün bir şekilde bağlandığında, DataGridView.AllowUserToAddRows'u doğru ve yeni satırlara ayarlamak, kullanıcıların gireceği yeni satırlar içeriğe eklenir.

context.Orders.Load(); 
BindingList<Order> bindingList = context.Orders.Local.ToBindingList(); 
BindingSource ordersBindingSource = new BindingSource(); 
ordersBindingSource.DataSource = bindingList; 
dataGridView1.DataSource = ordersBindingSource ; 

System.Data.Entity

.ToBindingList() kullanmaya başvurulan gerekir ve siz EF4.1 veya daha büyük kullanıyor olması gerekmektedir.

+0

Hızlı yanıtınız için teşekkür ederiz. Kodunuz değiştirilmiş varlıkların listesini alabilir, ancak yeni varlıkların listesini alamaz. Yeni varlıkları eklemek için kullanılan kodu sağlarım. Anladım mı? –

+0

@DoanCuong, ek cevap detayına bakın. –

+0

Özür dilerim, ama lütfen bana "BindingSource.Add()" veya "IBingdingList.Add()" yöntemini nasıl uygulayacağınızı gösterir misiniz? Ve bir şey daha, 'dbset.local' üzerinde' ToBindingList() 'işlevi yoktur. Bunu yapmanın tek yolu 'var bindingList = new BindingList kullanıldı (context.Orders.Local.ToList()); –

İlgili konular