分享
 
 
 

一个简单的分页控件,用来自定义分页用的

王朝other·作者佚名  2006-03-20
窄屏简体版  字體: |||超大  

在做项目的过程中,最初采用Datagrid的默任的分页方式分页,后来发现对于大的数据量速度很慢,NET进程占用系统资源也很大,后来写了个分页的存储过程,每次取数据都只取当前页的,分页是分好了,但是发现翻页就没那么方便了,于是自己写了个简单的分页控件,代码如下(编译以后直接形成dll就可以用)。

程序代码:

using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;

namespace PageInfoControl

{

/// <summary>

/// WebCustomControl1 的摘要说明。

/// </summary>

[DefaultProperty("TotalRecord"),

ToolboxData("<{0}:PageInfo runat=server></{0}:PageInfo>")]

public class PageInfo : System.Web.UI.WebControls.WebControl,IPostBackEventHandler

{

#region Construct method

/// <summary>

/// 构造函数

/// </summary>

public PageInfo():base(HtmlTextWriterTag.Div)

{

}

#endregion

#region Variables and Constants

public event EventHandler ChangePageClick;

private string _BarBackGroundColor = "#F1F1F1";

private string _BarLinkColor = "Navy";

private string _BarCurrentColor = "#EEEEEE";

private int _TotalRecord = 0;

private int _TotalPage = 0;

private int _PageSize = 0;

private int _CurrentPageIndex = 1;

private int _ItemSize = 10;

#endregion

#region Properties

[

Description("分页条背景色"),

Bindable(true),

Category("Appearance"),

DefaultValue("#F1F1F1")

]

public string BarBackGroundColor

{

get{return _BarBackGroundColor;}

set{_BarBackGroundColor = value;}

}

[

Description("分页条带链接数字颜色"),

Bindable(true),

Category("Appearance"),

DefaultValue("Navy")

]

public string BarLinkColor

{

get{return _BarLinkColor;}

set{_BarLinkColor = value;}

}

[

Description("分页条当前页数字颜色"),

Bindable(true),

Category("Appearance"),

DefaultValue("#EEEEEE")

]

public string BarCurrentColor

{

get{return _BarCurrentColor;}

set{_BarCurrentColor = value;}

}

[

Description("总记录数"),

Bindable(false),

Category("Behavior"),

DefaultValue(0)

]

public int TotalRecord

{

get{return _TotalRecord;}

set

{

foreach(char c in System.Convert.ToString(value))

{

if (!Char.IsNumber(c))

{

_TotalRecord = 0;

break;

}

}

_TotalRecord = value;

}

}

[

Description("每页显示记录数"),

Bindable(true),

Category("Behavior"),

DefaultValue(0)

]

public int PageSize

{

get{return _PageSize;}

set

{

foreach(char c in System.Convert.ToString(value))

{

if (!Char.IsNumber(c))

{

_PageSize = 0;

break;

}

}

_PageSize = value;

}

}

[

Description("总页数"),

Bindable(true),

Category("Behavior"),

DefaultValue(0)

]

public int TotalPage

{

get{return _TotalPage;}

}

[

Description("数字规格"),

Bindable(true),

Category("Behavior"),

DefaultValue(10)

]

public int ItemSize

{

get{return _ItemSize;}

set

{

foreach(char c in System.Convert.ToString(value))

{

if (!Char.IsNumber(c))

{

_ItemSize = 10;

break;

}

}

_ItemSize = value;

}

}

[

Description("当前页值"),

Bindable(true),

Category("Behavior"),

DefaultValue(1)

]

public int CurrentPageIndex

{

get{return _CurrentPageIndex;}

set{_CurrentPageIndex = value;}

}

#endregion

//定义Div的样式

protected override void AddAttributesToRender(HtmlTextWriter writer)

{

writer.AddStyleAttribute("White-space","nowrap");

writer.AddStyleAttribute("Padding-Top","2px");

writer.AddStyleAttribute("Padding-Bottom","2px");

writer.AddStyleAttribute("Width",Width.ToString());

writer.AddStyleAttribute("Height",Height.ToString());

base.AddAttributesToRender (writer);

}

protected virtual void OnPageChangeClick(EventArgs e)

{

if (ChangePageClick != null)

{

ChangePageClick(this, e);

}

}

public void RaisePostBackEvent(string eventArgument)

{

int PageIndex = int.Parse(eventArgument);

this._CurrentPageIndex = PageIndex;

OnPageChangeClick(new EventArgs());

}

/// <summary>

/// 将此控件呈现给指定的输出参数。

/// </summary>

/// <param name="output"> 要写出到的 HTML 编写器 </param>

protected override void RenderContents(HtmlTextWriter output)

{

this._TotalPage = ((this.TotalRecord / PageSize) * this.PageSize == this.TotalRecord)?(this.TotalRecord / this.PageSize):((this.TotalRecord / this.PageSize) + 1);

int BeginRecord = (this.CurrentPageIndex - 1) * this.PageSize + 1;

int EndRecord = this.CurrentPageIndex * this.PageSize;

EndRecord = (EndRecord>this.TotalRecord)?this.TotalRecord:EndRecord;

string PageInfo = "[共<font color=#CC0000>"+this.TotalPage.ToString()+"</font>页/当前第<font color=#CC0000>"+this.CurrentPageIndex.ToString()+"</font>页 共<font color=#CC0000>"+TotalRecord.ToString()+"</font>条记录,当前记录数<font color=#CC0000>"+BeginRecord.ToString()+"</font>到<font color=#CC0000>"+EndRecord.ToString()+"</font>]";

string PageListStr = "";

string PageIndexColor = "#0000C0";

int SingleNumber = this.TotalPage - (TotalPage/ItemSize) * ItemSize; //得到分页后的尾数(比如:总共58页,按10页规格显示,则尾数为8)

int IntPageForMax = (this.CurrentPageIndex - 1) / ItemSize;

int MinInt = (1 + ItemSize * IntPageForMax);

int MaxInt = ((IntPageForMax + 1) * ItemSize)>TotalPage?TotalPage:((IntPageForMax + 1) * ItemSize);

if(this.TotalRecord == 0 || this.TotalPage == 0)

{

PageListStr = "<font color="+PageIndexColor+">0</font>";

PageListStr = PageListStr + " [共<font color=#CC0000>0</font>页/当前第<font color=#CC0000>0</font>页 共<font color=#CC0000>0</font>条记录,当前记录数<font color=#CC0000>0</font>到<font color=#CC0000>0</font>]";

output.Write(PageListStr);

}

else

{

if(this.TotalPage <= this.ItemSize)

{

for(int i = 1;i <= TotalPage;i++)

{

PageIndexColor = CurrentPageIndex==i?"#CC0000":"#0000C0";

if(CurrentPageIndex == i)

PageListStr = PageListStr + " <a title='当前为第『"+i+"』页' href='#' id=\"" + this.UniqueID + "\"><font color="+PageIndexColor+">"+i.ToString()+"</font></a>";

else

PageListStr = PageListStr + " <a title='点击转到第『"+i+"』页' id=\"" + this.UniqueID + "\" href=\"javascript:" + Page.GetPostBackEventReference(this,i.ToString()) +"\"><font color="+PageIndexColor+">"+i.ToString()+"</font></a>";

}

PageListStr = PageListStr ==""?"<font color="+PageIndexColor+">0</font>":PageListStr;

PageListStr = PageListStr + " "+PageInfo;

output.Write(PageListStr);

}

else

{

for(int i = MinInt;i <= MaxInt;i++)

{

PageIndexColor = CurrentPageIndex==i?"#CC0000":"#0000C0";

if(CurrentPageIndex == i)

PageListStr = PageListStr + " <a title='当前为第『"+i+"』页' href='#' id=\"" + this.UniqueID + "\"><font color="+PageIndexColor+">"+i.ToString()+"</font></a>";

else

PageListStr = PageListStr + " <a title='点击转到第『"+i+"』页' id=\"" + this.UniqueID + "\" href=\"javascript:" + Page.GetPostBackEventReference(this,i.ToString()) +"\"><font color="+PageIndexColor+">"+i.ToString()+"</font></a>";

}

//当当前页数小于ItemSize且总的页数大于ItemSize时

if(CurrentPageIndex <= ItemSize && TotalPage > ItemSize)

{

PageListStr = PageListStr + " <a id=\"" + this.UniqueID + "\" title='点击转到第『"+System.Convert.ToString(ItemSize + 1)+"』页' href=\"javascript:" + Page.GetPostBackEventReference(this,System.Convert.ToString(ItemSize + 1)) +"\">>></a>";

}

//当当前页数大于ItemSize,且总的页数减去当前页数大于等于尾数值页数时

if(this.CurrentPageIndex > ItemSize && (TotalPage - this.CurrentPageIndex) >= SingleNumber)

{

int MultiMinPageIndex = (IntPageForMax * ItemSize);

int MultiMaxPageIndex = ((IntPageForMax+1) * ItemSize) + 1;

PageListStr = "<a id=\"" + this.UniqueID + "\" title='点击转到第『"+MultiMinPageIndex+"』页' href=\"javascript:" + Page.GetPostBackEventReference(this,MultiMinPageIndex.ToString()) +"\"><<</a>" + PageListStr.Trim() + "<a id=\"" + this.UniqueID + "\" title='点击转到第『"+MultiMaxPageIndex+"』页' href=\"javascript:" + Page.GetPostBackEventReference(this,MultiMaxPageIndex.ToString()) +"\">>></a>";

}

//当当前页数大于ItemSize,且总的页数减去当前页数大于等于尾数值页数时

if(CurrentPageIndex > 10 && (TotalPage - CurrentPageIndex) < SingleNumber)

{

int MultiMinPageIndex = (IntPageForMax * ItemSize);

PageListStr = "<a id=\"" + this.UniqueID + "\" title='点击转到第『"+MultiMinPageIndex+"』页' href=\"javascript:" + Page.GetPostBackEventReference(this,MultiMinPageIndex.ToString()) +"\"><<</a>" + PageListStr.Trim();

}

PageListStr = PageListStr ==""?"<font color="+PageIndexColor+">0</font>":PageListStr;

PageListStr = PageListStr + " "+PageInfo;

output.Write(PageListStr);

}

}

base.RenderContents(output);

}

}

}

控件中有几个相关的属性,在使用的时候,只需要指定:TotalRecord(总记录数)、PageSize(每页的数据记录数)、CurrentPageIndex(当前页面值)、ItemSize(分页条显示页面值的规格)

控件中有个ChangePageClick事件,可以利用“控件ID.CurrentPageIndex”属性来获取当前页面值。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有