对于每个循环错误:收集已修改;枚举操作可能无法执行

时间:2011-10-15 18:14:02

标签: asp.net vb.net datarow

循环访问数据行时遇到错误。我搜索了SO并尝试了解决方案,但没有运气。

收藏被修改;枚举操作可能无法执行。

    Dim dRow As DataRow
    For Each dRow In dt.Rows
        dt.Rows.Add(dRow("CustNum"), dRow("SalesRepName"), dRow("mgrid"), "=""" & dRow("midValue") & """", dRow("dba"), dRow("sysDate"), dRow("statusID"))
    Next  

第一次代码点击“Next”时发生错误 什么会导致收集被修改;枚举操作可能无法执行。如何解决此错误?

2 个答案:

答案 0 :(得分:2)

您要将项目添加到您要枚举的集合中。从逻辑上讲,它会无限循环。这种情况不会发生。如果您真的想要这样做,请通过为数据创建StructureClass,将项目添加到列表,然后循环遍历列表并将项目添加到表中,将其拆分为两个。

答案 1 :(得分:2)

更新时无法枚举集合。即使这段代码确实有效,但它会永远运行,因为你不断添加越来越多的行,它会继续枚举它们。

您可以稍微改变您的方法,并通过使用带索引计数器和固定上限的for循环来使其工作。

这样的事情应该有效:

Dim rowCount As Integer = dt.Rows.Count  ' Set upper bound = original row count
Dim index as Integer
For index = 0 To rowCount - 1  ' Iterate through the original set of rows
    Dim dRow as DataRow = dt.Rows.Item(index)  ' Get row by index
    dt.Rows.Add(dRow("CustNum"), dRow("SalesRepName"), dRow("mgrid"), "=""" & dRow("midValue") & """", dRow("dba"), dRow("sysDate"), dRow("statusID"))
Next index