Well, I've solved the problem by handling CellDoubleClick event where the e.RowIndex is equal to zero.
There I sort my collection and reassign the datasource.
private void selGridDataBoundGrid_CellDoubleClick(object sender, GridCellClickEventArgs e)
{
if (e.RowIndex == 0)
{
var sortCol = selGridDataBoundGrid.GridBoundColumns[e.ColIndex - 1].MappingName;
queue.SortColumn = sortCol;
queue.SortOrder = (queue.SortOrder == SortOrder.Ascending) ? SortOrder.Descending : SortOrder.Ascending;
selGridDataBoundGrid.DataSource = queue.GetSortedRequests();
e.Cancel = true;
}
}
I found the code for dynamyc Linq sorting on stackoverflow:
public static IOrderedQueryable
OrderBy(this IQueryable source, string property)
{
return ApplyOrder(source, property, "OrderBy");
}
public static IOrderedQueryable OrderByDescending(this IQueryable source, string property)
{
return ApplyOrder(source, property, "OrderByDescending");
}
public static IOrderedQueryable ThenBy(this IOrderedQueryable source, string property)
{
return ApplyOrder(source, property, "ThenBy");
}
public static IOrderedQueryable ThenByDescending(this IOrderedQueryable source, string property)
{
return ApplyOrder(source, property, "ThenByDescending");
}
static IOrderedQueryable ApplyOrder(IQueryable source, string property, string methodName) {
string[] props = property.Split('.');
Type type = typeof(T);
ParameterExpression arg = Expression.Parameter(type, "x");
Expression expr = arg;
foreach(string prop in props) {
// use reflection (not ComponentModel) to mirror LINQ
PropertyInfo pi = type.GetProperty(prop);
expr = Expression.Property(expr, pi);
type = pi.PropertyType;
}
Type delegateType = typeof(Func<,>).MakeGenericType(typeof(T), type);
LambdaExpression lambda = Expression.Lambda(delegateType, expr, arg);
object result = typeof(Queryable).GetMethods().Single(
method => method.Name == methodName
&& method.IsGenericMethodDefinition
&& method.GetGenericArguments().Length == 2
&& method.GetParameters().Length == 2)
.MakeGenericMethod(typeof(T), type)
.Invoke(null, new object[] {source, lambda});
return (IOrderedQueryable)result;
By Marc Gravell
http://stackoverflow.com/questions/41244/dynamic-linq-orderby
http://stackoverflow.com/questions/41244/dynamic-linq-orderby