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 :

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
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
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;
...
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
this.DataSource = _ctrlrOrder.OrderMarks((List<Mark>)this.DataSource, this.Columns[e.ColumnIndex].HeaderText);
Ma méthode de tri étant la suivante:

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;
}
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.

Je pensais éventuellement quelque chose comme :

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;
}
evdement ca ne marche pas. :-(