2011-11-10 24 views
1

我有一個WPF DataGrid,我希望能夠更新,插入和刪除。我使用ObservableCollection綁定到DataGrid.DataContext。無法插入或從我的WPF DataGrid中刪除

當DataGrid的SelectionChanged()事件觸發時,我執行Context.SaveChanges()來回寫數據庫。

但是,以上只適用於我更新現有記錄。當我嘗試通過點擊DG中的最後一行來添加新記錄或者當我按下刪除時,SaveChanges()不會執行任何操作。數據不會被添加或刪除。

如何添加或刪除DataGrid中的記錄?這裏是我的DG XAML:

 <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> 

我的代碼背後 - 僞代碼:

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()返回列表我只能夠更新(不插入或刪除)。 但是,當getContects返回IQueryable一切工作完美(但我不能排序:()