最近在写一个关于NET的框架,写到后面果不其然的就遇到了分页,自己看了很多关于分页的并自己结合写了一个,晒出来和大家分享一下,第一次写博客望大家多多提意见啦。。。

cs文件分页代码:

1 Paging p = new Paging(3, sql语句);     //每页3条
2 ViewData["List"] = p.GetDataTable(); //查询出要显示的DataTable
3 ViewData["page"] = p.GetPageing(this); //分页显示html

前台调用:

1 <%=ViewData["page"]%>

最近刚发现的ViewState这个函数,只要后台定义前台就可以调用很方便。(这个是不是自己out了,现在才发现)

下面是关于Paging类:

  1     public class Paging
  2     {
  3         private string pagedNum;  //定义分页条,输出到前台
  4         private int pageSize;     // 定义每页有多少条数据量.
  5         private string url;       //获取当前页
  6         private int countNum;    //总条数
  7         private string SelSql;   //查询SQL语句
  8         private DataSet ds;
  9
 10         public Paging(int pageSize, string SelSql)
 11         {
 12             this.pageSize = pageSize;
 13             this.url = HttpContext.Current.Request.Url.LocalPath;
 14             this.SelSql = SelSql;
 15             GetPageDate(SelSql);
 16         }
 17         //定义样式a标签第一个样式
 18         private readonly string csstagA = @"<a href='{0}?page={1}' >{2}</a>";            //{0}{1}{2}代表url和参数名,参数值,页码值
 19         //定义样式a标签第二个样式
 20         //private readonly string csstagA1 = "<a style='font-size:13px;font-weight:bold;margin:0 4px 0 4px'>{0}</a>";
 21         private readonly string csstagA1 = "<span class='pc'>{0}</span>";
 22
 23
 24         public delegate int GetDelegate();
 25
 26
 27         /// <summary>
 28         /// 生成分页条
 29         /// </summary>
 30         /// <param name="pageIndex">当前页</param>
 31         /// <param name="del">获得数据条数的方法</param>
 32         /// <returns></returns>
 33         public string GetPageing(Page p)
 34         {
 35             string index = p.Request.QueryString["page"];
 36             int i;
 37             if (!string.IsNullOrEmpty(index) && int.TryParse(index, out i))
 38             {
 39                 pagedNum = GetPagegNum(i, GetPageCount(i, countNum));
 40             }
 41             else
 42             {
 43                 pagedNum = GetPagegNum(1, GetPageCount(1, countNum));
 44             }
 45
 46             return pagedNum;
 47         }
 48
 49         private int GetPageCount(int pageIndex, int countPage)     //获得总页数
 50         {
 51             int Count = 0;
 52             Count = countPage;
 53             double c = Count * 1.0 / pageSize;
 54             return (int)Math.Ceiling(c);
 55         }
 56
 57
 58         private string GetPagegNum(int pageIndex, int pageCount)           //类似   上一页 1 ... 7 8 9 ⑩ 11 12 13 14 下一页   ⑩是当前选中页
 59         {
 60             StringBuilder sb = new StringBuilder();
 61             List<int> ns = new List<int>();              //用于接收当前页范围内的数字
 62             string[] numList = new string[12];           //12个字符串数组,存放分页条数据
 63             numList[0] = "";       //“上一页”位置
 64             numList[11] = "";      //“下一页”位置
 65             if (pageIndex > 1)                                         //判断当前页
 66             {
 67                 numList[0] = string.Format(csstagA, url, (pageIndex - 1), "<上一页");
 68             }
 69             if (pageIndex < pageCount)
 70             {
 71                 numList[11] = string.Format(csstagA, url, (pageIndex + 1), "下一页>");
 72             }
 73             if (pageIndex >= 10)    //当前页大于10页的状态
 74             {
 75                 //主要的
 76                 numList[1] = string.Format(csstagA, url, 1, 1);
 77                 numList[2] = "...";
 78                 //int index = 0;
 79                 if (pageIndex + 4 >= pageCount)    //如果当前页加4页小于总页数
 80                 {
 81                     for (int i = pageCount - 7; i < pageCount + 1; i++)
 82                     {
 83                         //index = i;
 84                         ns.Add(i);
 85                     }
 86                     for (int j = 0; j <= 7; j++)    //遍历ns页码值填充到分页条
 87                     {
 88                         if (ns[j] == pageIndex)     //判断是否为当前页码,来使用不同css样式
 89                         {
 90                             numList[j + 3] = string.Format(csstagA1, ns[j]);  //因为字符串数组前3位分别为“上一页”,“1”,“...”,所以从第四位填充7个
 91                         }
 92                         numList[j + 3] = string.Format(csstagA, url, ns[j], ns[j]);
 93                     }
 94                 }
 95                 for (int i = pageIndex - 3; i <= pageIndex + 4; i++)
 96                 {
 97                     //index = i;
 98                     ns.Add(i);
 99                 }
100                 for (int j = 0; j <= 7; j++)
101                 {
102                     if (ns[j] == pageIndex)
103                     {
104                         numList[j + 3] = string.Format(csstagA1, ns[j]);
105                     }
106                     else
107                     {
108                         numList[j + 3] = string.Format(csstagA, url, ns[j], ns[j]);
109                     }
110                 }
111             }
112             else   //10页以下的状态
113             {
114                 if (pageCount >= 10)               //页数大于等于10
115                 {
116                     for (int i = 1; i <= 10; i++)
117                     {
118                         if (i == pageIndex)
119                         {
120                             numList[i] = string.Format(csstagA1, i);
121                         }
122                         else
123                         {
124                             numList[i] = string.Format(csstagA, url, i, i);
125                         }
126                     }
127                 }
128                 else            //页数小于10
129                 {
130                     for (int i = 1; i <= pageCount; i++)
131                     {
132                         if (i == pageIndex)
133                         {
134                             numList[i] = string.Format(csstagA1, i);
135                         }
136                         else
137                         {
138                             numList[i] = string.Format(csstagA, url, i, i);
139                         }
140                     }
141                 }
142             }
143             sb.Append("<div class='page'>");
144             for (int i = 0; i < numList.Length; i++)   //将字符串数组填入StringBulider中
145             {
146                 sb.Append(numList[i]);
147             }
148
149             sb.AppendFormat(" 共{0}/{1}条", pageIndex, pageCount);
150             sb.Append("</div>");
151             return sb.ToString();   //返回,并在前台 <span id="pagedspan"><%=pagedNum %></span>
152         }
153
154         /// <summary>
155         /// 获取分页数据和总页数
156         /// </summary>
157         /// <param name="pageSql"></param>
158         public void GetPageDate(string pageSql)
159         {
160             int pageIndex = Req.QueryString("page").ToInt(1);
161
162             StringBuilder strSql = new StringBuilder();
163             strSql.Append(@"declare @startRow int
164 declare @endRow int
165 declare @pageSize int
166 declare @pageIndex int
167 set @pageSize=@pageSize2
168 set @pageIndex=@pageIndex2
169 set @startRow=(@pageIndex-1) * @pageSize+1
170 set @endRow=@pageSize*@pageIndex");
171             strSql.Append(" select * from(");
172             strSql.Append("select *,ROW_NUMBER() OVER (ORDER BY getdate()) pageID from(");
173             strSql.Append(pageSql);
174             strSql.Append(")tab_a");
175             strSql.Append(")tab_b where pageID between @startRow and @endRow");
176
177             strSql.Append(" select COUNT(*) from("); //查询总页数
178             strSql.Append(pageSql);
179             strSql.Append(")tab_count");
180
181             //pagesize  每页条数
182             //pageIndex 第几页
183             //set @startRow=(@pageIndex-1) * @pageSize+1 开始页
184             //set @endRow=@pageSize*@pageIndex            结束页
185
186
187             ds = DBHelper.GetDataSet(strSql.ToString());
188             countNum = int.Parse(ds.Tables[1].Rows[0][0].ToString());
189         }
190
191         /// <summary>
192         /// 分页数据列表
193         /// </summary>
194         /// <returns></returns>
195         public DataTable GetDataTable()
196         {
197             return this.ds.Tables[0];
198         }
199
200     }

View Code

关键的分页SQL是:

select * from(select *,ROW_NUMBER() OVER (ORDER BY getdate()) pageID from 表名
)a
where pageID between (@pageIndex-1) * @pageSize+1 and @pageSize*@pageIndex

这里为了不用传SQL的时候单独传一个ID就用了 ROW_NUMBER() OVER (ORDER BY getdate()),很好用

这样SQL分页就实现了,最后还写了仿百度的样式,对应上面的csstagA、csstagA1 CSS是:

/*分页*/
.page {padding-top:10px;
}
.page .pc{font-size:13px;font-weight:bold;margin:0 5px 0 5px;
}
.page a{border:1px solid #CFCBCB; font-size:13px;padding:8px 13px;margin:0 5px 0 5px;text-decoration:none;display:inline-block;
}.page a:hover {background:#f2f8ff;border:1px solid #38f;}
/*End 分页*/

最后的显示效果如下:

OK,这以上就是我分页实现的具体步骤了。o(∩_∩)o 哈哈。。。

转载于:https://www.cnblogs.com/dangzhensheng/p/3769588.html

NET分页实现及代码相关推荐

  1. mysql多表联查分页_sqlserver多表联合查询和多表分页查询的代码讲解

    sqlserver多表联合查询和多表分页查询的代码讲解 发布时间:2020-05-14 14:42:07 来源:亿速云 阅读:700 作者:Leah 这篇文章主要为大家详细介绍了sqlserver多表 ...

  2. 实现 iPhone 电子书的分页显示功能的代码

    本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6650497 原文地址:实现 iPhone 电子书的分页显示功能的代码 作者: 醉 ...

  3. 实现 iPhone 电子书的分页显示功能的代码 转载

    原文地址:实现 iPhone 电子书的分页显示功能的代码 作者:醉吻花颜 作 iPhone 电子书时,如果把大段文字放在 UITextView 或 UILabel里显示,是不能分页的,阅读时就像再看一 ...

  4. C#内容分页简单实现代码及祥解

    //定义变量 int i,start,stop,t,stat,statt,pp,pagecount,pagesize; //变量初始值 stat=0; statt=0; start=0;//开始查询的 ...

  5. 存储过程--分页与C#代码调用

    存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========================================== ...

  6. 亿级别记录的mongodb分页查询java代码实现

    1.准备环境 1.1 mongodb下载 1.2 mongodb启动 C:\mongodb\bin\mongod --dbpath D:\mongodb\data 1.3 可视化mongo工具Robo ...

  7. php分页类代码,php 分页类 扩展代码

    原来发表过一个脱离数据库的分页类,最近使用的时候发现有些时候搜索的东西过于大的时候,采用url传递参数的方式,可能会有一定的影响或者叫已知的bug,这次做了一些扩展,同时兼容了以前的模式,使用上面很简 ...

  8. hibernate mysql分页_求struts+hibernate实现mysql分页的详细代码

    展开全部 分页不难 我分3段代码给你(dao 分页辅助业务类 Struts的Action 这写做完以后JSP里就可以随e69da5e887aa62616964757a686964616f3133323 ...

  9. django后台多页面分页逻辑python代码

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Created by 秋叶夏风# 本模块的功能:<>def get_page_list(max ...

  10. jq分页 不刷新页面_jQuery无刷新分页完整实例代码

    本文实例讲述了jQuery无刷新分页实现方法.分享给大家供大家参考,具体如下: 这款jQuery分页示例,是分页经典形式,兼容性也做的好,网页上的分页代码,分享给大家. 运行效果截图如下: 在线演示地 ...

最新文章

  1. Alpha冲刺之事后诸葛亮
  2. 安卓linux终端termux下载,高级手机终端app
  3. Netty--ByteBuf
  4. 【AcWing 249. 蒲公英】
  5. mysql建表时外检怎么创建_MySQL创建表时加入的约束以及外键约束的的意义
  6. Java商品信息查询
  7. RTT线程管理篇——rtt线程恢复
  8. Java中堆、栈、常量池等概念解析
  9. Linux如何搭建Java部署环境
  10. 【转】网页制作中的CSS+DIV:dl,dt,dd分别表示什么意思啊?请说明啊,谢谢有什么功能?...
  11. Pandas系列(三)新增数据列
  12. 自然语言处理 -- NLP作业 1 :训练词向量
  13. 系统的可靠性分析与设计---可靠性的概述
  14. java虎胆龙威_格斗之王3虎胆龙威
  15. 【Linux】linux 终端报Message from syslogd
  16. 云计算在未来一年的发展预测
  17. 无网络下imac重装系统
  18. Android Jni 调用
  19. java实现随机数生成算法_Java 语言实现的随机数生成算法
  20. 【台大郭彦甫】Matlab入门教程超详细学习笔记七:数值微积分(附PPT链接)

热门文章

  1. Java SringBoot demo
  2. Java SSM 与 SpringBoot
  3. 4.9 内容代价函数
  4. scrapy setting
  5. git 应用 cherry-pick
  6. Pandas 文本数据方法 find( ) rfind( ) index( ) rindex( )
  7. 计算机辅助翻译与人工翻译论文,计算机辅助翻译:理念和工具[翻译研究新探论文献文集].pdf...
  8. vue向ifarm传值_vue组件间传值
  9. 收藏!50个帮你自我提升的网站
  10. 批量重置指定域用户密码