网格视图排序和分页.如何保持分页

本文关键字:分页 何保持 视图 排序 网格 | 更新日期: 2023-09-27 18:14:12

我想对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"属性绑定后为真,但我有一个页面上的所有数据。为什么?

编辑:如果我删除"AllowPaging"或在"Binding"之前设置为true,我有一个异常:一个类型为"System"的异常。附加信息:数据源不支持服务器端数据分页

网格视图排序和分页.如何保持分页

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

可能是你问题的根源。

IF &else语句

尝试在DataBind()之前添加GridView1.AllowPaging = true;

GridView本身不支持排序。这是由数据源完成的。在GridView Web Server控件中排序数据

IQueryable(继承了IEnumerable)在绑定到GridView时不会分页和排序。

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

变化:

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

:

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

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