为什么要自己写控件页不用网上成熟的控件呢?
理由:
1:网上成熟的控件封装性太强
2:功能太多,有些用不着
3:不太适用自己实际应用
在前两篇文章中,本人试着探索自定义控件的写法,当时写的不太好,功能也少,现在在两篇文章的基础上加以整理和改造,完成了下面的控件.
功能:
1:支持url参数分页
2:运行回发事件分页
3:可以自定义样式( 样式的名称是写死的,用户只能更改样式内容)
4:本控件图例

在页数多的时候,用户可以设置省略号前面和后面显示的数量,上图设置都是5
5:可以设置跳转到文本框的显示与否
说明:本人参考了
AspNetPager控制的源代码
主要目的是:学习自定义控件的用法,可能结合自己的实际应用来写出适合自己的控件
代码有点长,本人都写在一个文件中了,希望各位指点:
代码如下:

Code
using System;
using System.ComponentModel;
using System.Drawing;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
[assembly: WebResource("pagerControls.Resources.listPager.css", "text/css", PerformSubstitution = true)]
namespace pagerControls


{
[DefaultProperty("Text")]
[ToolboxData("<{0}:WebCustomControlPager runat=server></{0}:WebCustomControlPager>")]
[ParseChildren(true)]
public class WebCustomControlPager : CompositeControl, INamingContainer, IPostBackEventHandler, IPostBackDataHandler

{

Properties#region Properties
private int _currentPageIndex = 1;

/**//// <summary>
/// 当前页面索引
/// </summary>
[Bindable(true)]
[Localizable(true)]
[DescriptionAttribute("当前页面索引从1开始")]
[DefaultValueAttribute("当前页面索引")]
public int currentPageIndex

{
get

{

return ((ViewState["currentPageIndex"] == null) ? this._currentPageIndex : (int)ViewState["currentPageIndex"]);
}

set

{

ViewState["currentPageIndex"] = value;
}
}

/**//// <summary>
/// 是否自定义样式
/// </summary>
[Bindable(true)]
[Localizable(true)]
[DescriptionAttribute("是否自定义样式")]
[DefaultValueAttribute("0")]
public bool IsCustomStyle

{
get

{
return ((ViewState["IsCustomStyle"] == null) ? false : (bool)ViewState["IsCustomStyle"]);
}

set

{

ViewState["IsCustomStyle"] = value;
}
}
private int _iRecordCount = 1;

/**//// <summary>
/// 记录数量
/// </summary>
[Bindable(true)]
[Localizable(true)]
[DescriptionAttribute("记录数量")]
[DefaultValueAttribute("记录数量")]
public int iRecordCount

{
set

{

ViewState["iRecordCount"] = value;
this._iRecordCount = value;
}
get

{
return ((ViewState["iRecordCount"] == null) ? this._iRecordCount : (int)ViewState["iRecordCount"]);

}


}
private int _iRowsCount = 10;

/**//// <summary>
/// 每页记录数量
/// </summary>
[Bindable(true)]
[Localizable(true)]
[DescriptionAttribute("每页记录数量")]
[DefaultValueAttribute("每页记录数量")]
public int iRowsCount

{
get

{
return ((ViewState["iRowsCount"] == null) ? this._iRowsCount : (int)ViewState["iRowsCount"]);

}

set

{
this._iRowsCount = value;
ViewState["iRowsCount"] = value;
}
}
private int _iPrevCount = 5;

/**//// <summary>
/// 前部分记录数量
/// </summary>
[Bindable(true)]
[Localizable(true)]
[DescriptionAttribute("前部分记录数量")]
[DefaultValueAttribute("前部分记录数量")]
public int iPrevCount

{
get

{
return ((ViewState["iPrevCount"] == null) ? this._iPrevCount : (int)ViewState["iPrevCount"]);

}

set

{
this._iPrevCount = value;
ViewState["iPrevCount"] = value;
}
}
private int _iNextCount = 5;

/**//// <summary>
/// 后部分记录数量
/// </summary>
[Bindable(true)]
[Localizable(true)]
[DescriptionAttribute("后部分记录数量")]
[DefaultValueAttribute("后部分记录数量")]
public int iNextCount

{
get

{
return ((ViewState["iNextCount"] == null) ? this._iNextCount : (int)ViewState["iNextCount"]);

}

set

{

ViewState["iNextCount"] = value;
}
}
private static readonly object EventSubmitKey = new object();
[Bindable(true)]
[Localizable(true)]
[DescriptionAttribute("首页导航按钮文本")]
[DefaultValueAttribute("首页")]
public string goFirstText

{
get

{
return ((ViewState["goFirstText"] == null) ? "首页" : (string)ViewState["goFirstText"]);
}
set

{
ViewState["goFirstText"] = value;
}
}
//页面总数
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public int pageCount

{
get

{
if (this.iRecordCount == 0)
return 1;
return (int)Math.Ceiling((double)this.iRecordCount / (double)this.iRowsCount);
}
}
//如果小于此数字则不显示省略号
private int intDefaultCount = 10;

/**//// <summary>
/// 上一页按钮文本
/// </summary>
[Browsable(true), Themeable(true), DefaultValue("<<上一页"), DescriptionAttribute("上一页按钮文本")]
public string PrevPageText

{
get

{
return (ViewState["PrevPageText"] == null) ? "<<上一页" : (string)ViewState["PrevPageText"];
}

set
{ ViewState["PrevPageText"] = value; }
}

/**//// <summary>
/// 下一页按钮文本
/// </summary>
[Browsable(true), Themeable(true), DefaultValue("下一页>>"), DescriptionAttribute("下一页按钮文本")]
public string NextPageText

{
get

{

return (ViewState["NextPageText"] == null) ? "下一页>>" : (string)ViewState["NextPageText"];
}

set
{ ViewState["NextPageText"] = value; }
}

/**//// <summary>
/// 末页按钮文本
/// </summary>
[Browsable(true), Themeable(true), DefaultValue("末页"), DescriptionAttribute("末页按钮文本")]
public string LastPageText

{
get

{

return (ViewState["LastPageText"] == null) ? "末页" : (string)ViewState["LastPageText"];
}

set
{ ViewState["LastPageText"] = value; }
}

/**//// <summary>
/// 是否显示文本框
/// </summary>
[Browsable(true), Themeable(true), DefaultValue(false), DescriptionAttribute("是否显示文本框")]
public bool IsInput

{
get

{

return (ViewState["IsInput"] == null) ? false : (bool)ViewState["IsInput"];
}

set
{ ViewState["IsInput"] = value; }
}

/**//// <summary>
/// 是否url分页
&n