大家往往在分页时感觉不好控制,在这里只需要在GridView里面的PagerTemplate模板里进行设置就可以了。
具体就是在GridView里面添加如下:
<PagerTemplate><div style="text-align:center; color:Blue">
      <asp:LinkButton ID="cmdFirstPage" runat="server" CommandName="Page" CommandArgument="First"
       Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=0 %>">首页</asp:LinkButton>
      <asp:LinkButton ID="cmdPreview" runat="server" CommandArgument="Prev" CommandName="Page"
       Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=0 %>">前页</asp:LinkButton>
      第<asp:Label ID="lblcurPage" ForeColor="Blue" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageIndex+1  %>'></asp:Label>页/共<asp:Label
       ID="lblPageCount" ForeColor="blue" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageCount %>'></asp:Label>页
      <asp:LinkButton ID="cmdNext" runat="server" CommandName="Page" CommandArgument="Next"
       Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=((GridView)Container.Parent.Parent).PageCount-1 %>">后页</asp:LinkButton>
      <asp:LinkButton ID="cmdLastPage" runat="server" CommandArgument="Last" CommandName="Page"
       Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=((GridView)Container.Parent.Parent).PageCount-1 %>">尾页</asp:LinkButton>
       &nbsp;<asp:TextBox ID="txtGoPage" OnTextChanged="txtGoPage_TextChanged" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageIndex+1 %>'
       Width="32px"  CssClass="inputmini"></asp:TextBox>页<asp:Button ID="Button3" runat="server"
           OnClick="Turn_Click" Text="转到" /></div>
</PagerTemplate>
这样只需在后台填写两个事件:GridView1_PageIndexChanging和Turn_Click
 
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
       GridView1.PageIndex = e.NewPageIndex;
        bind();//对GridView进行再次绑定,该函数由自己编写
    }
   protected void Turn_Click(object sender, EventArgs e)
    {        GridView1.PageIndex = int.Parse(((TextBox)GridView1.BottomPagerRow.FindControl("txtGoPage")).Text)-1;
        bind();//对GridView进行再次绑定,该函数由自己编写
    }
   

解决方案 »

  1.   

    分页存储过程sql语句每次都要依据不同情况重写,这种方法很固定方便,通用性强,几乎不用修改,当然每个人有每个人的习惯和方法,这里只提供一种方法供大家交流。
      

  2.   

      请问9楼分页存储过程SQL语句怎么写,能提供下代码不?
      

  3.   

    建议把重写Gridview,封装好它的分页功能
      

  4.   

    GridView好久不用了,现在习惯用Repeater..
      

  5.   

    效率问题呢,如果是几万条记录,每次分页是否都需要将所有记录全部取出来后交给GridView去执行分页操作呢?
      

  6.   

    资料多,用GridView去分页,可能效率不高
      

  7.   

    <asp:GridView runat="server" ID="GridView1" AutoGenerateColumns="false" AllowPaging="true"
                PageSize="4" OnPageIndexChanging="GridView1_PageIndexChanging">
                <Columns>
                    <asp:TemplateField>
                        <HeaderTemplate>
                            标题</HeaderTemplate>
                        <ItemTemplate>
                            <%#Eval("Title")%></ItemTemplate>
                    </asp:TemplateField>
                </Columns>
                <PagerTemplate>
                    <div style="text-align: center; color: Blue">
                        <asp:LinkButton ID="cmdFirstPage" runat="server" CommandName="Page" CommandArgument="First"
                            Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=0 %>">首页</asp:LinkButton>
                        <asp:LinkButton ID="cmdPreview" runat="server" CommandArgument="Prev" CommandName="Page"
                            Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=0 %>">前页</asp:LinkButton>
                        第<asp:Label ID="lblcurPage" ForeColor="Blue" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageIndex+1  %>'></asp:Label>页/共<asp:Label
                            ID="lblPageCount" ForeColor="blue" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageCount %>'></asp:Label>页
                        <asp:LinkButton ID="cmdNext" runat="server" CommandName="Page" CommandArgument="Next"
                            Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=((GridView)Container.Parent.Parent).PageCount-1 %>">后页</asp:LinkButton>
                        <asp:LinkButton ID="cmdLastPage" runat="server" CommandArgument="Last" CommandName="Page"
                            Enabled="<%# ((GridView)Container.Parent.Parent).PageIndex!=((GridView)Container.Parent.Parent).PageCount-1 %>">尾页</asp:LinkButton>
                        &nbsp;<asp:TextBox ID="txtGoPage" runat="server" Text='<%# ((GridView)Container.Parent.Parent).PageIndex+1 %>'
                            Width="32px"></asp:TextBox>页<asp:Button ID="Button3" runat="server" OnClick="Turn_Click"
                                Text="转到" /></div>
                </PagerTemplate>
            </asp:GridView>
    public partial class TestGridView : System.Web.UI.Page
    {
        static DataTable dt = new DataTable();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                CreateDataTable();
                BindGridView();
            }
        }    public void CreateDataTable()
        {
            if (!dt.Columns.Contains("Title"))
            {
                dt.Columns.Add(new DataColumn("Title"));
            }
            DataRow dr = dt.NewRow();
            dr["Title"] = "人工智能(感人科幻之推荐)";
            dt.Rows.Add(dr);
            DataRow dr1 = dt.NewRow();
            dr1["Title"] = "我的兄弟叫顺溜";
            dt.Rows.Add(dr1);
            DataRow dr2 = dt.NewRow();
            dr2["Title"] = "我和僵尸有个约会";
            dt.Rows.Add(dr2);
            DataRow dr3 = dt.NewRow();
            dr3["Title"] = "大话西游";
            dt.Rows.Add(dr3);
            DataRow dr4 = dt.NewRow();
            dr4["Title"] = "重庆森林";
            dt.Rows.Add(dr4);
        }
        public void BindGridView()
        {
            GridView1.DataSource = dt;
            GridView1.DataBind();
        }
        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            BindGridView();
        }
        protected void Turn_Click(object sender, EventArgs e)
        {        GridView1.PageIndex = int.Parse(((TextBox)GridView1.BottomPagerRow.FindControl("txtGoPage")).Text) - 1;
            BindGridView();
        }
    }
      

  8.   

    [十豆三推荐] 关于GridView的分页-万能分页代码(共享了... [ASP.NET])比较无语了……
      

  9.   

    还是觉得Repeater好用,自定义很强,速度绝对的快。
    分页吗,自己写一个自定义控件,系统中用很方便的。
      

  10.   

    个人认为,,还是自己用repeater写一个,,这样才是真正做到随心所欲地改变样式,,用gridview太死板了
      

  11.   

    好东西啊,哈哈,话说回来,<%#>和<%=>到底区别在哪里?
      

  12.   

    推荐一个不错的电子书下载站http://www.yourwebsite.cn
      

  13.   

    top 分页 当你有千万级数据的时候 效率非常低,速度非常慢.
      

  14.   

    很不错的方法,节省了很多后台代码,不过重写下gridview会更爽