GridView自定义数字分页功能
来源:互联网 发布:春光灿烂猪八戒 知乎 编辑:程序博客网 时间:2024/06/05 15:07
//前台:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyPager.aspx.cs" Inherits="MyPager" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>无标题页</title></head><body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" Width="249px"> <Columns> <asp:BoundField DataField="name" HeaderText="姓名" /> <asp:BoundField DataField="sex" HeaderText="性别" /> <asp:BoundField DataField="age" HeaderText="年龄" /> <asp:BoundField DataField="memo" HeaderText="备注" /> </Columns> </asp:GridView> <asp:Panel ID="Panel1" runat="server" Height="21px" Width="250px"> </asp:Panel> </div> </form></body></html>//后台:public partial class MyPager : System.Web.UI.Page{ BStudent bstu = new BStudent(); int pagesize = 10; //页大小 int intepage = 10; //每轮显示10页 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ViewState["pageindex"] = 1; ViewState["Pages"] = 0; ViewState["Pager"] = 0; BindGridView(); } CreatePager(); } /// <summary> /// 绑定数据 /// </summary> private void BindGridView() { int PageCount = 0; DataTable dt = bstu.GetStudents(PageIndex, pagesize, ref PageCount); //返回数据的方法 Pages = int.Parse(System.Math.Round(PageCount * 1.0 / pagesize, 0).ToString()); GridView1.DataSource = dt; GridView1.DataBind(); } #region 分页实现 //创建页码 private void CreatePager() { if (Pages <= intepage) //当页面不超过一轮时 { for (int i = 1; i <= Pages; i++) { LinkButton lb = new LinkButton(); lb.Text = i.ToString(); lb.ID = "lb" + i.ToString(); lb.ToolTip = "第" + i.ToString() + "页"; lb.Click += new EventHandler(lb_Click); Panel1.Controls.Add(lb); Literal li = new Literal(); li.Text = " "; Panel1.Controls.Add(li); } } else { Panel1.Controls.Clear(); if (Pager > 0) //添加向前翻动 { LinkButton Prev = new LinkButton(); Prev.Text = "<<"; Prev.ID = "Prev"; Prev.ToolTip = "向上翻一轮"; Prev.Click += new EventHandler(Prev_Click); Panel1.Controls.Add(Prev); Literal li = new Literal(); li.Text = " "; Panel1.Controls.Add(li); } PageIndex = Pager * intepage + 1; for (int i = Pager * intepage + 1; i <= ((Pager + 1) * intepage > Pages ? Pages : (Pager + 1) * intepage); i++) { LinkButton lb = new LinkButton(); lb.Text = i.ToString(); lb.ID = "lb" + i.ToString(); lb.ToolTip = "第" + i.ToString() + "页"; lb.Click += new EventHandler(lb_Click); Panel1.Controls.Add(lb); Literal li = new Literal(); li.Text = " "; Panel1.Controls.Add(li); } if ((Pager + 1) * intepage < Pages)//添加向后翻动 { LinkButton Next = new LinkButton(); Next.Text = ">>"; Next.ID = "Next"; Next.ToolTip = "向下翻一轮"; Next.Click += new EventHandler(Next_Click); Panel1.Controls.Add(Next); } } } //向下翻一轮 void Next_Click(object sender, EventArgs e) { Pager++; CreatePager(); BindGridView(); } //向上翻一轮 void Prev_Click(object sender, EventArgs e) { Pager--; CreatePager(); BindGridView(); } //分页事件 void lb_Click(object sender, EventArgs e) { LinkButton lb = (LinkButton)sender; PageIndex = int.Parse(lb.Text); BindGridView(); foreach (Control button in Panel1.Controls) { if (button.GetType().Name == "LinkButton") { if (((LinkButton)button).Text == lb.Text) { ((LinkButton)button).Enabled = false; } else { ((LinkButton)button).Enabled = true; } } } } #endregion #region property public int Pages //总页数 { get { return int.Parse(ViewState["Pages"].ToString()); } set { ViewState["Pages"] = value; } } public int PageIndex//当前页索引 { get { return int.Parse(ViewState["pageindex"].ToString()); } set { ViewState["pageindex"] = value; } } public int Pager //当前显示第几轮 { get { return int.Parse(ViewState["Pager"].ToString()); } set { ViewState["Pager"] = value; } } #endregion}