62,243
社区成员




/* 调用时请先新增加一个用户控件,在上面拖一个标签.
* 用户控件的代码如下
* 调用方式为:
* 1.先设置本分页控件的记录总数,一般为所读取的全部记录的数量.如
* Pager1.Record = query.Records;
* 2.设置每页每版显示的记录条数.如
* Pager1.Items = 15;
* 3.设置每个大版面显示的页面数量.请设置 PageButtonCount的值,默认为:10
* 4.调用此方法: Pager1.ShowPage();
*/
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;
public partial class Pager : System.Web.UI.UserControl
{
#region 属性
private string PREV = "<span style=\" font-family:Webdings\" title=\"上一页\">7</span>";
private string NEXT = "<span style=\" font-family:Webdings\" title=\"下一页\">8</span>";
private string FIRST = "<span style=\" font-family:Webdings\" title=\"首页\">9</span>";
private string LAST = "<span style=\" font-family:Webdings\" title=\"末页\">:</span>";
private string SPACE = " ";
private int _pageButtonCount = 10;//每版显示10页
/// <summary>
/// 每版显示分页按钮数
/// </summary>
public int PageButtonCount
{
get { return _pageButtonCount; }
set { _pageButtonCount = value; }
}
private string _text;
/// <summary>
/// 分页控件文本的样式
/// </summary>
public string TextCss
{
get { return _text; }
set { _text = value; }
}
private string _css;
/// <summary>
/// 此处用来设置连接的样式
/// </summary>
public string Css
{
get { return _css; }
set { _css = value; }
}
private string _ci;
/// <summary>
/// 设置当前页的数字的样式
/// </summary>
public string currentIndexPageStyle
{
get { return _ci; }
set { _ci = value; }
}
private int _record;
/// <summary>
/// 设置或得到全部的记录数
/// </summary>
public int Record
{
set { _record = value; }
get { return _record; }
}
private int _items;
/// <summary>
/// 每页显示的记录数
/// </summary>
public int Items
{
get { return _items; }
set { _items = value; }
}
/// <summary>
/// 总共有几页
/// </summary>
private int PageTotal
{
get
{
return (int)((Record + Items-1) / Items);
}
}
#endregion
/// <summary>
/// 得到每一个连接的参数
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
private string getUrl(string index)
{
string Url = string.Empty;
for (int i = 0; i < Request.QueryString.Count; i++)
{
if (Request.QueryString.GetKey(i).ToLower() != "pageindex") {
Url = Url + "&" + Request.QueryString.GetKey(i).ToString() + "=" + Server.UrlEncode(Request.QueryString[i].ToString());
}
}
Url = Request.Path + "?pageindex=" + index + Url;
//string root = "http://" + this.Request.Url.Host;
//string pth = root + Request.Path + "?pageindex=" + index + Url;
//Url =root+this.Request.ApplicationPath+"/html.aspx?url=" +CB.Libraries.Share.Share.UrlEncode( pth,Page);
return Url;
}
/// <summary>
/// 得到分页按钮开始和结束的数字
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
private void getStartEnd(ref int start, ref int end)
{
start =curindex-PageButtonCount/2 + 1-PageButtonCount%2;
end = curindex + PageButtonCount / 2;
if (start < 1)
{
end = end - start + 1;
}
if (end > PageTotal)
{
start = start - end + PageTotal;
end = PageTotal;
}
if (start < 1)
{
start = 1;
}
}
/// <summary>
/// 当前页码
/// </summary>
private int curindex
{
get
{
if (Request.QueryString["pageindex"] == null || Convert.ToInt32(Request.QueryString["pageindex"]) < 1)
return 1;
else if (Convert.ToInt32(Request.QueryString["pageindex"]) > PageTotal)
return PageTotal;
else
return Convert.ToInt32(Request.QueryString["pageindex"]);
}
}
/// <summary>
/// 得到数字连接的数字,类似于 1 2 3 4 5 6 7 8
/// </summary>
/// <returns></returns>
private string getNumber()
{
string mid = string.Empty;
int start = 0;
int end = 0;
getStartEnd(ref start, ref end);
for (int i =start; i <= end; i++)
{
if (i == curindex)//curindex为当前的页面数,如果等于当前的页面数,则不给它设置超连接
mid = mid + "<span class='" + currentIndexPageStyle + "' >" + i.ToString() + "</span>" + SPACE;
else
mid = mid + "<a class='"+Css+"' href='" + getUrl(i.ToString()) + "'>" + i.ToString() + "</a>" + SPACE;
}
return mid;
}
/// <summary>
/// 分页的方法,要调用这个
/// </summary>
public void ShowPage()
{
if (Record == 0) { //当前无记录
LblNvbar.Text = "分页:" + FIRST + SPACE + PREV + SPACE+"当前无记录"+SPACE + NEXT + SPACE + LAST ;
}
else {
int start = 0;
int end = 0;
getStartEnd(ref start, ref end);
if (curindex == 1)
{ //在第一页
LblNvbar.Text = "分页:" + FIRST + SPACE + PREV + SPACE + getNumber() + "<a class='" + Css + "' href='" + getUrl((curindex + 1).ToString()) + "'>" + NEXT + "</a>" + SPACE + "<a class='" + Css + "' href='" + getUrl(PageTotal.ToString()) + "'>" + LAST + "</a>" + "第" + curindex.ToString() + "页共" + PageTotal.ToString() + "页.共" + Record.ToString() + "条记录";
}
else if (curindex == PageTotal)
{ //最后一页
LblNvbar.Text = "分页:" + "<a class='" + Css + "' href='" + getUrl("1") + "'>" + FIRST + "</a>" + SPACE + "<a class='" + Css + "' href='" + getUrl((curindex - 1).ToString()) + "'>" + PREV + "</a>" + SPACE + getNumber() + NEXT + SPACE + LAST + "第" + curindex.ToString() + "页共" + PageTotal.ToString() + "页.共" + Record.ToString() + "条记录";
}
else
{
LblNvbar.Text = "分页:" + "<a class='" + Css + "' href='" + getUrl("1") + "'>" + FIRST + "</a>" + SPACE + "<a class='" + Css + "' href='" + getUrl((curindex - 1).ToString()) + "'>" + PREV + "</a>" + SPACE + getNumber() + "<a class='" + Css + "' href='" + getUrl((curindex + 1).ToString()) + "'>" + NEXT + "</a>" + SPACE + "<a class='" + Css + "' href='" + getUrl(PageTotal.ToString()) + "'>" + LAST + "</a>" + "第" + curindex.ToString() + "页共" + PageTotal.ToString() + "页.共" + Record.ToString() + "条记录";
}
}
LblNvbar.CssClass = TextCss;
}
}
html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="x-ua-compatible" content="ie=7" />
<title></title>
<style type="text/css">
* { padding: 0px; margin: 0px; }
html { font-size: 0.75em; }
div { width: 800px; margin: 20px auto 20px auto; }
.current { background-color: #2E6AB1; border: 1px solid navy; color: white; font-weight: bold; margin-right: 4px; padding: 2px 10px; }
div a { border: 1px solid #9AAFE5; color: #2E6AB1; margin-right: 4px; padding: 2px 5px; text-decoration: none; }
</style>
</head>
<body>
<div>
<span class="current">1</span> <a href="/cate/mvc/2">2</a> <a href="/cate/mvc/3">3</a>
<a href="/cate/mvc/4">4</a> <a href="/cate/mvc/5">5</a> <a href="/cate/mvc/6">6</a>
<a href="/cate/mvc/7">7</a> <a href="/cate/mvc/8">8</a> <a href="/cate/mvc/9">9</a>
<a href="/cate/mvc/10">10</a> <a href="/cate/mvc/11">11</a> ...<a href="/cate/mvc/12">12</a>
<a href="/cate/mvc/2">Next ></a>
</div>
<div>
<%=PM.PreviousUrl %>
<%=PM.FirstUrl %>
<%=PM.PageHtml %>
<%=PM.NextUrl %>
<%=PM.LastUrl %>
</div>
</body>
</html>
public GL.Tool.PageModel PM;
public int Index = 1;
protected void Page_Load(object sender, EventArgs e)
{
PM = new GL.Tool.PageModel(100, 9, 11, true, "cate/mvc/" + Index, "/", "first", "last", "<a href=\"{0}\">{1}</a>", "<span class=\"current\">{0}</span>", "");
GL.Tool.Pagination.FillPageModel(PM);
if (Index == 1)
{
PM.PreviousUrl = "";
PM.FirstUrl = "";
PM.NextUrl = "<a href=\"" + PM.NextUrl + "\">Next ></a>";
PM.LastUrl = "...<a href=\"cate/mvc/" + PM.PageCount + "\">" + PM.PageCount + "</a>";
}
else if (Index == PM.PageCount)
{
PM.PreviousUrl = "<a href=\"" + PM.PreviousUrl + "\">< Prev</a>";
PM.FirstUrl = "<a href=\"cate/mvc/1\">1</a>...";
PM.NextUrl = "";
PM.LastUrl = "";
}
else
{
PM.PreviousUrl = "<a href=\"" + PM.PreviousUrl + "\">< Prev</a>";
PM.FirstUrl = "<a href=\"cate/mvc/1\">1</a>...";
PM.NextUrl = "<a href=\"" + PM.NextUrl + "\">Next ></a>";
PM.LastUrl = "...<a href=\"cate/mvc/" + PM.PageCount + "\">" + PM.PageCount + "</a>";
}
}
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;
public partial class UserControls_PageCute : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 自定义分页控件
/// </summary>
/// <param name="recordNum">总记录条数</param>
/// <param name="NumperPage">每页显示记录条数</param>
/// <param name="CurrentPage">当前页</param>
/// <param name="pp">最多显示页面链接个数</param>
public void SetPage(int recordNum,int NumperPage,int CurrentPage,int pp,string url,string url_end)
{
string panel_text;
int thepages,pi;
if (recordNum % NumperPage > 0)
{
thepages = recordNum / NumperPage + 1;
}
else
{
thepages = recordNum / NumperPage;
}
if (thepages == 0)
{
PageCute.Visible = false;
}
else
{
if ((CurrentPage > thepages) || (CurrentPage < 1))
{
CurrentPage = 1;
}
panel_text = "<ul>";
int ppp, pl, pr;
ppp = pp / 2;
if (ppp % 2 == 0)
{
ppp = ppp - 1;
}
pl = CurrentPage - ppp;
pr = pl + pp - 1;
if (pl < 1)
{
pr = pr - pl + 1;
pl = 1;
if (pr > thepages)
{
pr = thepages;
}
}
if (pr > thepages)
{
pl = pl + thepages - pr;
pr = thepages;
if (pl < 1)
{
pl = 1;
}
}
if (CurrentPage > 1)
{
panel_text += "<li><a href=\"" + url + (CurrentPage - 1).ToString() + url_end + "\">上一页</a></li>";
}
else
{
panel_text += "<li><span class=\"disable\">上一页</span></li>";
}
if (pl > 1)
{
panel_text += "<li><a href=\"" + url + "1" + url_end + "\" >1</a></li>";
if (pl > 2)
{
panel_text += "<li>...</li>";
}
}
for (pi = pl; pi <= pr; pi++)
{
if (CurrentPage==pi) {
panel_text += "<li><span class=\"current\">" + pi.ToString() + " </span></li>";
}else{
panel_text += "<li><a href=\"" + url + pi.ToString() + url_end + "\">" + pi.ToString() + "</a></li>";
}
}
if (pr < thepages )
{
if (pr<(thepages-1))
{
panel_text += "<li>...</li>";
}
panel_text += "<li><a href=\"" + url + (thepages).ToString() + url_end + "\">" + (thepages).ToString() + "</a></li>";
}
if (CurrentPage < thepages)
{
panel_text += "<li><a href=\"" + url + (CurrentPage + 1).ToString() + url_end + "\" >下一页</a></li>";
}
else
{
panel_text += "<li><span class=\"disable\">下一页</span></li>";
}
//PageCute.v
panel_text += "<li> 共" + thepages.ToString() + "页</li></ul>";
Page_Cute.Text = panel_text;
}
}
}
/*---------------------------------分页控件----------------------------------*/
.pagePanel{
position:relative;
background:#F7F7F7;
border:1px solid #EDEDED;
margin:15px 0px;
height:30px;
}
.pagePanel ul{
position:absolute;
top:7px;
right:7px;
margin:0px;
padding:0px;
}
.pagePanel li{
float:left;
margin-left:5px;
display:inline;
color:#999999;
}
.pagePanel li a, .pagePanel li span{
display:block;
line-height:16px;
padding:0 5px;
border:1px solid #A5A5A5;
color:#484848;
}
.pagePanel li a:hover, .pagePanel li span.current{
border:1px solid #FFA200;
background:#FFA200;
color:#FFF;
text-decoration:none;
}
.pagePanel li span.disable{
color:#A5A5A5;
}
/*---------------------------------分页控件----------------------------------*/
public GL.Tool.PageModel PM;
protected void Page_Load(object sender, EventArgs e)
{
PM = new GL.Tool.PageModel(Count, 10, 9, true, "index-" + intType + "-" + Index, "-", "first", "last", "<a href=\"{0}.html\">{1}</a>", "<span>{0}</span>", "");
Pagination.FillPageModel(PM);
PM.PreviousUrl = PM.PreviousUrl == "first" ? PM.LastUrl : PM.PreviousUrl + ".html";
PM.NextUrl = PM.NextUrl == "last" ? PM.FirstUrl : PM.NextUrl + ".html";
}
<a href="<%=PM.FirstUrl %>.html">首页</a> <a href="<%=PM.PreviousUrl %>">上一页</a>
<%=PM.PageHtml %>> <a href="<%=PM.NextUrl %>">下一页</a> <a href="<%=PM.LastUrl %>.html">
末页</a>
/// <summary>
/// 填充GL.Tool.PageModel。
/// </summary>
/// <param name="PM"></param>
public static void FillPageModel(PageModel PM)
{
PM.PageCount = PM.InfoCount % PM.ShowInfoCount == 0 ? PM.InfoCount / PM.ShowInfoCount : (PM.InfoCount - PM.InfoCount % PM.ShowInfoCount) / PM.ShowInfoCount + 1;
PM.Index = int.Parse(PM.Location.Remove(0, PM.Location.LastIndexOf(PM.PageQueryString) + PM.PageQueryString.Length));
PM.Url = PM.Location.Remove(PM.Location.LastIndexOf(PM.PageQueryString) + PM.PageQueryString.Length);
PM.FirstUrl = PM.Url + "1";
PM.LastUrl = PM.Url + PM.PageCount;
PM.PreviousUrl = PM.Index == 1 ? (PM.FristPreviousUrl == "" ? PM.LastUrl : PM.FristPreviousUrl) : (PM.Url + (PM.Index - 1));
PM.NextUrl = PM.Index == PM.PageCount ? (PM.LastNextUrl == "" ? PM.FirstUrl : PM.LastNextUrl) : (PM.Url + (PM.Index + 1));
string Url = null;
int c = (PM.ShowPageCount - PM.ShowPageCount % 2) / 2;
if (PM.PageCount < PM.ShowPageCount || PM.PageCount == PM.ShowPageCount)
for (int i = 1; i <= PM.PageCount; i++)
Url += (PM.Index == i ? i.ToString() : (PM.Url + i)) + "∴";
else if (PM.ShowPageCount % 2 != 0)
if (PM.Index < c + 2)
for (int i = 1; i <= PM.ShowPageCount; i++)
Url += (PM.Index == i ? i.ToString() : (PM.Url + i)) + "∴";
else if (PM.Index > PM.PageCount - c - 1)
for (int i = PM.PageCount - 2 * c; i <= PM.PageCount; i++)
Url += (PM.Index == i ? i.ToString() : (PM.Url + i)) + "∴";
else
for (int i = PM.Index - c; i <= PM.Index + c; i++)
Url += (PM.Index == i ? i.ToString() : (PM.Url + i)) + "∴";
else
if (PM.Side == true)
if (PM.Index <= c)
for (int i = 1; i <= PM.ShowPageCount; i++)
Url += (PM.Index == i ? i.ToString() : (PM.Url + i)) + "∴";
else if (PM.Index > PM.PageCount - c - 1)
for (int i = PM.PageCount - PM.ShowPageCount + 1; i <= PM.PageCount; i++)
Url += (PM.Index == i ? i.ToString() : (PM.Url + i)) + "∴";
else
for (int i = PM.Index - c + 1; i <= PM.Index + c; i++)
Url += (PM.Index == i ? i.ToString() : (PM.Url + i)) + "∴";
else
if (PM.Index < c + 2)
for (int i = 1; i <= PM.ShowPageCount; i++)
Url += (PM.Index == i ? i.ToString() : (PM.Url + i)) + "∴";
else if (PM.Index > PM.PageCount - c)
for (int i = PM.PageCount - 2 * c + 1; i <= PM.PageCount; i++)
Url += (PM.Index == i ? i.ToString() : (PM.Url + i)) + "∴";
else
for (int i = PM.Index - c; i < PM.Index + c; i++)
Url += (PM.Index == i ? i.ToString() : (PM.Url + i)) + "∴";
Url = Url.Remove(Url.Length - 1);
string[] strs = Url.Split('∴');
foreach (string str in strs)
PM.PageHtml += (str == PM.Index.ToString() ? string.Format(PM.OnFocusHtml, str) : string.Format(PM.UnFocusHtml, (str + "∴" + str.Remove(0, str.LastIndexOf(PM.PageQueryString) + PM.PageQueryString.Length)).Split('∴'))) + PM.SpacesHtml;
PM.PageHtml = PM.PageHtml.Remove(PM.PageHtml.LastIndexOf(PM.SpacesHtml));
}
/// <summary>
/// 目录分页实体。
/// </summary>
public class PageModel
{
private int _infocount;
private int _showinfocount;
private int _pagecount;
private int _showpagecount;
private int _index;
private bool _side;
private string _location;
private string _url;
private string _pagequerystring;
private string _fristpreviousurl;
private string _lastnexturl;
private string _unfocushtml;
private string _onfocushtml;
private string _spaceshtml;
private string _firsturl;
private string _lasturl;
private string _previousurl;
private string _nexturl;
private string _pagehtml;
/// <summary>
/// 构造函数(默认)。
/// </summary>
public PageModel()
{ }
/// <summary>
/// 构造函数(赋值)。
/// </summary>
/// <param name="infocount">信息总数。</param>
/// <param name="showinfocount">每页显示信息数。</param>
/// <param name="showpagecount">显示页数。</param>
/// <param name="side">显示页数为偶数时的偏移方式(true左,false右)。</param>
/// <param name="location">完整地址。</param>
/// <param name="pagequerystring">分页QueryString格式。</param>
/// <param name="fristpreviousurl">当期页为首页时上一页的Url。</param>
/// <param name="lastnexturl">当期页为末页时下一页的Url。</param>
/// <param name="unfocushtml">非当前页Html(不包含首页,上一页,下一页,末页)。</param>
/// <param name="onfocushtml">当前页Html。</param>
/// <param name="spaceshtml">页数间空隙Html。</param>
public PageModel(int infocount, int showinfocount, int showpagecount, bool side, string location, string pagequerystring, string fristpreviousurl, string lastnexturl, string unfocushtml, string onfocushtml, string spaceshtml)
{
this._infocount = infocount;
this._showinfocount = showinfocount;
this._showpagecount = showpagecount;
this._side = side;
this._location = location;
this._pagequerystring = pagequerystring;
this._fristpreviousurl = fristpreviousurl;
this._lastnexturl = lastnexturl;
this._unfocushtml = unfocushtml;
this._onfocushtml = onfocushtml;
this._spaceshtml = spaceshtml;
}
/// <summary>
/// 信息总数。
/// </summary>
public int InfoCount
{
set { _infocount = value; }
get { return _infocount; }
}
/// <summary>
/// 每页显示信息数。
/// </summary>
public int ShowInfoCount
{
set { _showinfocount = value; }
get { return _showinfocount; }
}
/// <summary>
/// 总页数。
/// </summary>
public int PageCount
{
set { _pagecount = value; }
get { return _pagecount; }
}
/// <summary>
/// 显示页数。
/// </summary>
public int ShowPageCount
{
set { _showpagecount = value; }
get { return _showpagecount; }
}
/// <summary>
/// 当前页。
/// </summary>
public int Index
{
set { _index = value; }
get { return _index; }
}
/// <summary>
/// 显示页数为偶数时的偏移方式(true左,false右)。
/// </summary>
public bool Side
{
set { _side = value; }
get { return _side; }
}
/// <summary>
/// 当前页完整地址。
/// </summary>
public string Location
{
set { _location = value; }
get { return _location; }
}
/// <summary>
/// 去地址页数QueryString地址。
/// </summary>
public string Url
{
set { _url = value; }
get { return _url; }
}
/// <summary>
/// 分页QueryString格式。
/// </summary>
public string PageQueryString
{
set { _pagequerystring = value; }
get { return _pagequerystring; }
}
/// <summary>
/// 当期页为首页时上一页的Url。
/// </summary>
public string FristPreviousUrl
{
set { _fristpreviousurl = value; }
get { return _fristpreviousurl; }
}
/// <summary>
/// 当期页为末页时下一页的Url。
/// </summary>
public string LastNextUrl
{
set { _lastnexturl = value; }
get { return _lastnexturl; }
}
/// <summary>
/// 非当前页Html(不包含首页,上一页,下一页,末页)。
/// </summary>
public string UnFocusHtml
{
set { _unfocushtml = value; }
get { return _unfocushtml; }
}
/// <summary>
/// 当前页Html。
/// </summary>
public string OnFocusHtml
{
set { _onfocushtml = value; }
get { return _onfocushtml; }
}
/// <summary>
/// 页数间空隙Html。
/// </summary>
public string SpacesHtml
{
set { _spaceshtml = value; }
get { return _spaceshtml; }
}
/// <summary>
/// 首页Url地址。
/// </summary>
public string FirstUrl
{
set { _firsturl = value; }
get { return _firsturl; }
}
/// <summary>
/// 末页Url地址。
/// </summary>
public string LastUrl
{
set { _lasturl = value; }
get { return _lasturl; }
}
/// <summary>
/// 上一页Url地址。
/// </summary>
public string PreviousUrl
{
set { _previousurl = value; }
get { return _previousurl; }
}
/// <summary>
/// 下一页Url地址。
/// </summary>
public string NextUrl
{
set { _nexturl = value; }
get { return _nexturl; }
}
/// <summary>
/// 分页Html。
/// </summary>
public string PageHtml
{
set { _pagehtml = value; }
get { return _pagehtml; }
}
}