pager
using System;
using System.ComponentModel;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace SZHome.MobileBBS.WebControlLibrary
{
/// <summary>
/// 分页控件
/// 事件:1.点击数字 ----跳到指定数字(pageIndex)页
/// 2.点击省略号 -------显示上(下)页数字 layerIndex--(layerIndex++)
/// 3.点击箭头 -------上(下)翻页 pageIndex--(pageIndex++)
/// </summary>
[DefaultProperty("Text")]
[ToolboxData("<{0}:PagerControl runat=server></{0}:PagerControl>")]
public class PagerControl : WebControl
{
private Int32 pageIndex=1;//当前页
private Int32 layerIndex=1;// 数字页
private Int32 pageCount=10 ;//一次显示多少页
private string numberCss="";// 数字的样式
private Int32 numberCount=0; //当前页显示的数字数
private string url;//翻页页面url
private string preVisible = "visible";//前翻是否呈现
private string nextVisible = "visible";//后翻是否呈现
private string preNumVisible = "visible";
private string nextNumVisible = "visible";
private Int32 rCount=0;//记录数
private Int32 pageSize=20;//每页显示记录条数
[Bindable(true), Category("自定义设置"), DefaultValue(""),Browsable(true),Description("设置翻页数字样式")]
public string NumberCss
{
get
{
String s = (String)ViewState["NumberCss"];
return ((s == null) ? String.Empty : s);
}
set
{
numberCss = value;
ViewState["NumberCss"] = numberCss;
}
}
[Browsable(false), Category("自定义设置"),DefaultValue(1),Description("当前页")]
public Int32 PageIndex
{
get
{
if (ViewState["PageIndex"] == null)
{
ViewState["PageIndex"] = this.pageIndex;
}
return ViewState["PageIndex"] == null ? this.pageIndex : (Int32)ViewState["PageIndex"];
}
set
{
pageIndex=value;
ViewState["PageIndex"] = pageIndex;
}
}
[Browsable(false),DefaultValue(1)]
public Int32 LayerIndex
{
get
{
if (ViewState["LayerIndex"] == null)
{
ViewState["LayerIndex"] = this.layerIndex;
}
return ViewState["LayerIndex"] == null ? this.layerIndex : (Int32)ViewState["LayerIndex"];
}
set
{
layerIndex=value;
ViewState["LayerIndex"] = layerIndex;
;
}
}
[Browsable(true), Category("自定义设置"), DefaultValue(10), Description("一次显示的数字数")]
public Int32 PageCount
{
get
{
if (ViewState["PageCount"] == null)
{
ViewState["PageCount"] = this.pageCount;
}
return ViewState["PageCount"] == null ? this.pageCount : (Int32)ViewState["PageCount"];
}
set
{
pageCount=value;
ViewState["PageCount"] = pageCount;
}
}
[Browsable(false),DefaultValue(10),Description("当前页显示的数字数")]
public Int32 NumberCount
{
get
{
if (ViewState["NumberCount"] == null)
{
ViewState["NumberCount"] = this.numberCount;
}
return ViewState["NumberCount"] == null ? this.numberCount : (Int32)ViewState["NumberCount"];
}
set
{
numberCount = value;
ViewState["NumberCount"] = numberCount;
}
}
[Browsable(true), DefaultValue(""), Description("翻页页面")]
public string Url
{
get
{
String s = (String)ViewState["Url"];
return ((s == null) ? String.Empty : s);
}
set
{
url = value;
ViewState["Url"] = url;
}
}
[Browsable(false),DefaultValue(false)]
public string PreVisible
{
get
{
String s = (String)ViewState["PreVisible"];
return ((s == null) ? "visible" : s);
}
set
{
preVisible = value;
ViewState["PreVisible"] = preVisible;
}
}
[Browsable(false), DefaultValue(true)]
public string NextVisible
{
get
{
String s = (String)ViewState["NextVisible"];
return ((s == null) ? "visible" : s);
}
set
{
nextVisible = value;
ViewState["NextVisible"] = nextVisible;
}
}
[Browsable(false), DefaultValue(false)]
public string PreNumVisible
{
get
{
String s = (String)ViewState["PreNumVisible"];
return ((s == null) ? "visible" : s);
}
set
{
preNumVisible = value;
ViewState["PreNumVisible"] = preNumVisible;
}
}
[Browsable(false), DefaultValue(true)]
public string NextNumVisible
{
get
{
String s = (String)ViewState["NextNumVisible"];
return ((s == null) ? "visible" : s);
}
set
{
nextNumVisible = value;
ViewState["NextNumVisible"] = nextNumVisible;
}
}
[DefaultValue(0),Browsable(false)]
public Int32 RCount
{
get
{
if (ViewState["RCount"] == null)
{
ViewState["RCount"] = this.rCount;
}
return ViewState["RCount"] == null ? this.rCount : (Int32)ViewState["RCount"];
}
set
{
rCount = value;
ViewState["RCount"] =rCount;
}
}
[Browsable(true),Description("每页显示的记录条数"),DefaultValue(20)]
public Int32 PageSize
{
get
{
if (ViewState["PageSize"] == null)
{
ViewState["PageSize"] = this.pageSize;
}
return ViewState["PageSize"] == null ? this.pageSize : (Int32)ViewState["PageSize"];
}
set
{
pageSize = value;
ViewState["PageSize"] = pageSize;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
if (RCount == 0)
{
output.Write("无数据");
}
else
{
if (this.RCount == this.PageSize * this.NumberCount + 1)
{
this.NextVisible = "visible";// //显示下翻数字页按钮
this.NumberCount = 10;//要显示10个数字
output.Write(getRenderHtml());
}
else
{
this.NextVisible = "hidden";// //显示下翻数字页按钮
this.NumberCount = countPage(); //要显示的数字个数
output.Write(getRenderHtml());
}
}
}
private string getRenderHtml()
{
StringBuilder result = new StringBuilder();
if (this.LayerIndex > 1)
{
this.PreVisible = "visible";//显示上翻数字页按钮
}
else
{
this.PreVisible = "hidden";//不显示上翻数字按钮
}
string preNumberButtonHtml = "<a href='" + Url + "&pageIndex=" + preNumber() + "&layerIndex=" + LayerIndex + "' target='_self' class=" + this.NumberCss + "><<</a>"; //上页按钮
string prePageButtonHtml = "<a href='" + Url + "&pageIndex=" + PageIndex + "&layerIndex=" + prePage() + "' style='visibility:" + PreVisible + "' class=" + this.numberCss + ">...</a>";//上翻按钮
string nextPageButtonHtml = "<a href='" + Url + "&pageIndex=" +PageIndex + "&layerIndex=" + nextPage() + "' style='visibility:" + NextVisible + "' class=" + this.NumberCss + ">...</a>";//下翻按钮
string nextNumberButtonHtml = "<a href='" + Url + "&pageIndex=" + nextNumber() + "&layerIndex=" +LayerIndex + "' target='_self' class=" + this.NumberCss + ">>></a>"; //下页
StringBuilder numberHtml = new StringBuilder();
for (Int32 i = 0; i < NumberCount; i++)
{
Int32 index = (LayerIndex - 1) * PageSize + i + 1;
numberHtml.Append("<a href=" + Url + "&pageIndex=" +viewStateCount(index,"PageIndex") + "&layerIndex=" +viewStateCount(LayerIndex,"LayerIndex") + " target='_self' class=" + this.NumberCss + ">");//数字按钮
numberHtml.Append(i + 1);
numberHtml.Append("</a>");
}
result.Append(preNumberButtonHtml);
result.Append(prePageButtonHtml);
result.Append(numberHtml);
result.Append(nextPageButtonHtml);
result.Append(nextNumberButtonHtml);
return result.ToString();
}
private void statusBind()
{
if (this.LayerIndex > 1)
{
this.PreVisible = "visible";//显示上翻数字页按钮
}
else
{
this.PreVisible = "hidden";//不显示上翻数字按钮
}
if (RCount == PageSize * NumberCount + 1)
{
this.NextVisible = "visible";
}
else
{
this.NextVisible = "hidden";
}
if (PageIndex > 1)
{
this.PreNumVisible = "visible";
}
else
{
this.PreNumVisible = "hidden";
}
if(PageIndex )
}
//上页
private Int32 preNumber()
{
if (LayerIndex > 1)
{
if (PageIndex > 1)
{
PageIndex = PageIndex - 1;
}
else
{
LayerIndex = LayerIndex - 1;
}
}
return PageIndex;
return PageIndex;
}
//下页
private Int32 nextNumber()
{
if (PageIndex % PageSize == 0) //边界
{
LayerIndex = LayerIndex + 1;
}
else
{
PageIndex = PageIndex + 1;
}
return PageIndex;
}
//上页数字
private Int32 prePage()
{
if (LayerIndex > 1)
{
LayerIndex = LayerIndex - 1;
}
}
//下页数字
private Int32 nextPage()
{
LayerIndex = LayerIndex + 1;
}
//翻页后改变viewState的值
private Int32 viewStateCount(Int32 index, string viewStateKey)
{
ViewState[viewStateKey] = index;
return index;
}
private Int32 countPage()
{
Int32 result = 0;
if (RCount % PageSize == 0)
{
result = RCount / PageSize;
}
else
{
result = (RCount / PageSize) + 1;
}
return result;
}
}
}

浙公网安备 33010602011771号