删除网格中的一行会导致一个名为“System.InvalidOperationException”的错误。
在我的数据库中成功删除了该行,但是当网格使用我的observable集合时,会发生上述错误。
这是我的代码:
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)
在您对该集合进行枚举时,无法修改集合。
如果要删除项目,请创建新的列表实例:
foreach (var row in grid.SelectedItems.OfType<User>().ToList())
{
...
mUserDataObject.Remove(user);
}
确保添加 System.Linq
命名空间以使用扩展方法。