2012-08-31 90 views
2

我想要关于在Asp.net C#中的网格视图中对特定列进行排序的代码。 当我在ASC中对一列进行排序,并在第二列进行排序并尝试对其进行排序时,将其作为DESC进行排序。我想为每个列单独使用一个ASC DESC命令。特定列的网格视图排序

+0

你可以添加一些代码的这个问题? –

回答

0

对于排序

保持排序状态是视图状态(SortDirection和的SortExpression) 您生成基于当前排序状态正确LINQ表达式。 手动处理事件排序在网格中,并使用这个帮手,我写的的SortExpression和SortDirection进行排序:

公共静态的IQueryable SortBy(IQueryable的来源,字符串的SortExpression,SortDirection方向){ 如果(来源== NULL){ 抛出新的ArgumentNullException(“source”); }

string methodName = "OrderBy"; 
if (direction == SortDirection.Descending) { 
    methodName += "Descending"; 
} 

var paramExp = Expression.Parameter(typeof(T), String.Empty); 
var propExp = Expression.PropertyOrField(paramExp, sortExpression); 

// p => p.sortExpression 
var sortLambda = Expression.Lambda(propExp, paramExp); 

var methodCallExp = Expression.Call(
          typeof(Queryable), 
          methodName, 
          new[] { typeof(T), propExp.Type }, 
          source.Expression, 
          Expression.Quote(sortLambda) 
         ); 

return (IQueryable<T>)source.Provider.CreateQuery(methodCallExp); 

}