Gridview排序和分页。如何保持分页?

时间:2014-07-23 08:05:25

标签: c# asp.net gridview

我想在gridView上进行排序和分页。

我看到几个帖子,我试过这个:

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sortExpression = e.SortExpression;
        ViewState["SortExpression"] = sortExpression;
        switch (e.SortExpression)
        {
            case "Debit":
                if (GridViewSortDirection == SortDirection.Ascending)
                {
                    GridViewSortDirection = SortDirection.Descending;
                    GridView1.AllowPaging = false;
                    GridView1.DataSource = getItems().OrderByDescending(x => x.Debit);
                    GridView1.DataBind();                        
                    GridView1.AllowPaging = true;
                }
                else
                {
                    GridViewSortDirection = SortDirection.Ascending;
                    GridView1.AllowPaging = false;
                    GridView1.DataSource = getItems().OrderBy(x => x.Debit);
                    GridView1.DataBind();                        
                    GridView1.AllowPaging = true;
                }
                break;
        }
    }

排序效果很好,但分页消失了。我把" AllowPaging"绑定后属性为true但我在一个页面上有所有数据。为什么呢?

编辑:如果我删除" AllowPaging"或者在#34; Binding"之前设置为true,我有一个例外:类型' System.NotSupportedException'发生在System.Web.dll中但未在用户代码中处理附加信息:数据源不支持服务器端数据分页。

3 个答案:

答案 0 :(得分:0)

   GridView1.AllowPaging = false;                       
   GridView1.AllowPaging = true;

可能是您问题的根源。

IF & else声明。

答案 1 :(得分:0)

尝试在GridView1.AllowPaging = true;

之前添加DataBind()

答案 2 :(得分:0)

GridView本身不支持排序。这是由数据源完成的。 Sorting Data in a GridView Web Server Control

当数据绑定到GridView时,IQueryable(继承IEnumerable)不会分页和排序。

但是您可以使用.ToList()扩展方法将IEnumerable集合转换为List实例。

更改此内容

 GridView1.DataSource = getItems().OrderByDescending(x => x.Debit);

收件人:

 GridView1.DataSource = getItems().OrderByDescending(x => x.Debit).ToList();

将允许排序和分页工作。 (您可能需要添加Sorting事件)