2011-10-15 3 views
0

Je rencontre une erreur lors de la lecture en boucle des données. J'ai cherché SO et essayé les solutions, mais pas de chance.Pour chaque erreur de boucle: la collection a été modifiée; l'opération d'énumération peut ne pas s'exécuter

La collection a été modifiée; l'opération d'énumération peut ne pas s'exécuter.

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 

L'erreur se produit la première fois que le code touche « Next »
Qu'est-ce qui causer collection a été modifiée; l'opération d'énumération peut ne pas s'exécuter.Comment puis-je résoudre cette erreur?

Répondre

2

Vous ne pouvez pas énumérer une collection en la mettant à jour. Même si ce code fonctionnait réellement, il fonctionnerait pour toujours car vous continueriez à ajouter de plus en plus de lignes et il continuerait à les énumérer.

Vous pouvez modifier légèrement votre approche et faire en sorte que cela fonctionne en utilisant une boucle for avec un compteur d'index et une limite supérieure fixe.

Quelque chose comme cela devrait fonctionner:

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

Vous ajoutez des éléments à une collection que vous êtes en train d'énumérer. Logiquement, il boucle infiniment. Ce genre de situation ne peut pas se produire. Si vous voulez vraiment faire cela, divisez-le en deux en créant un Structure ou Class pour vos données, en ajoutant les éléments à une liste, puis en faisant défiler la liste et en ajoutant les éléments à la table.

Questions connexes