前面写了两篇 前台分页。但是数据少还行 ,条数上千,浏览器就反映迟钝,卡得要死,容易导致浏览器崩溃,用户体验非常不好 。
效果图
前端页面:
<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>页 </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>
分页编写的实体类:
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; } } }
分页属性赋值类:
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; } }
后台代码:
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); } }