我想要在Asp.net C#中的GRID VIEW中对特定列进行排序的代码。 当我在ASC中对一列进行排序时,当第二列进行排序并尝试排序时,将其作为DESC。我想为每列单独的ASC DESC订单。
答案 0 :(得分:0)
用于排序
保持排序状态为viewstate(SortDirection和SortExpression) 您可以根据当前的排序状态生成正确的linq表达式。 手动处理网格中的Sorting事件并使用我编写的这个帮助器按SortExpression和SortDirection排序:
public static IQueryable SortBy(IQueryable source,string sortExpression,SortDirection direction){ if(source == 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);
}