超长文本内容分页(详解)

在设计过程中,如遇到显示文本内容过长的问题,可参照如下代码,对显示页面进行分页。

using GNet.DataBase  是一个数据通用组件。

protected string INI_Data() 可采用其他形式获取要显示内容。返回一个字符串。

 

后台:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GNet.DataBase;

public partial class pager : System.Web.UI.Page
{
    /// <summary>
    ///  start 字符开始位置
    ///  stop  字符结束位置
    ///  totalpages 粗略的总页数
    ///  stat 分页点位置
    ///  curpage 当前页
    ///  pagecount 分页总数
    ///  pagesize 每页显示字符数
    /// </summary>
    int i, start, stop, totalpages, stat,curpage, pagecount, pagesize;
  
    protected void Page_Load(object sender, EventArgs e)
    {
        //获得当前的页数
        string page = Request.Params["page"];
        if (page == "" || page == null)
            page = "1";
        curpage = Convert.ToInt32(page);//当前页数
        Pager(); 
    }
    protected string INI_Data()
    {
        //获取显示内容
        string shtml = "";
        DataComponent ds = new DataComponent(Server.MapPath("") + "http://www.cnblogs.com/nightjass/admin/file://web.config/", true);
        string strSQL = "select * from test where id='1'";
        DataTable dt = ds.GetDataTable(strSQL, true);
        shtml = dt.Rows[0]["content"].ToString();       
        dt.Dispose();
        ds.Dispose();

        return shtml;
    }
    protected void Pager()
    {
        //变量初始值
        stat = 0;       
        start = 0;//开始查询的字符串位置,初始为0
        stop = 0;//结束字符串位置
        pagesize = 2000;//定义每页至少显示字符串数
        pagecount = 0; //实际页总数

        //获取页面内容
        string shtml = "";
        shtml = INI_Data();
        //判断页面的内容长度是否大于定义的每页至少显示字符串数

        if (shtml.Length >= pagesize) //如果大于字符串数,则我们可以分页显示
        {
            totalpages = shtml.Length / pagesize;//获得大致的总页数
            //根据目前获得的页数循环
            for (i = 0; i < totalpages; i++)
            {
                //如果查询开始位置到查询的范围超出整个内容的长度,那么就不用寻找断点(分页点);反之,查找
                if (start + pagesize < shtml.Length)
                {
                    stat = shtml.IndexOf("</P>", start + pagesize); //查找</P>分页点的位置 (</P>大写P)
                   
                    if (stat <= 0)//如果找不到
                    {
                        stat = shtml.IndexOf("</p>", start + pagesize);//查找</p>(小写p)分页点的位置;这里您可以自己设置分页点的判断

                    }
                    if (stat <= 0)//如果找不到分页点,说明不能分页,也就不需要做其他的劳动了;否则,就进行分页
                    {
                        content.InnerHtml = shtml;//将结果付给要导出的变量
                    }
                    else
                    {
                        stop = stat;//分页点的位置也就作为这一页的终点位置
                        if (start + pagesize >= shtml.Length)//如果起始位置到查询的范围超出整个内容的长度,那么这一页的终点位置为内容的终点
                        {
                            stop = shtml.Length;
                        }
                        else
                        {
                            if (curpage == i + 1)//如果是当前,那么输出当前页的内容
                            {
                                shtml = shtml.Substring(start, stop - start);//取内容的起始位置到终点位置这段字符串输出
                            }
                            start = stat;//将终点位置作为下一页的起始位置
                          
                            content.InnerHtml = shtml;
                        }
                    }
                }
                pagecount++;//获得实际页总数
            }

            string html = "";//定义分页代码变量
            if (pagecount > 1)//当页数大于1的时候我们显示页数
            {
                for (i = 1; i <= pagecount; i++)
                {
                    if (i == curpage)//如果是当前页,加粗显示
                    {
                        html += "<b>[" + i + "]</b> ";
                    }
                    else
                    {
                        html += "<a href=?&page=" + i + ">[" + i + "]</a> ";
                    }
                }
                if (curpage + 1 > pagecount)//显示下一页,方便浏览
                {
                    html += "<a href=?page=" + (pagecount) + ">[下一页]</a></p>";
                }
                else
                {
                    html += "<a href=?page=" + (curpage + 1) + ">[下一页]</a></p>";
                }
            }
            pager1.InnerHtml = html;

        }
        else
        {
            content.InnerHtml = shtml;
        }
    }
}

前台:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="pager.aspx.cs" Inherits="pager" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div id="content" runat="server">
        &nbsp;</div>
        <div id="pager1" runat="server"></div>
    </form>
</body>
</html>

posted on 2009-01-15 15:52  魏金梁  阅读(493)  评论(1编辑  收藏  举报

导航