2

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

4

1 回答 1

0

用于排序

保持排序状态为 viewstate(SortDirection 和 SortExpression) 你根据当前排序状态生成正确的 linq 表达式。手动处理网格中的 Sorting 事件,并使用我编写的这个助手按 SortExpression 和 SortDirection 进行排序:

public static IQueryable SortBy(IQueryable source, string sortExpression, SortDirection direction) { if (source == null) { throw new 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);

}

于 2012-08-31T09:36:07.323 回答