ASP.Net 即使在转到下一页后也对网格视图进行排序

本文关键字:网格 视图 排序 一页 Net ASP | 更新日期: 2024-10-31 14:47:17

大家好,我在网格视图的排序时遇到了问题。假设我的网格视图有 10 行数据和 2 列,即"名称"和"年龄"。分页设置为每页 5 行数据。当我单击名称时,它排序正确。但是,当我单击下一页时,它再次变为"未排序"。请帮忙!我在下面附加了事件处理程序。

    protected void SearchResultGridView_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SearchDS"] == null)
            Response.Redirect("PESearh.aspx");
        DataTable SearchDT = ((DataSet)ViewState["SearchDS"]).Tables[0];
        string sortExpression = e.SortExpression;
        if (ViewState["SearchSort"] != null && ViewState["SearchSort"].ToString().Length > 0)
        {
            if (!ViewState["SearchSort"].ToString().Contains(sortExpression))
                GridViewSortDirection = SortDirection.Descending;
        }
        else
        {
            GridViewSortDirection = SortDirection.Descending;
        }
        if (GridViewSortDirection == SortDirection.Ascending)
        {
            GridViewSortDirection = SortDirection.Descending;
            sortExpression += " DESC";
            SearchDT.DefaultView.Sort = sortExpression;
        }
        else
        {
            GridViewSortDirection = SortDirection.Ascending;
            sortExpression += " ASC";
            SearchDT.DefaultView.Sort = sortExpression;
        }
        ViewState["SearchSort"] = sortExpression;
        this.SearchResultGridView.DataSource = SearchDT;
        this.SearchResultGridView.DataBind();
    }

和我的页面更改

    protected void SearchResultGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        SearchResultGridView.DataSource = ViewState["SearchDS"];
        SearchResultGridView.PageIndex = e.NewPageIndex;
        SearchResultGridView.DataBind();
    }

我需要帮助,以便上一个排序也对下一页进行排序。请帮忙谢谢!

注意:我不希望在绑定之前对数据进行排序,因为我希望用户先查看数据,然后再决定要绑定的内容。

ASP.Net 即使在转到下一页后也对网格视图进行排序

您似乎正在将排序表达式保存在ViewState["SearchSort"]中。当您更改页面索引时,该值仍应保留在 ViewState 变量中,因此您可以抓取它并再次设置:

SearchDT.DefaultView.Sort = ViewState["SearchSort"].ToString();

不过,在对数据进行排序之前,可能希望先获取DataTable,如下所示:

DataTable SearchDT = ((DataSet)ViewState["SearchDS"]).Tables[0];

然后,您可以改用新DataTable,而不是直接ViewState["SearchDS"]分配GridViewDataSource

SearchResultGridView.DataSource = SearchDT;

在一起,你们有这样的东西:

protected void SearchResultGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    DataTable SearchDT = ((DataSet)ViewState["SearchDS"]).Tables[0];
    SearchDT.DefaultView.Sort = ViewState["SearchSort"].ToString();
    SearchResultGridView.DataSource = SearchDT;
    SearchResultGridView.PageIndex = e.NewPageIndex;
    SearchResultGridView.DataBind();
}

不过,为了安全起见,您可能需要在分配之前先检查 可能确保ViewState["SearchSort"]存在(如果没有,那么您可以给它一个默认值)。