Bonsoir à tous, je rencontre un problème que je ne vois pas comment résoudre.
donc j'utilise un class avec la propriété suivante :
dans un datagrid view j'affiche une liste de cette classe de la manière suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 [XmlElement("Lien"), DisplayName("Lien")] public string Href { get { return _href; } set { _href = value; } } //autre propriété de la class
afin de trier la liste sur base de l'entête cliqué du datagrid view, je fait appel à la méthode de cette manière
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 dtGridMarks.AutoGenerateColumns = false; ... int index; index = dtGridMarks.Columns.Add("Href", "Href"); dtGridMarks.Columns[index].DataPropertyName = "Titre"; dtGridMarks.DefaultCellStyle.ForeColor = Color.Black; ...//autre propriété de la class dtGridMarks.DataSource = lst; ...
Ma méthode de tri étant la suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.DataSource = _ctrlrOrder.OrderMarks((List<Mark>)this.DataSource, this.Columns[e.ColumnIndex].HeaderText);
la question est donc comment puis-je faire pour généraliser mon switch en remplacant le x=>x.Href de manière générique et ainsi ne pas faire un cas pour chaques propriétes de la classe.
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 public List<Mark> OrderMarks(List<Mark> lst, string orderOn){ switch(orderOn){ case "Titre" : lst = (_orderDescending == true) ? lst.OrderByDescending(x => x.Titre).ToList() : lst.OrderBy(x => x.Titre).ToList(); break; case "Href" : lst = (_orderDescending == true) ? lst.OrderByDescending(x => x.Href).ToList() : lst.OrderBy(x => x.Href).ToList(); break; default: break; } _orderDescending = (_orderDescending == true) ? false : true; return lst; }
Je pensais éventuellement quelque chose comme :
evdement ca ne marche pas. :-(
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public List<Mark> OrderMarks(List<Mark> lst, string orderOn){ var prop = typeof(Mark).GetProperty(orderOn); lst = lst.OrderByDescending(x => x.prop).ToList(); return lst; }
Partager