List<T>. OrderBy et Reflection
Bonjour,
J'ai une GridView et sur l'event OnSorting j'ai la fonction suivante :
Code:
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
| protected void gvOrders_Sorting(object sender, GridViewSortEventArgs e)
{
//Récupération de la propriété sur laquelle triée
System.Reflection.PropertyInfo property = typeof(OrderBO).GetProperty(e.SortExpression);
//Si type SimpleBO on prend le code comme paramètre de tri
if (property.PropertyType == typeof(SimpleBO))
{
property = typeof(SimpleBO).GetProperty("Code");
}
//Test de l'état courant de la grille
if (this.MyModule.OrderFacade.CurrentGridViewSorting == "DESC")
{
//Mémorisation de l'état actuel de la grille
this.MyModule.OrderFacade.CurrentGridViewSorting = "ASC";
//Appel de la liste courante triée comme souhaitée par l'utilisateur
gvOrders.DataSource = this.MyModule.OrderFacade.CurrentOrdersList.OrderBy(order => typeof(OrderBO).InvokeMember(property.Name, System.Reflection.BindingFlags.GetProperty, null, order, null));
//Actualisation des données
gvOrders.DataBind();
}
else
{
this.MyModule.OrderFacade.CurrentGridViewSorting = "DESC";
gvOrders.DataSource = this.MyModule.OrderFacade.CurrentOrdersList.OrderByDescending(order => typeof(OrderBO).InvokeMember(property.Name, System.Reflection.BindingFlags.GetProperty, null, order, null));
gvOrders.DataBind();
} |
Ma question est : Comment je fais pour "descendre" d'un cran supplémentaire ?
Je veux dire que sur le `typeof(OrderBO).GetProperty(e.SortExpression)` si c'est un type simple (string, int, datetime, etc) tout se passe bien, mais si c'est un objet custom il faudrait que je fasse un `typeof(OrderBO).GetProperty(e.SortExpression).GetProperty("Code")`
En gros en debug sur la property récupérée je vois `OrderBO.Code` alors qu'il me faudrait par exemple `OrderBO.Customer.Code`.
Une suggestion ? Merci d'avance.