本文首发 博客园,转载请注明出处:http://www.cnblogs.com/zhouzhaokun/archive/2011/08/24/2151558.html#
今天本来要做基于json的Ajax分页效果。一大早起来就上园子找菜来吃。。刚好看到 kwklover 同学缩写的 分页器 实现。原文地址:http://www.cnblogs.com/kwklover/archive/2006/04/21/381832.html 我在他的基础上做了些修改,但是仍然不是非常完善!代码如下:
先贴上分页器代码。稍后我会上传 基于json 的ajax 分页。。。高手勿喷,:-)。。。欢迎交流
//http://www.cnblogs.com/kwklover/archive/2006/04/21/381832.html
02 protected void Page_Load(object sender, EventArgs e)
03 {
04 if (Request["page"] == null || Request["page"] == "")
05 BuildPager(10000, 1, 10);
06 else
07 BuildPager(10000, Convert.ToInt32(Request["page"]), 10);
08 }
09 /// <summary>
10 /// 创建并显示分页器
11 /// </summary>
12 /// <param name="totalRecords">总页数</param>
13 /// <param name="currentPage">当前页码</param>
14 /// <param name="pageSize">页面大小</param>
15 private void BuildPager(int totalRecords, int currentPage, int pageSize)
16 {
17 int alter = 4;
18 int startPage = 1;
19 int endPage = currentPage + alter;
20 int totalPages = this.CalculateTotalPages(totalRecords, pageSize);
21
22 if (currentPage > alter)
23 {
24 startPage = currentPage - alter;
25 }
26
27 if (endPage > totalPages)
28 {
29 endPage = totalPages;
30 }
31
32 string strTemp = @"<a title='{0}' href='Default.aspx?page={1}'>{2}</a> ";
33 StringBuilder sb = new StringBuilder("");
34 if (currentPage != startPage)
35 {
36 if (currentPage > startPage)
37 {
38 sb.Append(string.Format(strTemp, 1, 1, "首页"));
39 sb.Append(string.Format(strTemp, currentPage - 1, currentPage - 1, "上一页"));
40 }
41 }
42
43 for (int i = startPage; i <= endPage; i++)
44 {
45 if (currentPage == i)
46 {
47 sb.Append("<font color=red>" + i + "</font> ");
48 }
49 else
50 {
51 sb.Append(string.Format(strTemp, i, i, "[" + i + "]"));
52 }
53 }
54
55 if (currentPage != endPage)
56 {
57 sb.Append(string.Format(strTemp, currentPage + 1, currentPage + 1, "下一页"));
58 sb.Append(string.Format(strTemp, totalPages, totalPages, "尾页"));
59 }
60
61 this.ltlShowPager.Text = sb.ToString();
62 }
63
64 /**/
65 /// <summary>
66 /// 计算总页数
67 /// </summary>
68 /// <param name="totalRecords">总记录数</param>
69 /// <param name="pageSize">每页记录数</param>
70 private int CalculateTotalPages(int totalRecords, int pageSize)
71 {
72 int totalPagesAvailable;
73
74 totalPagesAvailable = totalRecords / pageSize;
75
76 //由于C#的整形除法 会把所有余数舍入为0,所以需要判断是否需要加1
77 if ((totalRecords % pageSize) > 0)
78 totalPagesAvailable++;
79
80 return totalPagesAvailable;
81 }