Bonjour,
Je cherche un moyen pour garder uniquement dans mon DataTable les lignes distinctes par rapport à certains champs.
J'ai cherché et j'ai trouvé un truc qui marche, mais qui ne regarde qu'un champ.
Il commence par trier la DataTable avec le champ, en parcourant les lignes puis il regarde si ce champ de la ligne précedente est égal à celui de la ligne en cours : si non il ajoute la ligne dans une table.
Mais mon soucis c'est que je voudrais supprimer les lignes lorsqu'elles ont les deux premiers champs en commun.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public DataTable SelectDistinct(DataTable TableSource, DataTable TableRetour, string NomChamps) { object LastValue = null; foreach (DataRow dr in TableSource.Select("", NomChamps)) { if (LastValue == null || !(DataColumn.Equals(LastValue, dr[NomChamps]))) { LastValue = dr[NomChamps]; TableRetour.ImportRow(dr); } } return TableRetour; }
Il faut donc que je trie ma DataTable par le premier champ mais aussi après par le deuxième.
Sauf qu'on ne peut pas faire ça dans un DataTable.Select.
J'ai trouvé qu'on pouvais faire un tri multiple avec un DataView, mais après je ne sais pas comment reremplir ma DataTable avec ce DataView.
Si vous avez une autre idée pour garder uniquement les lignes distinctes pour les 2 premiers champs, je suis aussi prenneuse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public DataTable SelectDistinct(DataTable TableSource, DataTable TableRetour, string NomChamps1, string NomChamps2) { DataView dv = new DataView(MaTableObjet); dv.RowFilter = "'" + NomChamps1 + "' ASC, '"+NomChamps2+"' ASC"; // Remplir TableSource avec dv object LastValue1 = null; object LastValue2 = null; foreach (DataRow dr in TableSource.Rows) { if (LastValue == null || !(DataColumn.Equals(LastValue1, dr[NomChamps1])) && !(DataColumn.Equals(LastValue2, dr[NomChamps2]))) { LastValue1 = dr[NomChamps1]; LastValue2 = dr[NomChamps2]; TableRetour.ImportRow(dr); } } return TableRetour; }
Merci d'avance
Partager