- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Text;
- using System.Configuration;
- using System.Web.UI;
- namespace MyPager
- {
- public class Pager
- {
- private string pagedNum; //定义分页条,输出到前台
- private int pageSize; // 定义每页有多少条数据量.
- private string url;
- public Pager(int pageSize, string url)
- {
- this.pageSize = pageSize;
- this.url = url;
- }
- //定义样式a标签第一个样式
- private readonly string csstagA = @"<a class='ho' style='border:1px solid #999999; font-size:13px;padding:4px 6px 4px 6px;margin:0 4px 0 4px;text-decoration:none' href='{0}?page={1}' >{2}</a>"; //{0}{1}{2}代表url和参数名,参数值,页码值
- //定义样式a标签第二个样式
- private readonly string csstagA1 = "<a style='font-size:13px;font-weight:bold;margin:0 4px 0 4px'>{0}</a>";
- public delegate int GetDelegate();
- /// <summary>
- /// 生成分页条
- /// </summary>
- /// <param name="pageIndex">当前页</param>
- /// <param name="del">获得数据条数的方法</param>
- /// <returns></returns>
- public string GetpagedNum(Page p, GetDelegate del)
- {
- string index = p.Request.QueryString["page"];
- int i;
- if (!string.IsNullOrEmpty(index) && int.TryParse(index, out i))
- {
- pagedNum = GetpagegNum(i, GetpageCount(i, del));
- }
- else
- {
- pagedNum = GetpagegNum(1, GetpageCount(1, del));
- }
- //注册a标签hover状态
- p.ClientScript.RegisterStartupScript(this.GetType(), "hover", @"<script type='text/javascript'>
- window.onload = function () {
- var classElements = document.getElementsByTagName('a');
- for (var i = 0; i < classElements.length; i++) {
- classElements[i].onmouseover = function () {
- if (this.className == 'ho') {
- this.style.backgroundColor = '#EFEBE6';
- }
- }
- classElements[i].onmouseout = function () {
- if (this.className == 'ho') {
- this.style.backgroundColor = 'white';
- }
- }
- }
- }
- </script>");
- return pagedNum;
- }
- private int GetpageCount(int pageIndex, GetDelegate del) //获得总页数
- {
- int Count = 0;
- Count = del();
- double c = Count * 1.0 / pageSize;
- return (int)Math.Ceiling(c);
- }
- private string GetpagegNum(int pageIndex, int pageCount) //类似 上一页 1 ... 7 8 9 ⑩ 11 12 13 14 下一页 ⑩是当前选中页
- {
- StringBuilder sb = new StringBuilder();
- List<int> ns = new List<int>(); //用于接收当前页范围内的数字
- string[] numList = new string[12]; //12个字符串数组,存放分页条数据
- numList[0] = ""; //“上一页”位置
- numList[11] = ""; //“下一页”位置
- if (pageIndex > 1) //判断当前页
- {
- numList[0] = string.Format(csstagA, url, (pageIndex - 1), "<上一页");
- }
- if (pageIndex < pageCount)
- {
- numList[11] = string.Format(csstagA, url, (pageIndex + 1), "下一页>");
- }
- if (pageIndex >= 10) //当前页大于10页的状态
- {
- //主要的
- numList[1] = string.Format(csstagA, url, 1, 1);
- numList[2] = "...";
- //int index = 0;
- if (pageIndex + 4 >= pageCount) //如果当前页加4页小于总页数
- {
- for (int i = pageCount - 7; i < pageCount + 1; i++)
- {
- //index = i;
- ns.Add(i);
- }
- for (int j = 0; j <= 7; j++) //遍历ns页码值填充到分页条
- {
- if (ns[j] == pageIndex) //判断是否为当前页码,来使用不同css样式
- {
- numList[j + 3] = string.Format(csstagA1, ns[j]); //因为字符串数组前3位分别为“上一页”,“1”,“...”,所以从第四位填充7个
- }
- numList[j + 3] = string.Format(csstagA, url, ns[j], ns[j]);
- }
- }
- for (int i = pageIndex - 3; i <= pageIndex + 4; i++)
- {
- //index = i;
- ns.Add(i);
- }
- for (int j = 0; j <= 7; j++)
- {
- if (ns[j] == pageIndex)
- {
- numList[j + 3] = string.Format(csstagA1, ns[j]);
- }
- else
- {
- numList[j + 3] = string.Format(csstagA, url, ns[j], ns[j]);
- }
- }
- }
- else //10页以下的状态
- {
- if (pageCount >= 10) //页数大于等于10
- {
- for (int i = 1; i <= 10; i++)
- {
- if (i == pageIndex)
- {
- numList[i] = string.Format(csstagA1, i);
- }
- else
- {
- numList[i] = string.Format(csstagA, url, i, i);
- }
- }
- }
- else //页数小于10
- {
- for (int i = 1; i <= pageCount; i++)
- {
- if (i == pageIndex)
- {
- numList[i] = string.Format(csstagA1, i);
- }
- else
- {
- numList[i] = string.Format(csstagA, url, i, i);
- }
- }
- }
- }
- for (int i = 0; i < numList.Length; i++) //将字符串数组填入StringBulider中
- {
- sb.Append(numList[i]);
- }
- return sb.ToString(); //返回,并在前台 <span id="pagedspan"><%=pagedNum %></span>
- }
- }
- }
下面是一个页面后台调用:
- public partial class WebForm3 : System.Web.UI.Page
- {
- protected string Pagers; //要输出到前台的分页条字符串
- protected void Page_Load(object sender, EventArgs e)
- {
- Pager p = new Pager(10, Request.Url.LocalPath);
- Pagers = p.GetpagedNum(this, ()=>123);
- }
- }
- <body>
- <form id="form1" runat="server">
- <div>
- <%=Pagers %>
- </div>
- </form>
- </body>
下面这个样子:
百度的样子:
人生第一次写博客啊,修改了下。
样式还有一些小小差别,还是有点像百度的分页样子,就是css方面了。
我这只是照葫芦画瓢,肯定这样那样问题,就当练练手