C# 在网格中,从ObservableCollection删除一行失败

C# 在网格中,从ObservableCollection删除一行失败,c#,wpf,observablecollection,delete-row,C#,Wpf,Observablecollection,Delete Row,在我的网格中删除一行会导致一个名为“System.InvalidOperationException”的错误 该行在我的数据库中被成功删除,但当网格udates我的可观察集合时,出现上述错误 这是我的密码: UserControlStaff.xaml.cs private void deleteUserData_PreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Delete)

在我的网格中删除一行会导致一个名为“System.InvalidOperationException”的错误

该行在我的数据库中被成功删除,但当网格udates我的可观察集合时,出现上述错误

这是我的密码:

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!");
                }
            }
        }
    }

对集合进行枚举时,无法修改集合。

如果要删除项目,请创建列表的新实例:

foreach (var row in grid.SelectedItems.OfType<User>().ToList())
{
   ...
   mUserDataObject.Remove(user);
}
foreach(grid.SelectedItems.OfType().ToList()中的变量行)
{
...
删除(用户);
}

确保添加
System.Linq
命名空间以使用扩展方法。

内部异常是什么?System.InvalidOperationException:集合已修改。枚举操作可能无法执行。什么是
mUserDataObject
?为什么要创建新的
DataTable
并填充它?mUserDataObject是ObservableCollection对象。我想我必须这么做,不是吗?我编辑了你的标题以删除标签。看看背后的原因。非常感谢!完全解决了我的问题!