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 ?
Dans ce cas la, tu peux boucler sur chaque ligne de ta gridview et dire que chaque ligne est editable.
Mais a mon avis il doit y avoir une autre methode directe....
Le meme post est traité juste a coté...
Bonjour tout le monde j'ai un petit problème
beh j'ai une datatable qui contient une seule colonne et plusieurs ligne
je veux savoir comment faire une condition qui va tester si les lignes sont supérieur a 0 et inférieur a 10,5
mais le if ne fonctionne pas :s :sCode:
1
2
3
4
5
6
7 for( i=0;i<stm.Rows.Count;i++){ //"stm " c'est datatable if((stm.Rows[i][0]>0)&&(stm.Rows[i][0]<10,5){ //on va faire le traitement nécessaire } }
mercii pour votre aide
Joli coup de pelle, surtout pour une simple erreur de syntaxe ...
Les nombres a virgules ne s'écrivent pas ainsi mais plutot (selon la précision après la virgule):
Puis Rows[][] est de base en type object, il faut donc faire un cast pour pouvoir faire une comparaison valable :Code:
1
2
3 10.5f 10.5d // ou 10.5 // mais encore
Code:
1
2
3 if(((int)stm.Rows[i][0]>0)&&((float)stm.Rows[i][0]<10.5f){ //on va faire le traitement nécessaire }
merci pour votre aide
mais il m'affiche une erreur " Le cast spécifié n'est pas valide." :s :s