GridView 后台分页

前面写了两篇 前台分页。但是数据少还行 ,条数上千,浏览器就反映迟钝,卡得要死,容易导致浏览器崩溃,用户体验非常不好 。

效果图

前端页面:

   <div>
       <%-- OnPageIndexChanging="GridView1_PageIndexChanging"--%>
       <asp:GridView ID="GridView1" runat="server"  AutoGenerateColumns="False">
           <Columns>
               <asp:BoundField DataField="Typeid" HeaderText="编号" />
               <asp:BoundField DataField="TypeName" HeaderText="类型名称" />
               <asp:BoundField DataField="Upid" HeaderText="父Id" />
                 <asp:BoundField DataField="d_date" HeaderText="时间" />
               <asp:BoundField DataField="Memo" HeaderText="备注" />
           </Columns>

        

        </asp:GridView>
                    
                  <table  style="font:11px Tahoma; background-color:#cfe3fb;">
                    <tr>
                        <td><asp:Label ID="lblCurrentPage" runat="server" ></asp:Label>页
                        / 共<asp:Label ID="lblTotalPages" runat="server" ></asp:Label>&nbsp;&nbsp;
           
                        </td>
                    <td style="text-align: right;">
                        <asp:LinkButton ID="btnFirst" runat="server" CausesValidation="False"
                            CommandName="Page" Text="首页" CommandArgument="first" OnClick="btnFirst_Click">
                        </asp:LinkButton>
                        <asp:LinkButton ID="btnPrev" runat="server" CausesValidation="False"
                            CommandName="Page" Text="上一页" CommandArgument="prev" OnClick="btnPrev_Click" >
                        </asp:LinkButton>
                        <asp:LinkButton ID="btnNext" runat="server" CausesValidation="False"
                            CommandName="Page" Text="下一页" CommandArgument="next" OnClick="btnNext_Click" >
                        </asp:LinkButton>
                        <asp:LinkButton ID="btnLast" runat="server" CausesValidation="False"
                            CommandName="Page" Text="尾页" CommandArgument="last" OnClick="btnLast_Click" >
                        </asp:LinkButton>
                     
                        <asp:TextBox ID="txtToPage" runat="server" MaxLength="5" CssClass="inputBorder1" Text='1'
                            onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/D/g,'')}" onafterpaste="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/D/g,'')}" AutoPostBack="True" ></asp:TextBox>
                        <asp:LinkButton ID="btnGo" runat="server" CausesValidation="False" CommandArgument="go"
                            CommandName="Page" Text="GO" OnClick="btnGo_Click"></asp:LinkButton>
                         每页显示<asp:DropDownList ID="ddlPageSize" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlPageSize_SelectedIndexChanged">
                <asp:ListItem Value="2" Selected="True">2条</asp:ListItem>
                <asp:ListItem Value="5">5条</asp:ListItem>
               <asp:ListItem Value="10">10条</asp:ListItem>
                       </asp:DropDownList>
                    </td>
                    </tr>
                </table>
    </div>
View Code

分页编写的实体类:

  public class Pagination
    {
            /// <summary>
            /// 总的记录数量
            /// </summary>
            public int TotalRecords { get; set; }

            /// <summary>
            /// 每页记录的条数
            /// </summary>
            public int PageSize { get; set; }

            /// <summary>
            /// 算出总页数
            /// </summary>
            public int TotalPages
            {
                get
                {
                    return (int)Math
                        .Ceiling(
                        TotalRecords * 1.0 /
                        PageSize);

                }
            }

            /// <summary>
            /// 当前页,以1开始
            /// </summary>
            public int CurrentPage { get; set; }



            /// <summary>
            /// 首页
            /// </summary>
            public int First
            {
                get { return 1; }
            }

            /// <summary>
            /// 上一页
            /// </summary>
            public int Prev
            {
                get
                {
                    return
                        CurrentPage - 1 < 1 ?
                        1 : CurrentPage - 1;
                }
            }

            /// <summary>
            /// 下一页
            /// </summary>
            public int Next
            {
                get
                {
                    return CurrentPage + 1 > TotalPages
                        ? TotalPages : CurrentPage + 1;
                }
            }

            /// <summary>
            /// 尾页
            /// </summary>
            public int Last
            {
                get { return TotalPages; }
            }
        
    }
View Code

分页属性赋值类:

   public class PaginationFactory
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="pageSize">每页记录的条数</param>
        /// <param name="currentPage">页码</param>
        /// <param name="recordCount">总条数</param>
        /// <returns></returns>
        public static Pagination Instance(int pageSize, int currentPage, int recordCount)
        {

            Pagination p = new Pagination();
            p.TotalRecords = recordCount;
            p.PageSize = pageSize;
            p.CurrentPage = currentPage;
            return p;
        }
    }
View Code

后台代码:

  public partial class default: System.Web.UI.Page
    {
        SqlConnection connect;
        SqlCommand cmd;
        private int PageSize;//每页显示的条数
     
        private int pageindex;//第几页
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //页面显示的条数
                PageSize = int.Parse(ddlPageSize.SelectedItem.Value);
                //当前页
                pageindex = 1;
                //绑定page的一些属性 
                Pagination pagination = PaginationFactory.Instance(PageSize, pageindex, RecordCount());
                lblCurrentPage .Text = pageindex.ToString();
                lblTotalPages.Text = pagination.TotalPages.ToString();
           
                bind2(pageindex, PageSize);
                       }


        }
  

         /// <summary>
        /// 选择显示数量
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            int pageSize = Convert.ToInt32(this.ddlPageSize.Text);

           
            Pagination pagination = PaginationFactory.Instance(pageSize, 1,RecordCount());


            this.lblTotalPages.Text = pagination.TotalPages.ToString();


           bind2( pagination.CurrentPage, pagination.PageSize);
        }
        /// <summary>
        /// 按页码 查询数据并绑定
        /// </summary>
        /// <param name="currentPage">当前页</param>
        /// <param name="pageSize">页面显示条数</param>
        public void bind2(int currentPage, int pageSize)
        {
            string sql = "";
           
            sql = @"select * from (select ROW_NUMBER() 
            over (order by typeid) as HangHao,
            * 
            from GoodsTypes) pageduserinfo
            where HangHao between 
            (@currentPage -1)*@pagesize +1 
            and @pagesize * @currentPage";
            
            using (connect = new SqlConnection("server=.;database=SuperMarket;uid=sa;pwd=123;"))
            {
                connect.Open();
                 cmd = new SqlCommand(sql, connect);
                cmd.Parameters.AddWithValue("@currentPage", currentPage);
                cmd.Parameters.AddWithValue("@pagesize", pageSize);
                DataSet ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
                GridView1.DataSource = ds;
                GridView1.DataKeyNames = new string[] { "typeid" };
                GridView1.DataBind();
                lblCurrentPage.Text = currentPage.ToString();


            }
        }

       /// <summary>
        /// 获取表的所有数据
        /// </summary>
        /// <returns></returns>
        public int RecordCount()
        {
            int result = 0;
            string connStr = "server=.;database = Test;uid=sa;pwd=123";
            string sql = "select count(*) from userinfo";
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);
                result = Convert.ToInt32(cmd.ExecuteScalar().ToString());
            }
            return result;

        }
        /// <summary>
        /// 上一页
        /// </summary>
        protected void btnPrev_Click(object sender, EventArgs e)
        {
            int pagSize = Convert.ToInt32(this.ddlPageSize.Text);
            int currentPage = Convert.ToInt32(this.lblCurrentPage.Text);


            Pagination p = PaginationFactory.Instance(pagSize, currentPage, RecordCount());



            bind2(p.Prev, p.PageSize);
        }
        //下一页
        protected void btnNext_Click(object sender, EventArgs e)
        {
           
            int pagSize = Convert.ToInt32(this.ddlPageSize.Text);
            int currentPage = Convert.ToInt32(this.lblCurrentPage.Text);

           
            Pagination p = PaginationFactory.Instance(pagSize, currentPage, RecordCount());

            bind2(p.Next, p.PageSize);
        }
        /// <summary>
        /// 尾页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnLast_Click(object sender, EventArgs e)
        {
            int pagSize = Convert.ToInt32(this.ddlPageSize.Text);
            int currentPage = Convert.ToInt32(this.lblCurrentPage.Text);//可以不需要

            Pagination p = PaginationFactory.Instance(pagSize, currentPage,RecordCount());



            bind2( p.Last, p.PageSize);
        }
        /// <summary>
        /// 首页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnFirst_Click(object sender, EventArgs e)
        {
            int pagSize = Convert.ToInt32(this.ddlPageSize.Text);
            int currentPage = 1;         
            Pagination p = PaginationFactory.Instance(pagSize, currentPage, RecordCount());
            bind2(p.CurrentPage, p.PageSize);
        }
        /// <summary>
        /// 跳转
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnGo_Click(object sender, EventArgs e)
        {
            int pageSize = Convert.ToInt32(this.ddlPageSize.Text);
            int currentPage = Convert.ToInt32(this.txtToPage.Text);     
            Pagination pagination = PaginationFactory.Instance(pageSize, currentPage, RecordCount());
            this.txtToPage.Text = "";
           bind2(pagination.CurrentPage, pagination.PageSize);
        }



    }
View Code
原文地址:https://www.cnblogs.com/youchim/p/5504322.html