C# 在网格中,从ObservableCollection删除一行失败
在我的网格中删除一行会导致一个名为“System.InvalidOperationException”的错误 该行在我的数据库中被成功删除,但当网格udates我的可观察集合时,出现上述错误 这是我的密码: UserControlStaff.xaml.csC# 在网格中,从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)
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对象。我想我必须这么做,不是吗?我编辑了你的标题以删除标签。看看背后的原因。非常感谢!完全解决了我的问题!