NET分页实现及代码
最近在写一个关于NET的框架,写到后面果不其然的就遇到了分页,自己看了很多关于分页的并自己结合写了一个,晒出来和大家分享一下,第一次写博客望大家多多提意见啦。。。
cs文件分页代码:
Paging p = new Paging(, sql语句); //每页3条
ViewData["List"] = p.GetDataTable(); //查询出要显示的DataTable
ViewData["page"] = p.GetPageing(this); //分页显示html
前台调用:
<%=ViewData["page"]%>
最近刚发现的ViewState这个函数,只要后台定义前台就可以调用很方便。(这个是不是自己out了,现在才发现)
下面是关于Paging类:
public class Paging
{
private string pagedNum; //定义分页条,输出到前台
private int pageSize; // 定义每页有多少条数据量.
private string url; //获取当前页
private int countNum; //总条数
private string SelSql; //查询SQL语句
private DataSet ds; public Paging(int pageSize, string SelSql)
{
this.pageSize = pageSize;
this.url = HttpContext.Current.Request.Url.LocalPath;
this.SelSql = SelSql;
GetPageDate(SelSql);
}
//定义样式a标签第一个样式
private readonly string csstagA = @"<a 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>";
private readonly string csstagA1 = "<span class='pc'>{0}</span>"; public delegate int GetDelegate(); /// <summary>
/// 生成分页条
/// </summary>
/// <param name="pageIndex">当前页</param>
/// <param name="del">获得数据条数的方法</param>
/// <returns></returns>
public string GetPageing(Page p)
{
string index = p.Request.QueryString["page"];
int i;
if (!string.IsNullOrEmpty(index) && int.TryParse(index, out i))
{
pagedNum = GetPagegNum(i, GetPageCount(i, countNum));
}
else
{
pagedNum = GetPagegNum(, GetPageCount(, countNum));
} return pagedNum;
} private int GetPageCount(int pageIndex, int countPage) //获得总页数
{
int Count = ;
Count = countPage;
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个字符串数组,存放分页条数据
numList[] = ""; //“上一页”位置
numList[] = ""; //“下一页”位置
if (pageIndex > ) //判断当前页
{
numList[] = string.Format(csstagA, url, (pageIndex - ), "<上一页");
}
if (pageIndex < pageCount)
{
numList[] = string.Format(csstagA, url, (pageIndex + ), "下一页>");
}
if (pageIndex >= ) //当前页大于10页的状态
{
//主要的
numList[] = string.Format(csstagA, url, , );
numList[] = "...";
//int index = 0;
if (pageIndex + >= pageCount) //如果当前页加4页小于总页数
{
for (int i = pageCount - ; i < pageCount + ; i++)
{
//index = i;
ns.Add(i);
}
for (int j = ; j <= ; j++) //遍历ns页码值填充到分页条
{
if (ns[j] == pageIndex) //判断是否为当前页码,来使用不同css样式
{
numList[j + ] = string.Format(csstagA1, ns[j]); //因为字符串数组前3位分别为“上一页”,“1”,“...”,所以从第四位填充7个
}
numList[j + ] = string.Format(csstagA, url, ns[j], ns[j]);
}
}
for (int i = pageIndex - ; i <= pageIndex + ; i++)
{
//index = i;
ns.Add(i);
}
for (int j = ; j <= ; j++)
{
if (ns[j] == pageIndex)
{
numList[j + ] = string.Format(csstagA1, ns[j]);
}
else
{
numList[j + ] = string.Format(csstagA, url, ns[j], ns[j]);
}
}
}
else //10页以下的状态
{
if (pageCount >= ) //页数大于等于10
{
for (int i = ; i <= ; i++)
{
if (i == pageIndex)
{
numList[i] = string.Format(csstagA1, i);
}
else
{
numList[i] = string.Format(csstagA, url, i, i);
}
}
}
else //页数小于10
{
for (int i = ; i <= pageCount; i++)
{
if (i == pageIndex)
{
numList[i] = string.Format(csstagA1, i);
}
else
{
numList[i] = string.Format(csstagA, url, i, i);
}
}
}
}
sb.Append("<div class='page'>");
for (int i = ; i < numList.Length; i++) //将字符串数组填入StringBulider中
{
sb.Append(numList[i]);
} sb.AppendFormat(" 共{0}/{1}条", pageIndex, pageCount);
sb.Append("</div>");
return sb.ToString(); //返回,并在前台 <span id="pagedspan"><%=pagedNum %></span>
} /// <summary>
/// 获取分页数据和总页数
/// </summary>
/// <param name="pageSql"></param>
public void GetPageDate(string pageSql)
{
int pageIndex = Req.QueryString("page").ToInt(); StringBuilder strSql = new StringBuilder();
strSql.Append(@"declare @startRow int
declare @endRow int
declare @pageSize int
declare @pageIndex int
set @pageSize=@pageSize2
set @pageIndex=@pageIndex2
set @startRow=(@pageIndex-1) * @pageSize+1
set @endRow=@pageSize*@pageIndex");
strSql.Append(" select * from(");
strSql.Append("select *,ROW_NUMBER() OVER (ORDER BY getdate()) pageID from(");
strSql.Append(pageSql);
strSql.Append(")tab_a");
strSql.Append(")tab_b where pageID between @startRow and @endRow"); strSql.Append(" select COUNT(*) from("); //查询总页数
strSql.Append(pageSql);
strSql.Append(")tab_count"); //pagesize 每页条数
//pageIndex 第几页
//set @startRow=(@pageIndex-1) * @pageSize+1 开始页
//set @endRow=@pageSize*@pageIndex 结束页 ds = DBHelper.GetDataSet(strSql.ToString());
countNum = int.Parse(ds.Tables[].Rows[][].ToString());
} /// <summary>
/// 分页数据列表
/// </summary>
/// <returns></returns>
public DataTable GetDataTable()
{
return this.ds.Tables[];
} }
关键的分页SQL是:
select * from(
select *,ROW_NUMBER() OVER (ORDER BY getdate()) pageID from 表名
)a
where pageID between (@pageIndex-) * @pageSize+ 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: 5px 5px;
}
.page a{
border:1px solid #CFCBCB; font-size:13px;padding:8px 13px;margin: 5px 5px;text-decoration:none;display:inline-block;
}
.page a:hover {
background:#f2f8ff;border:1px solid #38f;
}
/*End 分页*/
最后的显示效果如下:

OK,这以上就是我分页实现的具体步骤了。o(∩_∩)o 哈哈。。。
NET分页实现及代码的更多相关文章
- Mvc分页组件MvcSimplePager代码重构
1 Mvc分页组件MvcSimplePager代码重构 1.1 Intro 1.2 MvcSimplePager 代码优化 1.3 MvcSimplePager 使用 1.4 End Mvc分页组件M ...
- Mvc分页组件MvcSimplePager代码重构及使用
1 Mvc分页组件MvcSimplePager代码重构 1.1 Intro 1.2 MvcSimplePager 代码优化 1.3 MvcSimplePager 使用 1.4 End Mvc分页组件M ...
- 实现 iPhone 电子书的分页显示功能的代码
本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6650497 原文地址:实现 iPhone 电子书的分页显示功能的代码作者:醉吻 ...
- 分页查询关键代码 多条件查询关键代码 删除选中商品关键代码 修改要先回显再修改 修改要先回显再修改 同一业务集中使用同一servlet的方法
分页查询关键代码: 通过servlet转发回来的各种信息进行分页的设计(转发回的信息有 分页查询的List集合 查询的页码 查询的条数 查询的数据库总条数 查询的总页码) 从开始时循环10次出现十个数 ...
- django之分页,纯python代码
Django中分页 py文件代码 """ 自定义分页组件 可以返回分页的数据和分页的HTML代码 """ from django.http ...
- 静态页分页功能js代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 转:PHP分页技术的代码和示例
本文来自:10 Helpful PHP Pagination Scripts For Web Developers 分页是目前在显示大量结果时所采用的最好的方式.有了下面这些代码的帮助,开发人员可以在 ...
- php分页实例附代码
一个典型的PHP分页实例代码分享,学习php的朋友肯定用得到,主要是了解思路: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...
- Extjs的GridPanel分页前后台完整代码实例
第一次写文章啊,有些冲动.最近在公司学习Extjs,做了一个分页的小实例和大家分享. 1.首先编写paging-grid.js文件,这是我在网上参考的例子改写的,大同小异. Ext.onReady(f ...
- WPF DataGrid分页功能实现代码
在Silverlight中DataGrid分页可以结合DataPager控件很容易实现,但是在WPF中没有类似的,需要手动实现这样一个控件: 1.创建一个UserControl,DP.xaml,代码如 ...
随机推荐
- 塔防游戏 Day1
1. 创建地图 如上图所示,白色方块为可以放置塔楼的区域,粉红色区域为敌人的行走区域,绿色方块处为起始点,黄色方块点为终止点. 2. 控制游戏的视野 public class ViewScript : ...
- loadView 和 viewDidLoad、viewDidunload 的区别
loadView 和 viewDidLoad 是 iPhone 开发中肯定要用到的两个方法. 他们都可以用来在视图载入的时候初始化一些内容. 但是他们有什么区别呢? viewDidLoad 方法只有当 ...
- MySQL数据库篇之库的增删改查
主要内容: 一.系统数据库介绍 二.创建数据库 三.数据库增删改查 四.MySQL添加注释 1️⃣ 系统数据库介绍 1.初识sql语句 有了mysql这个数据库软件,就可以将程序员从对数据的管理中解脱 ...
- Tp3.1 文件上传到七牛云
TP3.1 中不支持Composer 就无法用composer 安装 下载历史的SDK https://github.com/qiniu/php-sdk/releases/tag/v7.0.8 下载下 ...
- Hibernate中Session与本地线程绑定
------------------siwuxie095 Hibernate 中 Session 与本地线程绑定 1.Session 类似于 JDBC 的连接 Connection 2.Session ...
- IDEA错误的忽略了智能补全代码,导致正确的代码自动提示不出来的问题
标题说起来有点绕,当今大部分IDE都提供 Alt+Enter 呼出自动补全菜单的功能,IDEA也不例外,今天手残了一下,具体问题如下: 1. 通常我们键入一个自定义类时IDEA会自动提示为红色,表示缺 ...
- Idea安装lombok插件及使用
安装lombok插件:File-settings 具体步骤如下图:1 2.找到Plugins 然后在搜索栏里搜索lombok 点击下放的Search in repositories 3.选中lombo ...
- C++ 模板 与 泛型编程
C++ 模板 与 泛型编程 前言 模板有两种:类模板和函数模板 .模板是泛型编程的基础. 什么叫:泛型编程? 使用独立于特定类型的方式进行编程.也就是我们在编程的时候不明确的写上类型,而是使用一个模板 ...
- 一张图记住TCP/IP通讯中的IP地址配置
TCP/IP通讯情景: 用网线将计算机A(服务器Server)和计算机B(Client)连接起来.程序代码在计算机A中,计算机B中安装有TCP/IP通讯助手. (图中屏幕大的是计算机A,屏幕小的笔记本 ...
- [转]Python-__builtin__与__builtins__的区别与关系(超详细,经典)
在学习Python时,很多人会问到__builtin__.__builtins__和builtins之间有什么关系.百度或Google一下,有很 多答案,但是这些答案要么不准确,要么只说了一点点,并不 ...