.net文章分页

  • Post author:
  • Post category:其他


private int pageindex = 1;//当前页数

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之类的;



版权声明:本文为u012158742原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。