private int pagesize = 1000;//每页显示字符长度
private int maxsize = 1500;//每页显示最大字符长度
protected void Page_Load(object sender, EventArgs e)
{
if (Request[“page”] != null)
{
pageindex = int.Parse(Request[“page”]);
}
//取值
System.Collections.Hashtable table = SeparatePages(CYPubMethod.HtmlDecode(zxdata.CYZX_NR), pageindex.ToString(), pagesize);
CYZX_NR.InnerHtml = “<p>”+table[“content”].ToString()+”</p>”; //根据样式表要求在两边加p标记
fydiv.InnerHtml = 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 > pagecount)
{
pp = pagecount;
}
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;
}
————————-注意—————————————————————————
GetUrl方法的应用:
传递的参数cs字符串不可存在于地址的文件或文件夹的名字中,如当文件的名字为 In_page.aspx时,cs参数不可为page之类的字符串,否则分页连接出错,可将page参数名称给为pageindex之类的;