对于大量数据的查询和展示使用分页是一种不错的选择,这篇文章简要介绍下自己实现分页查询的思路。

分页需要三个变量:数据总量、每页显示的数据条数、当前页码。
//数据总量 int dataCount; //每页显示的数据条数 int pageDataCount; int pageNumber;
根据数据总量和每页显示的数据条数计算出总页数,根据当前页码和每页显示的数据条数计算出从数据库中读取数据的起始行号和结束行号。
//总页数 int pageCount = (int)Math.Ceiling(dataCount/ (pageDataCount* 1.0)); int startLine = (pageNumber - 1) * PageDataCount + 1; int endLine=startLine + PageDataCount - 1;
对于数据库的查询操作使用轻量级ORM框架Dapper来实现,具体代码如下:
protected IDbConnection CreateConnection()
{
IDbConnection dbConnection = new SqlConnection(ConnectionString);
dbConnection.Open();
return dbConnection;
}
//获取数据库中数据的总条数
public virtual int QueryDataCount(string tableName)
{
using (IDbConnection dbConnection = CreateConnection())
{
var queryResult = dbConnection.Query<int>("select count(Id) from " + tableName);
if (queryResult == null || !queryResult.Any())
{
return 0;
}
return queryResult.First();
}
}
public virtual IEnumerable<T> RangeQuery<T>(string tableName, int startline, int endline)
{
if (string.IsNullOrEmpty(tableName))
{
throw new ArgumentNullException("表名不得为空或null");
}
if (startline <= 0)
{
throw new ArgumentOutOfRangeException("起始行号必须大于0");
}
if (endline - startline < 0)
{
throw new ArgumentOutOfRangeException("结束行号不得小于起始行号");
}
using (IDbConnection dbConnection = CreateConnection())
{
var queryResult = dbConnection.Query<T>("select top " + (endline - startline + 1) + " * from " + tableName + " where Id not in (select top " + (startline - 1) + " Id from " + tableName + " order by Id desc) order by Id desc");
if (queryResult != null && queryResult.Any())
{
return queryResult;
}
}
return null;
}
绘制分页按钮
在App_Code文件夹中添加PageHelper.cshtml文件封装绘制按钮的代码,这里需要注意一点,使用VS发布站点时App_Code文件夹中的文件不会被打包,需要手动拷贝App_Code文件夹中的文件到站点中。
@*
amount:数据总数,count:每页显示的数据条数,redierctUrl点击按钮时的跳转链接
页面上需引用:bootstrap.min.css
*@
@helper CreatePaginateButton(int amount, int count, string redirectUrl)
{
<div id="pagenumber" style="position:fixed;bottom:-15px;text-align:center;width:84%">
<nav style="text-align:center">
<ul class="pagination">
<li><a href="@redirectUrl/1" rel="external nofollow" >首页</a></li>
@{
int pageNumber = (int)Math.Ceiling(amount / (count * 1.0));
pageNumber = pageNumber < 1 ? 1 : pageNumber;
//页面上显示的按钮数目(不计首页、末页、上一页、下一页等按钮),若页面总数超过该值则绘制按钮分隔符
const int BUTTON_COUNT = 7;
// 按钮分隔符
const string BUTTON_SEPARATOR = "......";
//按钮分隔符左侧按钮数目(不计首页、末页、上一页、下一页等按钮)
const int LEFT_BUTTON_COUNT = 4;
//按钮分隔符右侧按钮数目(不计首页、末页、上一页、下一页等按钮)
const int RIGHT_BUTTON_COUNT = 2;
string[] urlSegments = Request.Url.Segments;
int selectedIndex = 0;
int.TryParse(urlSegments[urlSegments.Length - 1], out selectedIndex);
int previous = (selectedIndex - 1) <= 0 ? 1 : selectedIndex - 1;
int next = (selectedIndex + 1 > pageNumber) ? pageNumber : selectedIndex + 1;
var r=Request.Cookies[""];
if (pageNumber > BUTTON_COUNT)
{
<li><a id="next" href="@redirectUrl/@previous" rel="external nofollow" >上一页</a></li>
for (int i = 1; i <= BUTTON_COUNT; i++)
{
if ( selectedIndex >= LEFT_BUTTON_COUNT && selectedIndex%LEFT_BUTTON_COUNT==0 && i <= LEFT_BUTTON_COUNT)
{
<li><a name="pageButton" id="@selectedIndex" href="@redirectUrl/@selectedIndex" rel="external nofollow" >@selectedIndex</a></li>
int step = selectedIndex;
int tag = 0;
for (i = 1; i <= LEFT_BUTTON_COUNT; i++)
{
tag = i + step;
if (tag > pageNumber - RIGHT_BUTTON_COUNT)
{
if (i <= LEFT_BUTTON_COUNT)
{
i = LEFT_BUTTON_COUNT + 1;
}
break;
}
<li><a name="pageButton" id="@tag" href="@redirectUrl/@tag" rel="external nofollow" rel="external nofollow" >@tag</a></li>
}
}
else if (i <= LEFT_BUTTON_COUNT && selectedIndex<LEFT_BUTTON_COUNT)
{
<li><a name="pageButton" id="@i" href="@redirectUrl/@i" rel="external nofollow" rel="external nofollow" >@i</a></li>
}
else if (i < LEFT_BUTTON_COUNT && selectedIndex>LEFT_BUTTON_COUNT)
{
int step = selectedIndex / LEFT_BUTTON_COUNT;
int tag = 0;
<li><a name="pageButton" id="@(step*LEFT_BUTTON_COUNT)" href="@redirectUrl/@(step*LEFT_BUTTON_COUNT)" rel="external nofollow" >@(step*LEFT_BUTTON_COUNT)</a></li>
for (i = 1; i <= LEFT_BUTTON_COUNT; i++)
{
tag = i + step * LEFT_BUTTON_COUNT;
if (tag > pageNumber - RIGHT_BUTTON_COUNT)
{
if (i <= LEFT_BUTTON_COUNT)
{
i = LEFT_BUTTON_COUNT + 1;
}
break;
}
<li><a name="pageButton" id="@tag" href="@redirectUrl/@tag" rel="external nofollow" rel="external nofollow" >@tag</a></li>
}
}
//绘制按钮分隔符右侧按钮
if (i==BUTTON_COUNT-1)
{
<li><a name="pageButton" id="@(pageNumber-1)" href="@redirectUrl/@(pageNumber-1)" rel="external nofollow" >@(pageNumber-1)</a></li>
}
else if(i==BUTTON_COUNT)
{
<li><a name="pageButton" id="@pageNumber" href="@redirectUrl/@pageNumber" rel="external nofollow" rel="external nofollow" >@pageNumber</a></li>
}
//绘制按钮分隔符
else if (i >= BUTTON_COUNT -RIGHT_BUTTON_COUNT)
{
<li><span name="pageButton">@BUTTON_SEPARATOR</span></li>
}
}
<li><a id="next" href="@redirectUrl/@next" rel="external nofollow" >下一页</a></li>
}
else
{
for (int i = 1; i <= pageNumber; i++)
{
<li><a name="pageButton" id="@i" href="@redirectUrl/@i" rel="external nofollow" rel="external nofollow" >@i</a></li>
}
}
}
<li><a href="@redirectUrl/@pageNumber" rel="external nofollow" rel="external nofollow" >末页</a></li>
</ul>
</nav>
</div>
<script>
$(function () {
//设置被选中按钮的背景色
var selected = $('#@selectedIndex');
if (selected != undefined) {
selected.css('background-color', '#E1E1E1');
}
</script>
}
在前台页面中调用即可绘制分页按钮
@PageHelper.CreatePaginateButton(246, 10, "/usermanager/attentionlist/")
下面是几张分页按钮效果图:
对应的HTML代码:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# asp.net
# mvc5
# 分页
# mvc实现分页
# ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedList.Mvc
# MVC+jQuery.Ajax异步实现增删改查和分页
# MVC分页之MvcPager使用详解
# ASP.NET MVC分页的实现方法
# ASP.NET MVC分页和排序功能实现
# ASP.NET MVC4 HtmlHelper扩展类
# 实现分页功能
# Asp.net MVC 中利用jquery datatables 实现数据分页显示功能
# ASP.NET MVC4 Razor模板简易分页效果
# ASP.NET MVC+EF在服务端分页使用jqGrid以及jquery Datatables的注意
# MVC使用MvcPager实现分页效果
# 行号
# 每页
# 条数
# 下一页
# 上一页
# 分隔符
# 首页
# 末页
# 夹中
# 数据库中
# 计算出
# 是一种
# 跳转
# 这篇文章
# 几张
# 来实现
# 需要注意
# 大家多多
# 为空
相关文章:
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
如何用VPS主机快速搭建个人网站?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
如何制作网站标识牌,动态网站如何制作(教程)?
深圳网站制作的公司有哪些,dido官方网站?
如何选择PHP开源工具快速搭建网站?
如何在腾讯云服务器上快速搭建个人网站?
安徽网站建设与外贸建站服务专业定制方案
建站主机选虚拟主机还是云服务器更好?
免费网站制作appp,免费制作app哪个平台好?
音乐网站服务器如何优化API响应速度?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
建站之星客服服务时间及联系方式如何?
如何通过虚拟机搭建网站?详细步骤解析
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何快速生成橙子建站落地页链接?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
营销式网站制作方案,销售哪个网站招聘效果最好?
网站按钮制作软件,如何实现网页中按钮的自动点击?
网站网页制作专业公司,怎样制作自己的网页?
七夕网站制作视频,七夕大促活动怎么报名?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何快速上传自定义模板至建站之星?
如何在腾讯云免费申请建站?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
建站为何优先选择香港服务器?
如何确保西部建站助手FTP传输的安全性?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
香港服务器建站指南:免备案优势与SEO优化技巧全解析
平台云上自主建站:模板化设计与智能工具打造高效网站
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
如何批量查询域名的建站时间记录?
如何通过建站之星自助学习解决操作问题?
C#怎么创建控制台应用 C# Console App项目创建方法
如何用好域名打造高点击率的自主建站?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
如何用美橙互联一键搭建多站合一网站?
香港服务器如何优化才能显著提升网站加载速度?
如何通过可视化优化提升建站效果?
建设网站制作价格,怎样建立自己的公司网站?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
如何在服务器上配置二级域名建站?
广德云建站网站建设方案与建站流程优化指南
*请认真填写需求信息,我们会在24小时内与您取得联系。