我用的gridview分页功能实现了,但是排序还不行哦,大家看看怎么搞?》<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" PageSize="5" Height="301px" Width="439px" 
            DataKeyNames="balance" AllowSorting="true" OnSorting="GridView1_Sorting">
            <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>
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllUsers"
            TypeName="GraduationProject.BLL.UserManager"></asp:ObjectDataSource>
下面是后台的代码:    protected void Page_Load(object sender, EventArgs e)
    {
        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"]= "ASC";
            }        }
        else
        {
            ViewState["sortColumn"]= e.SortExpression.ToString();
            ViewState["sortDirection"]= "ASC";
        }    }

解决方案 »

  1.   

    注意我用的是 三层里面的数据方法来绑定的 不是用的dataset
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetAllUsers"
                TypeName="GraduationProject.BLL.UserManager"></asp:ObjectDataSource>所以我点击排序的时候,就出错误了数据源“ObjectDataSource1”不支持 IEnumerable 数据的排序。只对 DataView、DataTable 和 DataSet 支持自动排序。
      

  2.   

    参考:http://www.cnblogs.com/insus/articles/1406440.html
      

  3.   

    问题已经说得很清楚了
    数据源“ObjectDataSource1”不支持 IEnumerable 数据的排序。只对 DataView、DataTable 和 DataSet 支持自动排序。
    所以解决方法我认为可以有两种第一是在GetAllUsers方法底下返回dataTable
    你以前是把数据封装到实体类里面,你不封装直接得数据就可以了第二是不用objectDateSource,改用LinqDataSource
    使用LinqDataSource连排序的代码都不用写了参考
     Stutent[] students;
        protected void Page_Load(object sender, EventArgs e)
        {
            students = new Stutent[]{
                new Stutent("shaka",22,"男"),
                new Stutent("shaka",12,"男"),
                new Stutent("romeo",34,"男"),
                new Stutent("rose",45,"女"),
                new Stutent("ruby",67,"女"),
                new Stutent("kevin",23,"男"),
                new Stutent("jordan",22,"男")
            };
        }
        protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e)
        {
            e.Result = students;
        }不管你封装的是泛型或者数组都可以
      

  4.   

    http://www.cnblogs.com/villison/archive/2007/09/10/888160.html
      

  5.   

    http://www.svnhost.cn/Download/Detail-335.shtml
    http://download.csdn.net/source/1068761
      

  6.   


    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using GraduationProject.BLL;
    public partial class Admin_gd_showuser : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.GridView1.DataSource = UserManager.GetAllUsers();
                this.GridView1.DataBind();
                ViewState["sortColumn"] = "balance";
                ViewState["sortDirection"] = "DESC";
            }
        }    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"] = "ASC";
                }
                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();
        }
    }
    我后台改成这样的代码就可以排序了,但是点击下一页,它又变回了原来的顺序……