在GridView ASP.NET的页面索引更改中丢失了排序



我已经在GridView控件中实现了分类分页。代码如下:

<asp:GridView ShowHeaderWhenEmpty="True" CssClass="Grid"                    
            AlternatingRowStyle-CssClass="alt" AllowPaging="True" PageSize="15" OnPageIndexChanging="grdAllRequests_PageIndexChanging"
            PagerStyle-CssClass="pgr" OnSorting="grdAllRequests_Sorting" AllowSorting="True" 
            EmptyDataText="No data to show" ID="grdAllRequests" runat="server" AutoGenerateColumns="false" 
            OnRowDataBound="grdAllRequests_RowDataBound">

下面是背后的代码用于分页和排序

protected void grdAllRequests_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    grdAllRequests.PageIndex = e.NewPageIndex;
    DataTable dt = (DataTable)ViewState["dtAllRequests"];
    BindDataBAL bind = new BindDataBAL();
    bind.BindGridData(grdAllRequests, dt);
}
protected void grdAllRequests_Sorting(object sender, GridViewSortEventArgs e)
{
    DataTable dtrslt = (DataTable)ViewState["dtAllRequests"];
    if (dtrslt.Rows.Count > 0)
    {
        if (Convert.ToString(ViewState["sortdr"]) == "Asc")
        {
            dtrslt.DefaultView.Sort = e.SortExpression + " Desc";
            ViewState["sortdr"] = "Desc";
        }
        else
        {
            dtrslt.DefaultView.Sort = e.SortExpression + " Asc";
            ViewState["sortdr"] = "Asc";
        }
        ViewState["dtAllRequests"] = dtrslt;
        grdAllRequests.DataSource = dtrslt;
        grdAllRequests.DataBind();
    }
}

现在问题是当我单击任何标头时,分类的执行正确,但是当我尝试导航到下一页时,则丢失了分类。不知道怎么了。请帮助。

您必须使用DefaultView.ToTable();

dtrslt.DefaultView.Sort = e.SortExpression + " Desc";
dtrslt = dtrslt.DefaultView.ToTable();

最新更新