.net对一篇文章分页

DB db = new DB();
        private int pageindex = 1;//当前页数
        private int pagesize = 3000;//每页显示字符长度
        private int maxsize = 3500;//每页显示最大字符长度

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request["page"] != null)
            {
                pageindex = int.Parse(Request["page"]);
            }
            string sql = "select * from t_arc where id='6476'";
            DataSet ds = db.GetDataSet(sql);
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                System.Collections.Hashtable table = SeparatePages(dr["body"].ToString(), pageindex.ToString(), pagesize);
                if (pageindex == 1)
                {
                    CYZX_NR.Text = "" + table["content"].ToString() + "</p>";    //显示数据根据样式表要求在两边加p标记
                }
                else {
                    CYZX_NR.Text = "<p>" + table["content"].ToString() + "</p>";
                }
                ss.Text = table["pagetxt"].ToString(); //显示分页的
            }
            //取值

           
        }

        /// <summary>
        /// 长内容分页 哈希表需要引用命名空间System.Collections
        /// </summary>
        /// <param name="n_content">内容</param>
        /// <param name="page">是当前页数</param>
        /// <param name="size">每页显示字符长度</param>
        /// <returns></returns>
        public System.Collections.Hashtable SeparatePages(string n_content, string page, int size)
        {
            //在此处放置初始化页的用户代码
            System.Collections.Hashtable returnHash = new System.Collections.Hashtable();
            int start, stops, t, stat, pp, pagecount, pagesize;
            string pa, articletxt, articletext, html;
            int pig = 0;
            //变量初始值
            stat = 0;
            start = 0; //开始查询的字符串位置,初始为0
            stops = 0;
            pagesize = size;//定义每页至少显示字符串数
            pagecount = 0;
            html = "";

            //获得当前的页数
            pa = page;
            if (pa == "" || pa == null)
            {
                pa = "1";
            }
            pp = Convert.ToInt32(pa);

            if (pp <= 0)
            {
                pp = 1;
            }

            //获得内容
            articletxt = n_content;

            //判断页面的内容长度是否大于定义的每页至少显示字符串数
            if (articletxt.Length >= pagesize) // 如果大于字符串数,则我们可以分页显示
            {
                t = articletxt.Length / pagesize; //获得大致的总页数
                for (int j = 0; j <= t; j++)
                {    //如果查询开始位置到查询的范围超出整个内容的长度,那么就不用寻找断点(分页点);反之,查找
                    if (start + pagesize < articletxt.Length)
                    {
                        stat = articletxt.ToLower().IndexOf("</p>", start + pagesize); //查找</P>分页点的位置
                        if (stat == -1 || stat > maxsize)
                            stat = articletxt.ToLower().IndexOf("<br>", start + pagesize); //查找</P>分页点的位置
                        if (stat == -1)
                            stat = articletxt.ToLower().IndexOf("<br />", start + pagesize); //查找</P>分页点的位置
                        if (stat == -1)
                            stat = articletxt.ToLower().IndexOf("\r\n", start + pagesize); //查找</P>分页点的位置
                    }
                    if (stat <= 0)//如果找不到
                    {
                        stops = articletxt.Length; //分页点的位置也就作为这一页的终点位置
                        t = j;
                    }
                    else
                    {
                        stops = stat; //分页点的位置也就作为这一页的终点位置
                    }

                    if (start < articletxt.Length)
                    {
                        if ((articletxt.Length - start) < pagesize)
                        {
                            if (pig == 0)
                            {
                                pagecount = pagecount + 1;
                            }
                            pig = 1;
                        }
                        else
                        {
                            pagecount = pagecount + 1;
                        }
                    }
                    if (start + pagesize >= articletxt.Length) //如果起始位置到查询的范围超出整个内容的长度,那么这一页的终点位置为内容的终点
                    {
                        stops = articletxt.Length;
                    }

                    if (pp == j + 1) //如果是当前,那么输出当前页的内容
                    {
                        articletext = articletxt.Substring(start, stops - start); //取内容的起始位置到终点位置这段字符串输出
                        returnHash["content"] = articletext;
                    }
                    start = stat; //将终点位置作为下一页的起始位置

                }// pagecount = pagecount - 1;
            }
            else
            {
                returnHash["content"] = n_content;
            }
            //分页部分(这里就简单多了)
            //定义分页代码变量
            if (pagecount > 1) //当页数大于1的时候我们显示页数
            {
                if (pp - 1 > 0) //显示上一页,方便浏览
                { html = html + "<a href=\"" + GetUrl("page", (pp - 1)) + "\">[上一页]</a> "; }
                else
                {
                    if (pp == 1)
                    { html = html + "[<font color=#cccccc>上一页</font>] "; }
                    else
                    { html = html + "<a href=\"" + GetUrl("page", 1) + "\">[上一页]</a> "; }
                }

                //一页只显示7条分页连接的处理

                int start0 = 0;
                int end0 = pagecount;
                if (pageindex - 4 > 0)
                {
                    if (pageindex + 3 < pagecount)
                    {
                        start0 = pageindex - 4;
                    }
                    else
                    {
                        start0 = pagecount - 7;
                        if (pagecount < 7)
                        {
                            start0 = 0;
                        }
                    }
                }
                if (pageindex + 3 <= pagecount)
                {
                    if (pageindex + 3 <= 7)
                    {
                        if (pagecount > 7)
                        {
                            end0 = 7;
                        }
                    }
                    else
                    {
                        end0 = pageindex + 3;
                    }
                }


                for (int i = start0 + 1; i <= end0; i++)
                {
                    if (i == pp)   //如果是当前页,加粗显示
                    { html = html + "<b>[" + i + "]</b> "; }
                    else
                    { html = html + "<a href=\"" + GetUrl("page", i) + "\">[" + i + "]</a> "; }
                }
                if (pp + 1 > pagecount)   //显示下一页,方便浏览
                {
                    if (pp == pagecount)
                    { html = html + "[<font color=#cccccc>下一页</font>] "; }
                    else
                    { html = html + "<a href=\"" + GetUrl("page", pagecount) + "\">[下一页]</a></p>"; }
                }
                else
                {
                    html = html + "<a href=\"" + GetUrl("page", pp + 1) + "\">[下一页]</a></p>";
                }
            }
            returnHash["pagetxt"] = html;
            return returnHash;
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="cs">要重新传递的参数</param>
        /// <param name="pnum">新参数值</param>
        /// <returns></returns>
        protected string GetUrl(string cs, int pnum)
        {
            string oldurl = Request.Url.AbsoluteUri;
            int num = oldurl.IndexOf(cs);
            string url = "";
            if (num != -1)
            {
                string bstr = oldurl.Substring(num);
                int n = bstr.IndexOf("&");
                if (n != -1)
                {
                    url = oldurl.Substring(0, num) + cs + "=" + pnum + bstr.Substring(n);
                }
                else
                {
                    url = oldurl.Substring(0, num) + cs + "=" + pnum;
                }
            }
            else
            {
                int n = oldurl.IndexOf("?");
                if (n != -1)
                {
                    url = oldurl + "&" + cs + "=" + pnum;
                }
                else
                {
                    url = oldurl + "?" + cs + "=" + pnum;
                }
            }
            return url;
        }

posted @ 2013-01-07 14:56  沅江  阅读(155)  评论(0编辑  收藏  举报