Pager分页

分页组件:

    /// <summary>
    /// 分页组件
    /// </summary>
    public class PagerHelper
    {
        /// <summary>
        /// 分页组件
        /// </summary>
        /// <param name="urlFmt">url格式: newsIndex_{pagenum}.shtml </param>
        /// <param name="totalsize">总条数</param>
        /// <param name="pagesize">每页条数</param>
        /// <param name="currentPage">当前页数</param>
        /// <returns>分页下标</returns>
        public static RawString Pager(string urlFmt, long totalsize, long pagesize, long currentPage)
        {
            //urlFmt => NewsController.ashx?action=list&pagenum={pagenum}
            //                 newsIndex_{pagenum}.shtml
            long totalPageCount = (long)Math.Ceiling((totalsize * 1.0 / pagesize)); //总页数
            long pagebuttom = 4; //8个页标
            long firstpage = Math.Max(currentPage - pagebuttom, 1); //第一个页标
            long endpage = Math.Min(currentPage + pagebuttom, totalPageCount);  //最后一个页标

            StringBuilder sb = new StringBuilder();
            if(firstpage>1) //如果没有遍历到首页
            {
                string url = urlFmt.Replace("{pagenum}","1");
                sb.Append("<li><a href=‘").Append(url).Append("‘>首页</a></li>");
            }

            for (long i = firstpage; i <= endpage; i++)
            {
                string url = urlFmt.Replace("{pagenum}", i.ToString());
                if (i == currentPage)
                {
                    sb.Append("<li class=‘active‘><a>第").Append(i).Append("页</a></li>");
                }
                else
                {
                    sb.Append("<li><a href=‘").Append(url).Append("‘>第").Append(i).Append("页</a></li>");
                }
            }

            if (endpage < totalPageCount) //如果没有遍历到末页
            {
                string url = urlFmt.Replace("{pagenum}", totalPageCount.ToString());
                sb.Append("<li><a href=‘").Append(url).Append("‘>末页</a></li>");
            }
            return new RawString(sb.ToString());
        }
    }

新闻列表 分页 一键静态化:

 public void allNewsListStatic(HttpContext context)
        {
            #region 新闻列表 分页 一键静态化
            AdminHelper.CheckHasPower(context, "新闻一键静态化");
            string categoryidStr = context.Request["categoryid"];
            int categoryid = VolidHelper.CheckStrToInt(categoryidStr);
            TD_NEWSCATEGORY newscate = (TD_NEWSCATEGORY)myORM_BLL.SelectModelById(typeof(TD_NEWSCATEGORY), 1, categoryid);
            long pagesize = 10; //设置每页数量
            long totalsize = myORM_BLL.SelectCountByField(typeof(TD_NEWS), 1, "Categoryid=" + categoryid); //总的新闻条数
            long totalPageCount = (long)Math.Ceiling(totalsize * 1.0 / pagesize); //总页数
            for (long i = 1; i <= totalPageCount; i++) //遍历每一页
            {
                //对于每一页,获得该类别下的新闻集合
                List<TD_NEWS> list = new NewsBLL().SelectNewsByCategoryidAndRownum(categoryid, (i - 1) * pagesize + 1, i * pagesize);
                string cshtml = RazorHelper.RazorParseHtml(context, "~/News/NewsListStatic.cshtml", new
                {
                    categoryid = categoryid,
                    categoryName = newscate.NAME,
                    newses = list,
                    totalsize = totalsize,
                    pagesize = pagesize,
                    currentpage = i
                });
                //静态化
                string pathPre = ConfigurationManager.AppSettings["ViewStaticDirecPre"]; //路径前缀
                string fullPath = pathPre + categoryid + "\\newsIndex_" + i + ".shtml"; //全路径
                string dir = Path.GetDirectoryName(fullPath);
                if (!Directory.Exists(dir))
                {
                    Directory.CreateDirectory(dir);
                }
                File.WriteAllText(fullPath, cshtml);
            }
            AdminHelper.RecordOperateLog(context, "新闻列表 一键静态化,其类别是:" + newscate.NAME);
            context.Response.Redirect("/News/NewsController.ashx?action=list&categoryid=" + categoryid);
            #endregion
        }

NewsController.ashx

根据rownum查询的语句:

/// <summary>
        /// 根据类别ID 按照NO排序 获得指定rownum之间的新闻集合
        /// </summary>
        /// <param name="categoryid">类别ID</param>
        /// <param name="startnum">rownum起始数</param>
        /// <param name="endnum">rownum结束数</param>
        /// <returns>指定rownum之间的新闻集合</returns>
        public List<TD_NEWS> SelectNewsByCategoryidAndRownum(long categoryid,long startnum ,long endnum)
        {
            string sql = @"SELECT * FROM (
                                SELECT ROW_NUMBER()OVER( order by NO asc) NUM,ID,NO,STATUS,CATEGORYID,CREATEBY,CREATEDATE,LASTEDITBY,LASTEDITDATE,DELETEBY,DELETEDATE,TITLE,CONTENT
                                FROM TD_NEWS WHERE STATUS=1 AND CATEGORYID=:CATEGORYID ) T
                                WHERE T.NUM>:startnum AND T.NUM<:startnum";
            DataTable dt= OracleHelper.ExecuteReader(sql, new OracleParameter() { ParameterName = ":CATEGORYID", Value = categoryid },
                new OracleParameter() { ParameterName = ":startnum", Value = startnum },
                new OracleParameter() { ParameterName = ":startnum", Value = endnum });
            List<TD_NEWS> list = new List<TD_NEWS>();
            foreach(DataRow row in dt.Rows)
            {
                TD_NEWS news = RowToModel(row);
                list.Add(news);
            }
            return list;
        }

NewsDAL.cs

时间: 2024-11-04 01:44:27

Pager分页的相关文章

JS案例之1——pager 分页

原文:JS案例之1--pager 分页 学习JS大半年之久,第一次自己尝试写一些小插件,写法参考网上某位牛人写代码的思路. 此处代码写的是静态分页.如果需动态分页,还可以修改下.第一次写,还有很多地方可以优化.希望各位大牛踊跃拍砖. 预览图 源代码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Content="text/html; char

JS小插件之1——pager 分页

学习JS大半年之久,第一次自己尝试写一些小插件,写法参考网上某位牛人写代码的思路. 此处代码写的是静态分页.如果需动态分页,还可以修改下.第一次写,还有很多地方可以优化.希望各位大牛踊跃拍砖. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" Content="text/html; charset=utf-8;"> 5 <t

drupal 7 实现自定义 pager 分页功能

最近在写一个drupal界面,要显示一个表格,需要分页.但是drupal自带的分页都是基于SQL查询的,而我这次要做的是从mongo中查询数据显示(虽然是从mongo中查询,其实是抽象出了一个model),所以就想研究一下如何在drupal中实现不基于SQL查询的分页功能. 看了drupal官方文档,发现drupal默认的pager非常依赖于SQL查询,很难满足我的需求.后来虽然找到一个从mongo查询实现的分页,但是想了想还是决定自己写一个比较通用的工具,将来需要分页的地方多着呢! 1 fun

ThinkPHP 3.2.3 Pager分页

不是很喜欢TP的分页类,因为生成的分页url感觉有点不好理解,例如访问路径xxxx/home/show.html,在模板输出分页后,例如产生了页码,页码链接的路径会变成xxxx/home/show/p/页码.html.本人不是很喜欢这种路径,不过也无关大雅.用久了就好了. $sql = " SELECT f.*,d.dname,FROM_UNIXTIME(f.createtime,'%Y-%m-%d') createdate, " ." FROM_UNIXTIME(f.upd

pager分页框架体会

<pg:pager> 元素的属性中: maxPageItems说的是每页偏移量是多少,这个并不是说每一页显示多少,而是第二页比第一页来说,在第一页的尾部增加多少,第一页又被覆盖多少,是决定每一次加多少,pageOffset=(页数-1)*maxPageItems. 而每一页迭代显示多少是由pagesize决定的,也就是一次在数据库取出多少条数据. 而pageOffset通过request和threadLocal传进去,决定了从哪个位置开始取pagesize个对象. items="${

单篇文章JS模拟分页

废话部分 前两天做了一个前台分页插件,支持ajax读取数据绑定前台 和 url带页码参数跳转两种方式.于是稍加改动,做了一个单篇文章js模拟分页的代码,为什么说是模拟分页呢?因为在服务器响应HTML请求的时候,就已经把全文回传给客户端了,只是我们通过js的方式,把全文隐藏,每次翻页至显示出我们需要的那一部分,而不是真正的按需要去发出HTML请求.所以,在做这个插件的时候去掉了ajax请求的功能及其附带参数,去掉了pageSize参数(恒等于1).这里就不讨论具体的技术细节了和上一篇的分页计算原理

应用程序框架实战二十四:基础查询扩展 - 分页与排序

上一篇介绍了IQueryable的Where方法存在的问题,并扩展了一个名为Filter的过滤方法,它是Where方法的增强版.本篇将介绍查询的另一个重要主题——分页与排序. 对于任何一个信息系统,查询都需要分页,因为不可能直接返回表中的所有数据. 如果直接使用原始的Ado.Net,我们可以编写一个通用分页存储过程来进行分页查询,然后通过一个DataTable返回给业务层.不过进入Entity Framework时代,分页变得异常简单,通过Skip和Take两个方法配合就可以完成任务. 为了让分

asp.net mvc 自定义pager封装与优化

asp.net mvc 自定义pager封装与优化 Intro 之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, 自定义分页 pager 越来越容易扩展了. HtmlHelper Pager扩展 Pager V1.0 : 1 /// <summary> 2 /// Pager V1.0 3 /// </summary> 4 /// <param name="helper"&

go分页

简单的beego分页功能代码 一个简单的beego分页小插件(源代码在最下面): 支持条件查询 支持参数保留 支持自定义css样式 支持表/视图 支持参数自定义 默认为pno 支持定义生成链接的个数 使用方式: 1)action中,引入包,然后如下使用: /** * 日志列表 */ func (this *LogController) List() { pno, _ := this.GetInt("pno") //获取当前请求页 var tlog []m.Tb_log var cond