特定列的网格视图排序

时间:2012-08-31 09:29:44

标签: c# asp.net gridview

我想要在Asp.net C#中的GRID VIEW中对特定列进行排序的代码。 当我在ASC中对一列进行排序时,当第二列进行排序并尝试排序时,将其作为DESC。我想为每列单独的ASC DESC订单。

1 个答案:

答案 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);

}