2011-11-10 24 views
1

WPF DataGridには、更新、挿入、および削除ができます。 ObservableCollectionを使用してDataGrid.DataContextにバインドします。WPF DataGridに挿入または削除できません

DataGridのSelectionChanged()イベントが発生すると、Context.SaveChanges()を実行してデータベースに書き戻します。

ただし、上記は、既存のレコードを更新する場合にのみ機能します。 DGの最後の行をクリックして新しいレコードを追加しようとすると、またはDeleteキーを押すと、SaveChanges()は何もしません。データは追加または削除されません。

DataGridからレコードを追加または削除するにはどうすればよいですか?

 <DataGrid AutoGenerateColumns="False" Margin="0,12,0,89" Name="grdContact" 
          CanUserAddRows="True" SelectionMode="Single" IsReadOnly="False"  CanUserDeleteRows="True" 
          ItemsSource="{Binding}" 
          IsSynchronizedWithCurrentItem="True" 
          Focusable="True" 
          SelectionChanged="grdContact_SelectionChanged" 

      <DataGrid.Columns> 

      <DataGridTextColumn Header="Last Name" Width="150" Binding="{Binding LastName}"/> 
      <DataGridTextColumn Header="First Name" Width="150" Binding="{Binding FirstName}"/> 
     </DataGrid.Columns> 
    </DataGrid> 

マイコードの後ろに - 擬似コード:ここに私のDGのXAMLで

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
      var CustomerObj = new ObservableCollection<Contact>(GetContacts()); 
      grdContact.DataContext = CustomerObj; 
} 

    private void grdContact_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     Context.SaveChanges(); 
    } 
+0

[EntityCollection']に直接バインドすることを検討することもできます(http://msdn.microsoft.com/en-us/)ライブラリ/ bb738469.aspx)。 – user7116

答えて

1

ObservableCollection<T>が追加または削除された項目の内容を通知していないためです。実際には、データベースコンテキストについては何も知りません!

あなたは、コンテキストからオブジェクトを追加または削除するCustomerObjコレクションを配線する必要があります:

CustomerObj.CollectionChanged += CustomerObj_CollectionChanged; 
... 

private void CustomerObj_CollectionChanged(object sender, 
    NotifyCollectionChangedEventArgs e) 
{ 
    switch (e.Action) 
    { 
     case NotifyCollectionChangedAction.Add: 
      foreach (var item in e.NewItems.Cast<Contact>()) 
       Context.AddObject(item); 
      break; 
     case NotifyCollectionChangedAction.Remove: 
      foreach (var item in e.OldItems.Cast<Contact>()) 
       Context.DeleteObject(item); 
      break; 
     // handle Replace, Move, Reset 
    } 

    Context.SaveChanges(); 
} 
0

私は非常によく似た問題を抱えていました。 getContacts()が返されたときListは更新(挿入または削除)できませんでした。 しかし、getContectsがIQueryableを返すときは、すべてが完璧に動作しますが、ソートできません:(

関連する問題