为什么控件点击表头排序后,点击下一页排序就无效了呢?为什么排序只能点击两次呢?多点几次(只点击一列的表头)就不能排序了呢>?应该改改哪里的代码??……
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" PageSize="5" Height="301px" Width="439px" 
            DataKeyNames="balance" AllowSorting="true" OnSorting="GridView1_Sorting" OnPageIndexChanging="GridView1_PageIndexChanging">
            <Columns>
                <asp:BoundField DataField="Id" HeaderText="编号" SortExpression="Id" />
                <asp:TemplateField HeaderText="用户名" SortExpression="UserName">
                    <ItemTemplate>
                    <a href="gd_showuserinfo.aspx?username=<%# Eval("username") %>"><%# Eval("username") %></a>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="TrueName" HeaderText="真实姓名" SortExpression="TrueName" />
                <asp:BoundField DataField="Provinces" HeaderText="所在省市" SortExpression="Provinces" />
                <asp:TemplateField HeaderText="账户余额" SortExpression="Balance">
                    <ItemTemplate>
                    <a href="gd_showbalance.aspx?username=<%# Eval("UserName") %>"><%# Eval("Balance")%></a>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="会员等级" SortExpression="MemberGrade">
                    <ItemTemplate>
                    <a href="gd_showmembergrade.aspx?UserName=<%# Eval("UserName") %>"><%# Eval("MemberGrade")%></a>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <PagerTemplate>
                <asp:LinkButton CommandName="Page" CommandArgument="First" ID="btnFirst" runat="server" ><< 首页</asp:LinkButton>
                <asp:LinkButton CommandName="Page" CommandArgument="Prev" ID="btnPrev" runat="server">< 上一页</asp:LinkButton>
                    [当前<%= GridView1.PageIndex * GridView1.PageSize+1 %> - <%= GridView1.PageIndex * GridView1.PageSize + GridView1.PageSize%>]
                <asp:LinkButton CommandName="Page" CommandArgument="Next" ID="BtnNext" runat="server" >下一页 ></asp:LinkButton>
                <asp:LinkButton CommandName="Page" CommandArgument="Last" ID="btnLast" runat="server">末页 >></asp:LinkButton> 
            </PagerTemplate>
        </asp:GridView>protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.GridView1.DataSource = UserManager.GetAllUsers();
            this.GridView1.DataBind();
            ViewState["sortColumn"] = "balance";
            ViewState["sortDirection"] = "ASC";
        }
    }
    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        this.GridView1.EditIndex = -1;   
        //判断viewstate中的排序字段,在这之前要在page_load里初始化ViewState["sortColumn"]与ViewState["sortDirection"]
        if (ViewState["sortColumn"].ToString() == e.SortExpression.ToString())
        {
            if ("ASC" == ViewState["sortDirection"].ToString())
            {
                ViewState["sortDirection"] = "DESC";
            }
            else
            {
                ViewState["sortDirection"] = "DESC";
            }
            this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
            this.GridView1.DataBind();
        }
        else
        {
            ViewState["sortColumn"] = e.SortExpression.ToString();
            ViewState["sortDirection"] = "ASC";
            this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
            this.GridView1.DataBind();
        }    }
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        this.GridView1.PageIndex = e.NewPageIndex;  //控制下一页
        this.GridView1.DataSource = UserManager.GetAllUsers();
        this.GridView1.DataBind();
    }

解决方案 »

  1.   

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.GridView1.PageIndex = e.NewPageIndex;  //控制下一页
            this.GridView1.DataSource = UserManager.GetAllUsers();
            this.GridView1.DataBind();
        }你直接调用这个方法取出数据,怎么取出保存的排序信息?
      

  2.   

                
    因为这里的绑定的和GridView1_Sorting里面绑定的不同
      

  3.   

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.GridView1.PageIndex = e.NewPageIndex;  //控制下一页
            this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
            this.GridView1.DataBind();
        }
      

  4.   


    我晕 我就怎么没想到这样解决呢 
    我以为下面不能用 ViewState["sortColumn"] 晕死 
    还剩一个问题了 就是点击表头排序 只能点击两次 多了就不行了 为什么?怎么改?
      

  5.   

    楼主,GridView不是自带启用分页,还有启用排序吗!为什么不用那个!如果用其自带的启用分页的话
    this.GridView1.PageIndex = e.NewPageIndex;  //控制下一页 
            this.GridView1.DataSource = UserManager.GetAllUsers(); 
            this.GridView1.DataBind(); 
    这样就应该能实现你说的分页功能!!
      

  6.   


    当然,是有自带的分页功能,但是用了排序或者回调,就要出问题的,因为我用了<asp:TemplateField>所以没办法,我就用了这种方法来控制现在就还剩一个问题了 就是点击表头排序 只能点击两次 多了就不行了 为什么?怎么改?
      

  7.   

     if ("ASC" == ViewState["sortDirection"].ToString())
                {
                    ViewState["sortDirection"] = "DESC";
                }
                else
                {
                    ViewState["sortDirection"] = "DESC"; // asc ba?
                }
      

  8.   


    我晕,难怪我一直看下面个 DESC不顺眼 ,原来真的是那个的原因
    我一直都没改,晕死,因为那时我的翻页有问题,就没注意它了
      

  9.   

    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    这里做多一个IF就可以
      

  10.   

        protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
        {
            this.GridView1.EditIndex = -1;   
            //判断viewstate中的排序字段,在这之前要在page_load里初始化ViewState["sortColumn"]与ViewState["sortDirection"]
            if (ViewState["sortColumn"].ToString() == e.SortExpression.ToString())
            {
                if ("ASC" == ViewState["sortDirection"].ToString())
                {
                    ViewState["sortDirection"] = "DESC";
                }
                else
                {
                    ViewState["sortDirection"] = "DESC";
                }
                this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
                this.GridView1.DataBind();
            }
            else
            {
                ViewState["sortColumn"] = e.SortExpression.ToString();
                ViewState["sortDirection"] = "ASC";
                this.GridView1.DataSource = UserManager.GetAllUsersByStr(ViewState["sortColumn"].ToString(), ViewState["sortDirection"].ToString());
                this.GridView1.DataBind();
            }    }
    还差一个判断