2014-04-13 52 views
0

刪除網格中的一行會導致一個名爲「System.InvalidOperationException」的錯誤。在網格中刪除ObservableCollection中的一行失敗

該行在我的數據庫中被成功刪除,但當網格過期時,我的可觀察集合發生上述錯誤。

這裏是我的代碼:

UserControlStaff.xaml.cs,而你是枚舉該集合

private void deleteUserData_PreviewKeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Delete) 
     { 
      var grid = (DataGrid)sender; 
      if (grid.SelectedItems.Count > 0) 
      { 
       var Res = MessageBox.Show("Are you sure you want to delete " + grid.SelectedItems.Count + " Users?", "Deleting Records", MessageBoxButton.YesNo, MessageBoxImage.Exclamation); 
       if (Res == MessageBoxResult.Yes) 
       { 
        try 
        { 
         string connectionString = ConfigurationManager.ConnectionStrings["MyApp.Properties.Settings.ConString"].ConnectionString; 
         string queryString = string.Empty; 

         using (SqlConnection connection = new SqlConnection(connectionString)) 
         { 

          foreach (var row in grid.SelectedItems) 
          { 
           User user = row as User; 

           queryString = "DELETE FROM Users WHERE ID = " + user.ID; 
           SqlCommand cmd = new SqlCommand(queryString, connection); 
           SqlDataAdapter sda = new SqlDataAdapter(cmd); 
           DataTable dt = new DataTable("Users"); 
           sda.Fill(dt); 

           mUserDataObject.Remove(user); 
          } 

         } 
        } 
        catch 
        { 
         throw; 
        } 

        MessageBox.Show(grid.SelectedItems.Count + " Users have being deleted!"); 
       } 
      } 
     } 
    } 
+0

什麼是內部異常? –

+0

System.InvalidOperationException:集合已被修改。枚舉操作可能無法執行。 – user3524628

+0

什麼是「mUserDataObject」?爲什麼要創建新的'DataTable'並填充它? –

回答

0

收集不能被修改。

foreach (var row in grid.SelectedItems.OfType<User>().ToList()) 
{ 
    ... 
    mUserDataObject.Remove(user); 
} 

確保添加System.Linq命名空間中使用的擴展方法:

,如果你想刪除的項目列表創建一個新的實例。

+0

非常感謝!完全解決了我的問題! – user3524628

+0

不客氣。樂意效勞..!! –