第一步:数据层
写一个方法GetPageList()返回该表对应的所有数据模型集合List<Model.UserInfo>
写一个方法GetRecordCount()通过SqlHelper.ExecuteScalar()获得所有的记录条数
public List<Model.UserInfo> GetPageList(int pageStart, int pageEnd) { string sql = "select * from (select *,ROW_NUMBER() over(order by id) as num from UserInfo) as t where t.num>=@pageStart and t.num<=@pageEnd"; SqlParameter[] pars = { new SqlParameter("@pageStart",SqlDbType.Int){Value=pageStart},new SqlParameter("@pageEnd",SqlDbType.Int){Value=pageEnd} }; DataTable dt = SqlHelper.GetDataTable(sql, CommandType.Text,pars); List<Model.UserInfo> list = null; if (dt.Rows.Count > 0) { list = new List<Model.UserInfo>(); Model.UserInfo userInfo = null; foreach (DataRow row in dt.Rows) { userInfo = new Model.UserInfo(); LoadEntity(userInfo, row); list.Add(userInfo); } } return list; } public int GetRecordCount() { string sql = "select count(*) from UserInfo"; return Convert.ToInt32(SqlHelper.ExecuteScalar(sql, CommandType.Text)); }
第二步:业务层
写一个方法GetPageList(int pageIndex,int pageSize),通过pageIndex和pageSize计算出pageStart和pageEnd,开始页和结束页,传给数据层
写一个方法GetPageCount()通过传进了的每页显示多少条pageSize,和调用数据层GetRecordCount()方法得到的总条数,相除得到总页数
public List<Model.UserInfo> GetPageList(int pageIndex, int pageSize) { int pageStart = (pageIndex - 1) * pageSize + 1; int pageEnd = pageIndex * pageSize; return UserInfoDal.GetPageList(pageStart, pageEnd); } public int GetPageCount(int pageSize) { int pageRecord = UserInfoDal.GetRecordCount(); int pageCount = Convert.ToInt32(Math.Ceiling((double)pageRecord / pageSize)); return pageCount; }
第三步:UI层
public ActionResult Index() { int pageIndex; if (!int.TryParse(Request["pageIndex"], out pageIndex)) { pageIndex = 1; } ViewBag.pageIndex = pageIndex; int pageSize = 2; int pageCount = UserInfoService.GetPageCount(pageSize); ViewBag.pageCount = pageCount; pageIndex = pageIndex < 1 ? 1 : pageIndex; pageIndex = pageIndex > pageCount ? pageCount : pageIndex; List<Model.UserInfo> list = UserInfoService.GetPageList(pageIndex, pageSize); StringBuilder sb = new StringBuilder(); foreach (Model.UserInfo userInfo in list) { sb.AppendFormat("<li><span>{0}</span><a>{1}</a></li>",userInfo.UName,userInfo.SubTime.ToShortDateString()); } ViewBag.UserInfoList = sb.ToString(); return View(); }
第四步:Common层 -> PageBarHelper
public class PageBarHelper { public static string GetPageBar(int pageIndex, int pageCount) { if (pageCount == 1) return string.Empty; int startPage = pageIndex - 5; startPage = startPage < 1 ? 1 : startPage; int endPage = startPage + 9; if (endPage > pageCount) { endPage = pageCount; startPage = endPage - 9 < 1 ? 1 : endPage - 9; } StringBuilder sb = new StringBuilder(); if (pageIndex!=1) { sb.AppendFormat("<a href='/UserInfo/Index?pageIndex={0}'>首页</a>", 1); } if (pageIndex > 1) { sb.AppendFormat("<a href='/UserInfo/Index?pageIndex={0}'>上一页</a>", pageIndex - 1); } for (int i = startPage; i <= endPage; i++) { if (i == pageIndex) { sb.Append(i); } else { sb.AppendFormat("<a href='/UserInfo/Index?pageIndex={0}'>{0}</a>", i); } } if (pageIndex < pageCount) { sb.AppendFormat("<a href='/UserInfo/Index?pageIndex={0}'>下一页</a>", pageIndex + 1); } if (pageIndex != pageCount) { sb.AppendFormat("<a href='/UserInfo/Index?pageIndex={0}'>尾页</a>", pageCount); } return sb.ToString(); } }