在设计过程中,如遇到显示文本内容过长的问题,可参照如下代码,对显示页面进行分页。
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">
</div>
<div id="pager1" runat="server"></div>
</form>
</body>
</html>