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

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

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>

转载于:https://www.cnblogs.com/nightjass/archive/2009/01/15/1376425.html

************************************************************** ** ** ** *红水晶.net2.0技术可万能扩充栏目式开源企业网站V3.11版权所有* *官方网站:http://www.aspcpu.com* ** ************************************************************** 本系统采用.net2.0技术,必须用.net2.0环境运行本系统,用.net1.1环境运行时会出错 最好在网站根目录下运行本系统 如果运行时提示以下错误: <authenticationmode></authentication> 解决方法如下: 打开管理工具--Internet信息服务, 找到放本系统的网站程序文件夹,右键选属性, 点'目录'或'主目录'选项卡 在'应用程序设置'这里,点一下创建, 给它分配和站点相同的程序池(如DefaultAppPool), 并设置执行权限为'纯脚本'或'脚本和可执行程序', 确定,,ok了 并在属性里点'目录安全性'选项卡 在身份验证和访问控制里点编辑 把启用匿名访问勾起来,并设置帐号(windows里的帐号)给它 1.本系统安全性很强,密码采用多层md5加密,无法暴破 2.可以万能式扩充栏目,灵活性很强 3. 常规管理 企业简介|联系我们 总裁致辞|销**网络 组织机构|公司文化 链接管理|投票管理 系统设置| 新闻管理 添加新闻|新闻列表 产品管理 添加产品|产品列表 分类管理 荣誉**** 管理荣誉**** 客户收藏(前台不显示) 添加客户|客户列表 人才招聘 添加招聘|招聘列表 查看应聘者 留言管理 查看留言 定单管理 查看定单 帐号管理 用户管理 数据库备份与恢复 数据库备份与恢复 网站访问量统计 网站访问量统计 栏目扩展1 添加内容|内容列表 分类管理 栏目扩展2 添加内容|内容列表 分类管理 栏目扩展3 添加内容|内容列表 分类管理 如何栏目扩展和调用 如何栏目扩展 前台如何调用栏目 4.后台路径:adminruan/index.aspx 帐号:admin 密码:admin 5.版权所有,未经本人同意,不得用于任何商业目的,否则责任自负 6.如需要用于商业目的,比如公司网站,政府网站,行业网站等,请购买本系统的商业版,具体价格请联系咨询 7.本系统前台开放源代码,后台部分的源代码需要收取部分钱来购买本系统的商业版就可以得到全部源代码,并免费提供相应的技术支持 本系统作者:柏拉图的程序 联系本系统作者:qq657697290(验证消息:红水晶.net2.0),email:net3m33@126.com,官网:http://www.aspcpu.com 8.并提供模板定制/功能定制等服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值