Suprimer une ligne dans datagrid et datatable [Résolu]

Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Dernière intervention
11 avril 2011
- 9 juin 2009 à 09:35 - Dernière réponse :
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
- 9 juin 2009 à 10:46
Bonjour



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Dans mon application c# j’essayais de supprimer la ligne de mon data grid qui à été sélectionné voici le bout du code :



 





foreach
(DataGridViewRow dgr in grdcaracsParam.Rows)






          {






          








             
if (dgr.Cells[2].Selected)//col Num 3 (0,1,2) le ChekBox






                








                 

foreach
(DataRow row in dt.Rows)//chercher la même ligne dans le datatable dt






                  {






                     
if(row["code_raison"].ToString()==dgr.Cells[0].Value.ToString())//cell[0] Correspond à la colonne du nom : code_raison est d’index =0






                         

dt.Rows.Remove(row);






                    








                  }






 







 







           }





//supression de ligne en assignant au data grid le noveau data table (dt)






         

this
.grdcaracsParam.DataSource = null;






         

this
.grdcaracsParam.DataSource = dt;






 







        }






 






lors de l’execution j’ai le message suivant :





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






 





Pourriez vous me donner une idée


Je vous remercie pour votre aide ...
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
9 juin 2009 à 10:16
3
Merci
Salut

Tu ne peux pas modifier une collection sur laquelle tu fais un foreach, car il la verrouille le temps du parcours (ce qui permet d'éviter justement les problèmes lors de ce parcours (sinon il risquerait d'être perdu).

Un moyen simple est d'utiliser un for :

for (int i = 0; i < dt.Rows.Count; i++)
{
    if(dt.Rows[i]["code_raison"].ToString()...
    {
        dt.Rows.RemoveAt(i);
        break; // Te fait sortir tout de suite de ton for, puisque tu n'as plus besoin de continuer à le parcourir
        // mais si tu devais continuer, il faut faire gaffe à la variable i, puisque toutes les colonnes en dessous de i remonteront d'un cran
        // lors de la suppression. Il calcule à chaque fois dt.Rows.Count, mais il faudrait tout de même faire i--; si tu comptais
        // continuer le parcours
    }
}

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -

Merci krimog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de krimog
Messages postés
186
Date d'inscription
mercredi 14 mars 2007
Dernière intervention
11 avril 2011
9 juin 2009 à 10:41
0
Merci
Merci ça marche !

...
Commenter la réponse de Souliabdo
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
9 juin 2009 à 10:46
0
Merci
N'oublie pas de cliquer sur "Réponse acceptée" si c'est le cas

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Commenter la réponse de krimog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.