zoukankan      html  css  js  c++  java
  • 查询集合已修改;可能无法执行枚举操作

    以前没有考虑过对collection类型对象操作时for 和foreach的区别,总感觉foreach更方便一些。

    今天写了个FOREARCH循环来操作删除某个 collection的元素,出现异常:查询集合已修改;可能无法执行枚举操作

    查了一下,这个是使用foreach的典型的问题。

    foreach是取只读的,在取的时候数据不能变(包括修改,删除,添加等)。
    要避免这个问题,就应该使用for循环。

    //************************************************

    问题:在foreach里进行循环row.delete()的是否有时候可以,有时候却不可以会报如下错误:
    集合已修改;枚举操作可能无法执行。

    经过调试发现问题所在了:foreach里进行循环row.delete()的时候,行的状态必须是Unchanged,才可以的,新增加的行里的状态是Added,然后抛出了刚才说的异常。
    所以要使用DataTable的 AcceptChanges() 方法把新增加的行的状态置为Unchanged以确认在DataTable里的更改。然后在循环删除的行的时候Row.elete() ,这些行的状态就被置为Deleted了。不需要删除的行还得通过SetAdded()方法来置回原来的Added状态。 这样在DataAdapter里对数据源进行更新的时候,就可以把新增加的记录更新到数据库里去了。

  • 相关阅读:
    前端面试分享
    1
    22
    微信同声传译插件的使用
    微信小程序基于第三方插件微信同声传译,以及一些问题解决办法
    阿里云服务器各种活动集锦
    腾讯云多人直播开发第一天,基于IE游览器的ActiveX开发
    vue组件化学习第三天
    vue组件化学习第二天
    vue组件化学习第一天
  • 原文地址:https://www.cnblogs.com/Fooo/p/1331151.html
Copyright © 2011-2022 走看看