次のように、entities
のリストをデータグリッドビューにバインドしています。
var orders = context.Order.ToList();
BindingList<Order> orderList = new BindingList<Order>(orders);
dataGridView1.DataSource = orderList;
ユーザーはdatagridviewで直接編集または新規追加できます。ユーザーがSave
ボタンをクリックすると、パフォーマンスを最適化するために、変更/新規作成されたエンティティのリストを取得して、挿入/更新を実行したいと思います。どうすればこれを達成できますか?
[〜#〜] edit [〜#〜]グリッドビューに新しい行を追加するように定義します:
BindinList<Order> orders = (BindingList<Order>)dataGridView1.Datasource;
order.Add(new Order());
編集2解決:
BindinList<Order> orders = (BindingList<Order>)dataGridView1.Datasource;
Order order = new Order();
context.Order.Add(order);
order.Add(order);
_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();
_
EFエンティティをDataGridView
にバインドする場合、_DbSet.Local
_ IBindingList
からObservableCollection
を作成することが望ましい場合がよくあります。このようにして、双方向のデータバインディングを取得し、BindingSource.Add()
またはIBindingList.Add()
を介して追加すると、新しいエンティティが自動的にコンテキストに追加されます。正しくバインドされたら、これを機能させる最も簡単な方法は、_DataGridView.AllowUserToAddRows
_をtrueに設定し、ユーザーが入力する新しい行がコンテキストに追加される新しいエンティティになるようにすることです。
_context.Orders.Load();
BindingList<Order> bindingList = context.Orders.Local.ToBindingList();
BindingSource ordersBindingSource = new BindingSource();
ordersBindingSource.DataSource = bindingList;
dataGridView1.DataSource = ordersBindingSource ;
_
.ToBindingList()
を使用するには_System.Data.Entity
_を参照する必要があり、EF4.1以降を使用する必要があります。