在asp.net中对gridview列进行排序c#

时间:2008-10-17 17:52:23

标签: c# asp.net linq

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

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

谢谢!

7 个答案:

答案 0 :(得分:9)

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

  1. 保持排序状态为viewstate(SortDirection和SortExpression)
  2. 您可以根据当前的排序状态生成正确的linq表达式。
  3. 手动处理网格中的排序事件,并使用我编写的帮助程序按SortExpression和SortDirection排序:

    public static IQueryable<T> SortBy<T>(IQueryable<T> 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);
    }
    

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

    查看my blog post 如何执行此操作:

答案 1 :(得分:2)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

添加:

  AllowSorting="true"

<asp:GridView />标记,应该这样做

答案 4 :(得分:0)

  

当我单独这样做时,它会出错   “GridView'GridView1'发起了事件   排序未处理。

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

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

<asp:LinqDataSource ID="dsMyDataSource" runat="server"
DataContextTypeName="MyDataContext"
TableName="MyTable"
AllowSort="true" />

然后在你的GridView中:

<asp:GridView ID="gvMyGridView" runat="server" DataSourceID="dsMyDataSource" ... />

答案 5 :(得分:0)

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

更改查询

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

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

答案 6 :(得分:0)

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();
}