在asp.net中排序gridview的列c#

任何人都可以告诉函数在c#asp.net中对gridview的列进行排序。

gridview的数据绑定来自使用linq创建的datacontext。 我想单击列的标题来对数据进行排序。

谢谢!

要做到这一点,您需要做两件事。

  1. 保持排序状态为viewstate(SortDirection和SortExpression)
  2. 您可以根据当前的排序状态生成正确的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)source.Provider.CreateQuery(methodCallExp); } 

db.Products.SortBy(e.SortExpression,e.SortDirection)

查看我的博客文章 ,了解如何执行此操作:

有关在gridview中排序的更多信息可以在这里找到: MSDN Gridview排序用于获取数据的方法无关紧要,可以使用相同的排序。

加:

  AllowSorting="true" 

标签,应该这样做

当我这样做时,它会给出一个错误“GridView’GridView1’触发事件排序,但没有处理。

我之前已经发生了这种情况……我刚刚创建了一个一次性处理程序,然后一切似乎都开始了。 不是最漂亮的解决方案,但它对我有用。

也就是说,我没有在GridView代码中看到任何对数据源的引用。 你需要这样的东西:

  

然后在你的GridView中:

  

在“属性”面板中,双击“排序条目”。 将创建一个新函数。 在此函数中编写代码以填充Gridview。 唯一的区别是基于GridViewSortEventArgs e更改查询

e.SortExpression和
e.SortDirection总是升序:-(

我希望这个非常简短的答案有帮助

用于SQL查询的半伪代码

 string Query= string.Empty; string SortExpression = string.Empty; // HDFSort is an HiddenField !!! protected void SortCommand_OnClick(object sender, GridViewSortEventArgs e) { SortExpression = e.SortExpression; Query = YourQuery + " ORDER BY "+SortExpression +" "+ HDFSort.Value ; HDFSort.Value = HDFSort.Value== "ASC" ? "DESC" : "ASC"; RefreshGridView(); } protected void RefreshGridView() { GridView1.DataSource = DBObject.GetData(Query); GridView1.DataBind(); }