[VB.NET] Supprimer des lignes d'un datatable

Résolu
thefada
Messages postés
65
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
25 janvier 2008
- 23 mai 2006 à 11:56
nerix27
Messages postés
86
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
21 juin 2007
- 21 juin 2007 à 15:59
Salut à tous,

J'ai un datatable possédant une colonnes "Quantité" et déjà plusieurs enregistrements. (vb.net)
J'aimerais supprimer tous les enregistrements où la quantité vaut zéro.

Mon idée était:

Dim rowTemp As DataRow = tbl.NewRow

For each rowTemp in tbl.Rows
    If rowTemp("Quantite")=0 Then
       tbl.Rows.Remove(rowTemp)
    End If
Next

Mais ce code plante:
                Collection was modified; enumeration operation may not execute.

Pouvez-vous m'aider?

Merci

thefada

4 réponses

nhervagault
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
35
23 mai 2006 à 23:16
Salut

Il suffit de parcourir la boucle à l'envers, et ca fonctionne.

For i = tbl.Rows.count -1 to 0 step -1
rowTemp = tbl.Rows(i)
If rowTemp("Quantite")=0 Then
tbl.Rows.Remove(rowTemp)
End If
Next

Voila
3
cs_vpoyo
Messages postés
363
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
20 avril 2010
6
23 mai 2006 à 18:04
a mon avis ca vient du fait du for each ta "row" est en cours d'utilisation donc niet verbotten pas touche (tu auras le même problem avec des listes ou hashtable) par contre tu dois pouvoir faire une copie de ton datatable ;-)
tu recherches dans la copie la ligne à supprimer et tu la supprimes de l'original
0
thefada
Messages postés
65
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
25 janvier 2008

24 mai 2006 à 09:37
Je suis sublugué par tant d'astuce, bravo nhervagault, je suppose que tu as déjà eu à faire au meme problème n'est-ce pas?

merci
0
nerix27
Messages postés
86
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
21 juin 2007
2
21 juin 2007 à 15:59
Effectivement, ça marche beaucoup mieux à l'envers.
Allez comprendre pourquoi !!!

Merci nhervagault...
0