Bonjour,
J'ai un Datatable mais je voudrais supprimer certaines lignes sous certaines conditions.
Je voudrais donc supprimer les lignes dont la colonne[XXXX] a pour valeur ZZZZ
Hors je toruve pas comment faire je patauge total.
Version imprimable
Bonjour,
J'ai un Datatable mais je voudrais supprimer certaines lignes sous certaines conditions.
Je voudrais donc supprimer les lignes dont la colonne[XXXX] a pour valeur ZZZZ
Hors je toruve pas comment faire je patauge total.
Tu ne peux modifier une collection sur laquelle tu boucle.
La seule solution pour moi est de créer une liste de DataRow "L", boucler qur les Rows de ta DataTable, et ajouter dans "L" les lignes que tu désire conserver .
Ensuite, tu Clear les lignes de la DataTable, et tu met "L" à la place.
Oki mais j'arrive pas a detexter la valeur X de la colonne[ZZ]
On peut procéder ainsi
Code:
1
2
3
4
5
6
7 DataRow[] rows = maTable.Select("ZZ=X"); // si la valeur est dans une colonne de type string, ne pas oublier d'ajouter les ' ' // DataRow[] rows = maTable.Select("ZZ='X'"); foreach (DataRow row in rows) { matable.Rows.Remove(row); }
Quelle est elle ?
un truc du style : une ligne a ete supprime le foreach ne pourra plus continuer noramlement.
cela revien a ce que je disais au départ: tu ne peux modifier une liste que tu es en train de parcourir... Le truc drole dans le cas du code juste au dessus, c'est qu'il boucle pas sur la liste, mais sur un tableau... essaie ma méthode pour voir si ca fait pareil.
Ta methode ca fonctionne pas je perd le nom de mes colonnes et donc l'affichage par la suite et de plus j'arrive pas a detecter un champs precis cf message au dessus
Je ne comprend pas pourquoi tu perds le nom de tes colonnes... Tu peux en dire plus ? (ex de code ?)
Est ce qu'on peut répondre a ma deuxieme question.
Comment récuperer une ligne d'un dataset ou datatable en fonction de la valeur d'une colonne sans faire un select qui ramene un collection de row qui ne m'interesse pas.
En utilisant Find () ? je ne sais plus si la méthode est dispo à ce niveau.
Si tu connais la valeur de l'ID de ta DataTable, tu peux faire un find car l"ID sera unique. Le find te renverra la DataRow si il trouve ou sinon null.
Pour supprimer des DataRow je fais comme ca:
1) Je recuper l'ID a supprimer:
Boucle sur ton DataTable et si "la colonne[XXXX] a pour valeur ZZZZ" tu rajoute l'ID de ta DataRow dans une ArrayList.
2) Parcours de la liste des ID a supprimer et suppression des DataRow correspondantes.
Boucle sur ta liste d'ID que tu veux supprimer. Pour chaque ID de ta liste, tu fais un DataTable.Find pour recuperer ta row puis tu fait MaDataTable.Rows.Remove(MaRowASupprimer).
Exemple de code :
Ca devrait etre un truc comme ca parmi plusieurs solutions.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 // Operation 1 ArrayList RowsASupprimer = new ArrayList(); foreach(DataRow MaDataRowASupprimer in MaDataTable.Rows) { if(MaDataRowASupprimer["COLONNE_A"].ToString() == "A_SUPPRIMER") { RowsASupprimer.Add(MaDataRowASupprimer["COLONNE_ID"]); } } // Operation 2 Ienumerator EnumRowsASupprimer = MaDataRowASupprimer.GetEnumerator(); while(EnumRowsASupprimer.MoveNext()) { DataRow MaDataRowASupprimer = MaDataRowASupprimer.Find(EnumRowsASupprimer.Current); if(MaDataRowASupprimer != null) { MaDataTable.Rows.Remove(MaDataRowASupprimer); } }
Je valide le principe ;)
Merci validateur. ;)
Mais de rien. :D
Merci j'ai finis par reussir a creer comme je voulais mon dataset a partir d'autre dataset.
Le truc c'est que maintenantje cherche a rendre tout les lignes d'un gridview editable !!!
Comment ca editable ?
Mais si tu as Visual Studio, tu peux editer les colonnes de ta DataGridView et mettre la propriete read-only a false.Code:
1
2
3MaDataGridView.ReadOnly = false; MaDataGridView.EditMode = DataGridViewEditMode.EditOnEnter;
C'est cela que tu cherches ?