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,代码如 ...
随机推荐
- 教你看懂Code128条形码
首 页 条码控件 条码技术 条码新闻 合作伙伴 联系我们 常见问题 电话:010-84827961 当前位置:条形码控件网 > 条形码控件技术文章 > >正文 教你看懂C ...
- 在线程中调用其它主界面的模块,因为中间有休息1000ms,所以调用前要检查DateTimeRun变量;在From_load 启动线程;在From_closing From_closed 设置DateTimeRun=false
//系统启动后,自动启动时钟 void jishi_kernel() { try { while (DateTimeRun) { Thread.Sleep(); if (myRunning) Runn ...
- 少一些套路,多一些真诚 ——groovy消灭表现层套路
初次认识groovy是在2009年,当时看了Manning出版的<Groovy in Action 1st Edition>,对groovy这个语言的交互性shell,以及灵活的语法留 ...
- zookeeper和duboo 没用
什么是dubbo Dubbo是阿里巴巴SOA服务化治理方案的核心框架,是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 测试和生产公用一套zookeep ...
- Java泛型:泛型的定义(类、接口、对象)、使用、继承
地址 http://blog.csdn.net/lirx_tech/article/details/51570138 1. 设计泛型的初衷: 1) 主要是为了解决Java容器无法记忆元素类型的问题 ...
- Luogu 4725 【模板】多项式对数函数
继续补全模板. 要求 $$g(x) = ln f(x)$$ 两边求导, $$g'(x) = \frac{f'(x)}{f(x)}$$ 然后左转去把多项式求导和多项式求逆的模板复制过来,就可以计算出$g ...
- 9个使用前必须再三小心的 Linux 命令-乾颐堂
Linux shell/terminal 命令非常强大,即使一个简单的命令就可能导致文件夹.文件或者路径文件夹等被删除. 在一些情况下,Linux 甚至不会询问你而直接执行命令,导致你丢失各种数据信息 ...
- Excel 常用快捷键
Excel 常用快捷键 1. 移动整列 使用Shift快捷键可以快速移动整列:选中该列,当鼠标变成十字箭头时,按住Shift键,然后将该列移动到想要的位置. 2 绝对引用 使用F4快捷键可以快速设置绝 ...
- LWIP内存管理
LWIP是一种TCP/IP协议栈,与嵌入式操作系统一样也提供了内存管理. 内存池里面有多个同样大小的内存,不同类型的内存池其里面的内存大小不一样.
- 【转】ConcurrentMap 分析和思考
预备知识:Java HashMap and HashSet 的实现机制 由预备知识可以知道hashmap 的存储结构为: (图像来自http://www.ibm.com/developerworks/ ...