C#,.NetCore 数据分页逻辑 (gitblogs博客在用,可以试一试)

时间:2020-01-30 21:37 作者:Mr.Pan 阅读数:663

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());



推荐文章

[推荐] .NET Core 学习资料精选:入门

[推荐] 数据库常见死锁原因及处理

[推荐] C# 设置Excel数据自适应行高、列宽的2种情况 (转)

[推荐] C++ vector 和set结合数字去重练习

[推荐] win7 .net core 部署 The library hostfxr.dll was found, but loading it from C:\<path_to_app>\hostfxr.dll failed

[推荐] JdbcTemplate多数据源使用

[推荐] 深入学习Redis(2):持久化

[推荐] asp.net core系列 67 Web压力测试工具WCAT

[推荐] .Net Core 2.0 获取客户端IP地址

[推荐] 第七天 让你的container实现跨主机访问

[推荐] 8天玩转并行开发——第八天 用VS性能向导解剖你的程序

[推荐] nodejs app.use(express.static) 静态文件托管 (四)

[推荐] C++ 稀疏表的练习

[推荐] C++ Lambda表达式练习

[推荐] asp.net core系列 33 EF查询数据 (2)

[推荐] Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践

[推荐] 试试发布

[推荐] C++中 *p++ 到底是 *(p++) 还是 (*p)++ 1. 猜想

[推荐] JavaWeb-Log4j: WARN No appenders could be found for logger

[推荐] C++ 模板练习


评论列表



注册用户登录后才能发表评论,请登录注册,访问 博客首页