C# 数据分页逻辑
闲着没事,做了一个分页逻辑,就用在了自己博客上,现在感觉还可以没出什么大问题,写出来大家帮我看看哪里有漏洞,或者有其他更好更优美的写法,一起学习互相讨论
/// <summary> /// 分页逻辑代码 /// </summary> /// <param name="PageIndex">当前页数</param> /// <param name="PageSize">每页数量</param> /// <param name="DataCount">总数据量</param> /// <param name="IsFirstPage">是否首页</param> /// <param name="path">Url路径(主路径,没有分页的部分)</param> /// <param name="queryString">除了分页外的参数</param> /// <returns>分页html</returns> public static string Pager(int PageIndex, int PageSize, int DataCount, bool IsFirstPage, string path, string queryString = "") { int PageCount = (DataCount + PageSize - 1) / PageSize; path = path.EndsWith("/") ? path : path + "/"; StringBuilder sb = new StringBuilder(); int totalPageCount = (DataCount / PageSize) + (DataCount % PageSize == 0 ? 0 : 1); if (totalPageCount <= 10) { for (int i = 1; i <= totalPageCount; i++) { sb.AppendFormat("<li class='page-item {2}'><a class='page-link' href='{0}'>{1}</a></li>", path + i + queryString, i, PageIndex == i ? "active" : ""); } } else if (totalPageCount > 11) { //求出中间值 int middle = PageIndex > 7 ? PageIndex : 7; int begin = middle - 3; int end = middle + 3; //处理1-6的部分 if (PageIndex <= 6) { for (int i = 1; i <= 8; i++) { sb.AppendFormat("<li class='page-item {2}'><a class='page-link' href='{0}'>{1}</a></li>", path + i + queryString, i, PageIndex == i ? "active" : ""); } } else { sb.AppendFormat("<li class='page-item'><a class='page-link' href='{0}'>Prev</a></li>", path + (PageIndex - 1) + queryString); sb.AppendFormat("<li class='page-item {1}'><a class='page-link' href='{0}'>1</a></li>", path + 1 + queryString, PageIndex == 1 ? "active" : ""); sb.AppendFormat("<li class='page-item'><a class='page-link' href='javascript:void(0)'>...</a></li>", ""); } //处理>6的部分 if (PageIndex >= 7) { for (int i = begin; i <= end; i++) { if (i <= totalPageCount) sb.AppendFormat("<li class='page-item {2}'><a class='page-link' href='{0}'>{1}</a></li>", path + i + queryString, i, PageIndex == i ? "active" : ""); } } if (middle >= totalPageCount - 5) { for (int i = end; i < totalPageCount; i++) { sb.AppendFormat("<li class='page-item {2}'><a class='page-link' href='{0}'>{1}</a></li>", path + i + queryString, i, PageIndex == i ? "active" : ""); } } else { sb.AppendFormat("<li class='page-item'><a class='page-link' href='{0}'>...</a></li>", "javascript:void(0)"); sb.AppendFormat("<li class='page-item {2}'><a class='page-link' href='{0}'>{1}</a></li>", path + totalPageCount + queryString, totalPageCount, PageIndex == totalPageCount ? "active" : ""); sb.AppendFormat("<li class='page-item'><a class='page-link' href='{0}'>Next</a></li>", path + (PageIndex + 1) + queryString); } } return sb.ToString(); }
调用方式
ViewBag.Pager = Helper.Pager(PageIndex, PageSize, num, true, url ,Request.QueryString.ToString());