2011-10-15 47 views
0

循環訪問數據行時遇到錯誤。我搜索並嘗試瞭解決方案,但沒有運氣。For Each Loop error:Collection was modified;枚舉操作可能不會執行

收藏被修改;枚舉操作可能不會執行。

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

在更新集合時無法枚舉集合。即使這段代碼實際上確實起作用了,它也會永遠運行,因爲您不斷添加越來越多的行,並且會繼續枚舉它們。

您可以稍微改變您的方法,並通過使用帶有索引計數器和固定上限的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 
2

您正在將項目添加到您正在枚舉的集合中。從邏輯上講,它會無限循環。這種情況不會發生。如果你真的想這樣做,通過爲你的數據創建一個StructureClass,將它們分成兩部分,然後在列表中循環並將項目添加到表格中,將它分成兩部分。

相關問題