前言:
分页,这个名词,我相信大家对它都不会很陌生的吧;无论是我们浏览网页,还是阅读文章;我们经常都在使用前/后页,首页,尾页等这些操作。
正文:
那么?究竟何为分页那,我们又该如何一步步操作实现那,这似乎是一个难题,此时想起“天下一切难题,知识给你答案”;哈哈哈,其实实际操作或许不难,但是我们一定要想通究竟怎么操作。
思路步骤:(输入:pageSize)
1. 查询数据库中返回的数据,然后让其显示在页面中,此时分页发挥作用;
2. 一种有多少条,共展示多少页,每页展示多少数据;如何动态的分配,这里就有点棘手了。
DAL(数据访问层)
1:数据中一共有多少条记录?
通过sql语句“select count(*) from UserInfo”配合command.ExecuteScalar()属性使用;
2:页面中应该显示多少页?
获取总的页数, 通过记录总数,和用户定义的条数(pagesize)相比较
int pageCount=Convert.ToInt32(Math.Ceiling((double)recoredCount / pageSize));
//取余数Math.Ceiling((double))
//取整Convert.ToInt32()
3:如何动态的根据用户的选择(每页显示条数:pageSize),展示每页多少数据;
“select * form(select *,row_number() over(order by id) as num from userInfo) as t where t.num>start and t.num<end ”
//为什么不直接通过判断主键id的值来判断范围,因为有可能主键的id值不连续,导致每页展示的数据量不够;
//嵌套select,因为新增列num非userinfo表中的字段,默认条件会先执行where后面的,所以需要嵌套。
BLL(业务逻辑层)
int start=(pageIndex-1)*pageSize+1;
int end = pageIndex * pageSize;
return UserInfoDal.GetPageList(start, end);//返回list<UserInfo>
Web界面:
那么此时web界面仅需要用户自己选择,页面展示的数据尺寸即可;(1)但是这里有一个问题,就是需要判断,这里不能超出第一页数据,也不能超出尾页的数据;(2)但是首次访问页面的话,应该展示哪页的数据那,当然是第一页的,所以增加了一个判断,今后使用的次数还会更多的;
int pageIndex;
if(!int.TryParse(Request.QueryString["pageIndex"],out pageIndex))
{
//int.trypase()//成功的话,返回true,否则返回false;首次接收的时候,不会从aspx页面中通过get请求获取任何数据,当然默认就是首页
//out传参数,更有意思了,在方法体外面定义,但是通过方法体中进行赋值,导致外面的变量被赋值;
pageIndex=1;
}
BLL.UserInfoService UserInfoService = new BLL.UserInfoService();
int pagecount = UserInfoService.GetPageCount(pageSize);//获取总页数
//对当前页码值范围进行判断
pageIndex = pageIndex < 1 ? 1 : pageIndex;
pageIndex = pageIndex > pagecount ? pagecount : pageIndex;
扩充知识点:
(1)aspx页面中通过增加pageindex的值,传到后端中进行数据返回;
<div class="pages"><a href="NewList.aspx?pageIndex=1">首页</a> | <a href="NewList.aspx?pageIndex=<%=PageIndex-1<1?1:PageIndex-1%>"> 前页</a> | <a href="NewList.aspx?pageIndex=<%=PageIndex+1>PageCount?PageCount:PageIndex+1%>">后页</a> | <a href="NewList.aspx?pageIndex=<%=PageCount%>"> 尾页 </a> 页次:<%=PageIndex%>/<%=PageCount%>页 </div>
(2)当然了,从后端数据传到前端也更是有意思的
public string StrHtml { get; set; }
StringBuilder sb = new StringBuilder();
foreach (UserInfo userInfo in list)
{
sb.AppendFormat("<li><span>{0}</span><a href='#' target='_blank'>{1}</a></li>",userInfo.RegTime.ToShortDateString(),userInfo.UserName);
}
StrHtml = sb.ToString();
前端接收:
<%=StrHtml %>
后记:
后期会继续补充完善此博客,将“数字分页”功能思路步骤写到里面,敬请期待,素质点击、关注、评论一条龙;