Bonjour à tous,
je suis actuellement confronté à un petit problème...
J'essaye de trier en cascade une Liste d'objets dynamiquement.
Pour donner une représentation de ce que je souhaites faire, j'ai créé une fenêtre de tri comme dans Excel où on choisit de trier le résultat sur plusieurs colonnes en même temps.
Il est possible avec linq de combiner des tri, cependant je n'ai vu comment le faire dynamiquement.
On peut par exemple faire comme suit :
Cependant,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 trier = resu.OrderBy(pr => pr.NumTiers).ThenBy(pr => pr.NumPrestataire);
- Ce n'est pas dynamique , on ne peut pas choisir les propriétés de tri, on ne contrôle pas le nombre de niveaux de tri...
Voici ce que j'ai essayé pour l'instant :
Evidemment ici ça ne trie que par mon dernier élément de ma liste TriageColonnes.
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 AdvancedList<DisplayClass.GridDisplayPrestation> resu = (AdvancedList<CAC.DisplayClass.GridDisplayPrestation>)dataGridViewPrestations.DataSource; IOrderedEnumerable<DisplayClass.GridDisplayPrestation> trier = null; foreach (Classes.Trier_OrdreColonne tri in TriageColonnes) { if (tri.Ordre == SortOrder.Ascending) { trier = from pr in resu orderby orderBy(tri.Colonne.NomColonne, pr) ascending select pr; } else { trier = from pr in resu orderby orderBy(tri.Colonne.NomColonne, pr) descending select pr; } } object orderBy(string sortKey, DisplayClass.GridDisplayPrestation prest) { if (sortKey == "NumClient") return prest.NumTiers; else if (sortKey == "NomClient") return prest.NomTiers; else if (sortKey == "NumPrestataire") return prest.NumPrestataire; else if (sortKey == "NomPrestataire") return prest.NomPrestataire; else if (sortKey == "NumActivite") return prest.NumActivite; else if (sortKey == "NomActivite") return prest.NomActivite; else return ""; }
Cependant, je me disais qu'il serait possible de faire un orderBy sur le premier élément de tri et de faire ensuite des ThenBy pour tout les autres, cependant, impossible d'utiliser directement l'expression ThenBy.
Pour acceder à ThenBy, je peux faire comme suit :
Cependant ce n'est plus dynamique et ça serait partir sur une multitude de switch en fonction de la colonne à trier ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 trier = trier.ThenBy(pr => pr.NumTiers);
Quelqu'un d'entre vous aurait une idée ?
Merci d'avance !
Partager