分页控件有页面选择10 20 50显示,跳转到第几页,上页,下页功能。如图
代码为:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace CommModules.UI
{
/// <summary>
/// 分页控件,页面选择10 20 50显示,跳转到第几页,上页下页.
/// </summary>
class ctrlPagination : Label, INamingContainer
{
#region "定义包含控件名称"
/// <summary>
/// 每页显示10条记录
/// </summary>
public Button TenButton;
/// <summary>
/// 每页显示20条记录
/// </summary>
public Button TwentyButton;
/// <summary>
/// 每页显示50条记录
/// </summary>
public Button FiftyButton;
/// <summary>
/// 上一页 带连接(有上一页)
/// </summary>
public LinkButton previousButton;
/// <summary>
/// 下一页 带连接(有下一页)
/// </summary>
public LinkButton nextButton;
/// <summary>
/// 上一页 不带连接(无上一页)
/// </summary>
public Literal previousLabel;
/// <summary>
/// 下一页 不带连接(无有下一页)
/// </summary>
public Literal nextLabel;
/// <summary>
/// "每页显示"说明,在10butten前
/// </summary>
public Literal TenLabel;
/// <summary>
/// 错误提示暂时不使用
/// </summary>
public Label litError;
/// <summary>
/// 跳转到第几页的页码输入框
/// </summary>
public TextBox txtGO;
/// <summary>
/// 跳转button
/// </summary>
public Button lbtnGO;
#endregion
#region "页面重写函数"
/// <summary>
/// 重写 提供使 ASP.NET 服务器控件能够维护其子控件列表的集合容器
/// </summary>
///
public override ControlCollection Controls
{
get
{
return base.Controls;
}
}
/// <summary>
/// 创建子控件
/// </summary>
protected override void CreateChildControls()
{
Controls.Clear();
//定义显示控件
AddControls();
}
/// <summary>
/// 呈现控件到页面上
/// </summary>
/// <param name="writer"></param>
protected override void Render(HtmlTextWriter writer)
{
int totalPages = CalculateTotalPages();
AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false);
TenLabel = new Literal();
TenLabel.ID = "lblTenStart";
if (!IsEN)
{
TenLabel.Text = "每页显示 ";
}
else
{
TenLabel.Text = "Every Page: ";
}
TenLabel.RenderControl(writer);
TenButton.RenderControl(writer);
TenLabel = new Literal();
TenLabel.ID = "lblTenEnd";
TenLabel.Text = " ";
TenLabel.RenderControl(writer);
TwentyButton.RenderControl(writer);
TenLabel = new Literal();
TenLabel.ID = "nbsp2";
TenLabel.Text = " ";
TenLabel.RenderControl(writer);
FiftyButton.RenderControl(writer);
TenLabel = new Literal();
TenLabel.ID = "nbsp4";
//int intStartRecord=1;
//int intEndRecord=10;
//intStartRecord=Convert.ToInt32(PageIndex ) * PageSize + 1;
//intEndRecord=Convert.ToInt32(PageIndex ) * PageSize+PageSize;
//if (intEndRecord > TotalRecords)
//{
// intEndRecord = TotalRecords;
//}
//string strStartRow = "0";
//if (TotalRecords > 0)
//{
// strStartRow = intStartRecord.ToString();
//}
if (IsEN)
{
TenLabel.Text = " Total Records: " + TotalRecords.ToString() + " ";//, Current Records <strong>" + strStartRow + "</strong>~<strong>" + intEndRecord.ToString() + "</strong> ";
}
else
{
TenLabel.Text = "条 共 <strong>" + TotalRecords.ToString() + "</strong> 条";//,当前是第 <strong>" + strStartRow + "</strong>~<strong>" + intEndRecord.ToString() + "</strong> 条 ";
}
TenLabel.RenderControl(writer);
TenLabel = new Literal();
TenLabel.ID = "nbsp3";
TenLabel.Text = " ";
TenLabel.RenderControl(writer);
//上一页
if (HasPrevious)
{
previousButton.RenderControl(writer);
}
else
{
if (IsEN)
{
previousLabel = new Literal();
previousLabel.ID = "Previous";
previousLabel.Text = "<span>" + this.Previous + "</span>";
previousLabel.RenderControl(writer);
}
else
{
previousLabel = new Literal();
previousLabel.ID = "上 页";
previousLabel.Text = "<span>" + this.Previous + "</span>";
previousLabel.RenderControl(writer);
}
}
// 第 1/ 1 页
TenLabel = new Literal();
TenLabel.ID = "nbsp4";
string strStartPage = "0";
if (TotalRecords > 0)
{
strStartPage = Convert.ToInt32(PageIndex + 1).ToString();
}
if (IsEN)
{
TenLabel.Text = " <strong>" + strStartPage + "</strong>/ <strong>" + CalculateTotalPages().ToString() + "</strong> ";
}
else
{
TenLabel.Text = " 第 <strong>" + strStartPage + "</strong>/ <strong>" + CalculateTotalPages().ToString() + " </strong>页 ";
}
TenLabel.RenderControl(writer);
//下一页
if (HasNext)
{
nextButton.Text = this.Next;
nextButton.RenderControl(writer);
}
else
{
if (IsEN)
{
nextLabel = new Literal();
nextLabel.ID = "Next";
nextLabel.Text = "<span>" + this.Next + "</span>";
nextLabel.RenderControl(writer);
}
else
{
nextLabel = new Literal();
nextLabel.ID = "下 页";
nextLabel.Text = "<span>" + this.Next + "</span>";
nextLabel.RenderControl(writer);
}
}
//转到 页 GO
TenLabel = new Literal();
TenLabel.ID = "nbsp5";
if (IsEN)
{
TenLabel.Text = " Goto ";
}
else
{
TenLabel.Text = " 跳转";
}
TenLabel.RenderControl(writer);
if (TotalRecords > 0)
{
int intGo = PageIndex + 1;
txtGO.Text = intGo.ToString();
}
txtGO.RenderControl(writer);
TenLabel = new Literal();
TenLabel.ID = "nbsp5";
if (IsEN)
{
TenLabel.Text = "";
}
else
{
TenLabel.Text = "页";
}
TenLabel.RenderControl(writer);
litError = new Label();
litError.ForeColor = System.Drawing.Color.Red;
litError.RenderControl(writer);
lbtnGO.RenderControl(writer);
}
#endregion
/// <summary>
/// 设置分页控件中子控件的样式
/// </summary>
private void PageSizeStyle()
{
if (PageSize == 10)
{
TenButton.BackColor = System.Drawing.Color.LightSkyBlue;
FiftyButton.BackColor = System.Drawing.Color.White;
TwentyButton.BackColor = System.Drawing.Color.White;
TenButton.ForeColor = System.Drawing.Color.White;
FiftyButton.ForeColor = System.Drawing.Color.Black;
TwentyButton.ForeColor = System.Drawing.Color.Black;
}
if (PageSize == 20)
{
TwentyButton.BackColor = System.Drawing.Color.LightSkyBlue;
FiftyButton.BackColor = System.Drawing.Color.White;
TenButton.BackColor = System.Drawing.Color.White;
TwentyButton.ForeColor = System.Drawing.Color.White;
FiftyButton.ForeColor = System.Drawing.Color.Black;
TenButton.ForeColor = System.Drawing.Color.Black;
}
if (PageSize == 50)
{
FiftyButton.BackColor = System.Drawing.Color.LightSkyBlue;
TenButton.BackColor = System.Drawing.Color.White;
TwentyButton.BackColor = System.Drawing.Color.White;
FiftyButton.ForeColor = System.Drawing.Color.White;
TenButton.ForeColor = System.Drawing.Color.Black;
TwentyButton.ForeColor = System.Drawing.Color.Black;
}
}
#region "实例定义的控件"
/// <summary>
/// 实例化分页控件的子控件
/// </summary>
void AddControls()
{
TenButton = new Button();
TenButton.ID = "TenButton";
TenButton.Text = "10";
TenButton.ToolTip = "10";
TenButton.CommandArgument = "10";
TenButton.Width = 22;
TenButton.Height = 20;
TenButton.BorderColor = System.Drawing.Color.LightSkyBlue;
TenButton.BorderStyle = BorderStyle.Solid;
TenButton.BorderWidth = 1;
TenButton.Click += new System.EventHandler(RecordsChanged_Click);
Controls.Add(TenButton);
TwentyButton = new Button();
TwentyButton.ID = "TwentyButton";
TwentyButton.Text = "20";
TwentyButton.ToolTip = "20";
TwentyButton.CommandArgument = "20";
TwentyButton.Width = 22;
TwentyButton.Height = 20;
TwentyButton.BorderColor = System.Drawing.Color.LightSkyBlue;
TwentyButton.BorderStyle = BorderStyle.Solid;
TwentyButton.BorderWidth = 1;
TwentyButton.Click += new System.EventHandler(RecordsChanged_Click);
Controls.Add(TwentyButton);
FiftyButton = new Button();
FiftyButton.ID = "FiftyButton";
FiftyButton.Text = "50";
FiftyButton.ToolTip = "50";
FiftyButton.CommandArgument = "50";
FiftyButton.Width = 22;
FiftyButton.Height = 20;
FiftyButton.BorderColor = System.Drawing.Color.LightSkyBlue;
FiftyButton.BorderStyle = BorderStyle.Solid;
FiftyButton.BorderWidth = 1;
FiftyButton.Click += new System.EventHandler(RecordsChanged_Click);
Controls.Add(FiftyButton);
//设置默认样式
PageSizeStyle();
//上一页
previousButton = new LinkButton();
previousButton.ID = "previousButton";
previousButton.Text = this.Previous;
previousButton.ToolTip = this.Previous;
previousButton.CommandArgument = "Prv";
previousButton.Click += new System.EventHandler(PageIndex_Click);
Controls.Add(previousButton);
// 下一页
nextButton = new LinkButton();
nextButton.ID = "nextButton";
nextButton.Text = this.Next;
nextButton.ToolTip = this.Next;
nextButton.CommandArgument = "Next";
nextButton.Click += new System.EventHandler(PageIndex_Click);
Controls.Add(nextButton);
//跳转
txtGO = new TextBox();
txtGO.ID = "txtGO";
txtGO.Text = string.Empty;
txtGO.Width = 30;
txtGO.MaxLength = 5;
Controls.Add(txtGO);
lbtnGO = new Button();
lbtnGO.ID = "lbtnGO";
lbtnGO.Text = "GO ";
lbtnGO.Width = 38;
lbtnGO.Attributes.Add("onclick", "return CtrlPagingGoValid(this,'" + txtGO.ClientID + "'," + CalculateTotalPages().ToString() + "," + (string.IsNullOrEmpty(txtGO.Text) ? Convert.ToString(this.PageIndex + 1) : txtGO.Text) + "," + this.IsEN.ToString().ToLower() + ")");
lbtnGO.CssClass = "gobutton";
litError = new Label();
litError.ID = "litError";
//lbtnGO.BorderColor = System.Drawing.Color.LightSkyBlue;
//lbtnGO.BorderStyle = BorderStyle.Solid;
//lbtnGO.BorderWidth = 1;
//lbtnGO.BackColor = System.Drawing.Color.LightGray;
//lbtnGO.CommandArgument = txtGO.Text;
lbtnGO.Click += new System.EventHandler(PageGo_Click);
Controls.Add(lbtnGO);
}
#endregion
#region "判断上一页是否到了第一页 或者到了最后一页"
/// <summary>
/// 判断是否有上一页
/// </summary>
private bool HasPrevious
{
get
{
if (PageIndex > 0)
return true;
return false;
}
}
/// <summary>
/// 判断是否有下一页
/// </summary>
private bool HasNext
{
get
{
if (PageIndex + 1 < CalculateTotalPages())
return true;
return false;
}
}
#endregion
#region "控件暴露给外面的事件"
/// <summary>
/// 暴露控件外上一页,下一页事件
/// </summary>
public event System.EventHandler IndexChanged;
/// <summary>
/// 上一页,下一页事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void PageIndex_Click(Object sender, EventArgs e)
{
string strMark = ((LinkButton)sender).CommandArgument.ToString();
if (strMark == "Prv")
{
PageIndex = PageIndex - 1;
}
else
{
PageIndex = PageIndex + 1;
}
if (null != IndexChanged)
IndexChanged(sender, e);
}
/// <summary>
/// 暴露控件外每页显示条数事件 10 20 50 三个规格
/// </summary>
public event System.EventHandler RecordsChanged;
/// <summary>
/// 每页显示条数事件 10 20 50 三个规格
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void RecordsChanged_Click(Object sender, EventArgs e)
{
PageSize = Convert.ToInt32(((Button)sender).CommandArgument);
PageSizeStyle();
PageIndex = 0;
txtGO.Text = "";
if (null != RecordsChanged)
RecordsChanged(sender, e);
}
/// <summary>
/// 暴露控件外跳转页面事件
/// </summary>
public event System.EventHandler PageGo;
/// <summary>
/// 跳转页面事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void PageGo_Click(Object sender, EventArgs e)
{
try
{
int.Parse(txtGO.Text);
}
catch
{
return;
}
if (CalculateTotalPages() < int.Parse(txtGO.Text))
{
txtGO.Text = CalculateTotalPages().ToString();
}
litError.Text = "";
if (int.Parse(txtGO.Text) < CalculateTotalPages())
{
PageIndex = Convert.ToInt32(int.Parse(txtGO.Text) - 1);
}
else
{
PageIndex = CalculateTotalPages() - 1;
}
if (null != PageGo)
PageGo(sender, e);
}
#endregion
#region "根据每页显示数目和总记录数获取显示页数"
/// <summary>
/// 获取总共多少页数据
/// </summary>
/// <returns></returns>
public int CalculateTotalPages()
{
int totalPagesAvailable;
if (TotalRecords == 0)
return 0;
totalPagesAvailable = TotalRecords / PageSize;
if ((TotalRecords % PageSize) > 0)
totalPagesAvailable++;
return totalPagesAvailable;
}
/// <summary>
/// 向页面注册脚本数据
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)
{
//暂时不需要脚本的提示,还是页面作判断
//Page.RegisterStartupScript("PagerValidScript", s_Js);
base.OnPreRender(e);
}
#endregion
#region "属性"
/// <summary>
/// 当前页索引
/// </summary>
public int PageIndex
{
get
{
int _pageIndex = 0;
if (ViewState["PPageIndex"] == null)
{
_pageIndex = 0;
}
else
{
_pageIndex = Convert.ToInt32(ViewState["PPageIndex"]);
}
if (_pageIndex < 0)
{
return 0;
}
else
{
return _pageIndex;
}
}
set
{
ViewState["PPageIndex"] = value;
}
}
/// <summary>
/// 每页显示记录条数
/// </summary>
public int PageSize
{
get
{
if (ViewState["PageSize"] == null)
{
return 10;
}
else
{
return Convert.ToInt32(ViewState["PageSize"]);
}
}
set
{
ViewState["PageSize"] = value;
}
}
/// <summary>
/// 总记录条数
/// </summary>
public int TotalRecords
{
get
{
return Convert.ToInt32(ViewState["TotalRecords"]);
}
set
{
ViewState["TotalRecords"] = value;
}
}
/// <summary>
/// 上一页
/// </summary>
private string Previous
{
get
{
if (IsEN)
{
return "Previous";
}
else
{
return "上 页";
}
}
}
/// <summary>
/// 下一页面
/// </summary>
private string Next
{
get
{
if (IsEN)
{
return "Next";
}
else
{
return "下 页";
}
}
}
/// <summary>
/// 跳转
/// </summary>
private string GoTo
{
get
{
if (IsEN)
{
return "GO";
}
else
{
return "GO";
}
}
}
/// <summary>
/// 是否英文
/// </summary>
public bool IsEN
{
get
{
if (ViewState["IsEN"] == null)
return false;
else
return Convert.ToBoolean(ViewState["IsEN"]);
}
set
{
ViewState["IsEN"] = value;
}
}
/// <summary>
/// 是否英文
/// </summary>
public string strGoTxt
{
get
{
return txtGO.Text;
}
set
{
txtGO.Text = value;
}
}
/// <summary>
/// 当前页索引
/// </summary>
public int CurrentIndex
{
get
{
int _pageIndex = 0;
if (ViewState["PPageIndex"] == null)
{
_pageIndex = 0;
}
else
{
_pageIndex = Convert.ToInt32(ViewState["PPageIndex"]);
}
if (_pageIndex <= 0)
{
return 0;
}
else
{
if (_pageIndex >= TotalRecords / PageSize)
{
if (TotalRecords % PageSize > 0)
{
PageIndex = TotalRecords / PageSize;
return TotalRecords / PageSize;
}
else
{
PageIndex = TotalRecords / PageSize - 1;
return TotalRecords / PageSize - 1;
}
}
else
{
return _pageIndex;
}
}
}
set
{
ViewState["CurrentIndex"] = value;
}
}
/// <summary>
/// 注册到页面验证
/// </summary>
public const string s_Js = @"
<script type=""text/javascript"" language=""javascript"">
function CtrlPagingGoValid(sender, target, PageNum, curIndex, IsEn)
{
var curNum = document.getElementById(target).value.replace(/(^"s*)|("s*$)/g, """").replace(/(^" *)|(" *$)/g, """");
document.getElementById(target).value = curNum;
var numreg = new RegExp(""^""d+$"");
if (curNum.length == 0 || !numreg.test(curNum) )
{
if (IsEn)
{
alert(""Page Index Error!"");
}
else
{
alert(""页码错误!"");
}
return false;
}
return true;
}
</script>
";
#endregion
}
}
调用代码:int intStart, intEnd, intRows;//intRows返回查询数据集合的总记录数量
intRows = 0;
//设置其实记录位置
intStart = CtrlPag.PageIndex * CtrlPag.PageSize; //获取SQLRead的开始记录
intEnd = CtrlPag.PageSize; //获取记录条数量
DataTable dtb; //获取查询记录的总记录数
CtrlPag.TotalRecords = intRows;//给控件设置总记录数
GrideView.PageSize = CtrlPag.PageSize; //为GrideView设置当前页显示记录条数
//下面就不用解释了哦
GrideView.DataSource = dtb;
GrideView.DataBind();
代码为:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
namespace CommModules.UI
{
/// <summary>
/// 分页控件,页面选择10 20 50显示,跳转到第几页,上页下页.
/// </summary>
class ctrlPagination : Label, INamingContainer
{
#region "定义包含控件名称"
/// <summary>
/// 每页显示10条记录
/// </summary>
public Button TenButton;
/// <summary>
/// 每页显示20条记录
/// </summary>
public Button TwentyButton;
/// <summary>
/// 每页显示50条记录
/// </summary>
public Button FiftyButton;
/// <summary>
/// 上一页 带连接(有上一页)
/// </summary>
public LinkButton previousButton;
/// <summary>
/// 下一页 带连接(有下一页)
/// </summary>
public LinkButton nextButton;
/// <summary>
/// 上一页 不带连接(无上一页)
/// </summary>
public Literal previousLabel;
/// <summary>
/// 下一页 不带连接(无有下一页)
/// </summary>
public Literal nextLabel;
/// <summary>
/// "每页显示"说明,在10butten前
/// </summary>
public Literal TenLabel;
/// <summary>
/// 错误提示暂时不使用
/// </summary>
public Label litError;
/// <summary>
/// 跳转到第几页的页码输入框
/// </summary>
public TextBox txtGO;
/// <summary>
/// 跳转button
/// </summary>
public Button lbtnGO;
#endregion
#region "页面重写函数"
/// <summary>
/// 重写 提供使 ASP.NET 服务器控件能够维护其子控件列表的集合容器
/// </summary>
///
public override ControlCollection Controls
{
get
{
return base.Controls;
}
}
/// <summary>
/// 创建子控件
/// </summary>
protected override void CreateChildControls()
{
Controls.Clear();
//定义显示控件
AddControls();
}
/// <summary>
/// 呈现控件到页面上
/// </summary>
/// <param name="writer"></param>
protected override void Render(HtmlTextWriter writer)
{
int totalPages = CalculateTotalPages();
AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false);
TenLabel = new Literal();
TenLabel.ID = "lblTenStart";
if (!IsEN)
{
TenLabel.Text = "每页显示 ";
}
else
{
TenLabel.Text = "Every Page: ";
}
TenLabel.RenderControl(writer);
TenButton.RenderControl(writer);
TenLabel = new Literal();
TenLabel.ID = "lblTenEnd";
TenLabel.Text = " ";
TenLabel.RenderControl(writer);
TwentyButton.RenderControl(writer);
TenLabel = new Literal();
TenLabel.ID = "nbsp2";
TenLabel.Text = " ";
TenLabel.RenderControl(writer);
FiftyButton.RenderControl(writer);
TenLabel = new Literal();
TenLabel.ID = "nbsp4";
//int intStartRecord=1;
//int intEndRecord=10;
//intStartRecord=Convert.ToInt32(PageIndex ) * PageSize + 1;
//intEndRecord=Convert.ToInt32(PageIndex ) * PageSize+PageSize;
//if (intEndRecord > TotalRecords)
//{
// intEndRecord = TotalRecords;
//}
//string strStartRow = "0";
//if (TotalRecords > 0)
//{
// strStartRow = intStartRecord.ToString();
//}
if (IsEN)
{
TenLabel.Text = " Total Records: " + TotalRecords.ToString() + " ";//, Current Records <strong>" + strStartRow + "</strong>~<strong>" + intEndRecord.ToString() + "</strong> ";
}
else
{
TenLabel.Text = "条 共 <strong>" + TotalRecords.ToString() + "</strong> 条";//,当前是第 <strong>" + strStartRow + "</strong>~<strong>" + intEndRecord.ToString() + "</strong> 条 ";
}
TenLabel.RenderControl(writer);
TenLabel = new Literal();
TenLabel.ID = "nbsp3";
TenLabel.Text = " ";
TenLabel.RenderControl(writer);
//上一页
if (HasPrevious)
{
previousButton.RenderControl(writer);
}
else
{
if (IsEN)
{
previousLabel = new Literal();
previousLabel.ID = "Previous";
previousLabel.Text = "<span>" + this.Previous + "</span>";
previousLabel.RenderControl(writer);
}
else
{
previousLabel = new Literal();
previousLabel.ID = "上 页";
previousLabel.Text = "<span>" + this.Previous + "</span>";
previousLabel.RenderControl(writer);
}
}
// 第 1/ 1 页
TenLabel = new Literal();
TenLabel.ID = "nbsp4";
string strStartPage = "0";
if (TotalRecords > 0)
{
strStartPage = Convert.ToInt32(PageIndex + 1).ToString();
}
if (IsEN)
{
TenLabel.Text = " <strong>" + strStartPage + "</strong>/ <strong>" + CalculateTotalPages().ToString() + "</strong> ";
}
else
{
TenLabel.Text = " 第 <strong>" + strStartPage + "</strong>/ <strong>" + CalculateTotalPages().ToString() + " </strong>页 ";
}
TenLabel.RenderControl(writer);
//下一页
if (HasNext)
{
nextButton.Text = this.Next;
nextButton.RenderControl(writer);
}
else
{
if (IsEN)
{
nextLabel = new Literal();
nextLabel.ID = "Next";
nextLabel.Text = "<span>" + this.Next + "</span>";
nextLabel.RenderControl(writer);
}
else
{
nextLabel = new Literal();
nextLabel.ID = "下 页";
nextLabel.Text = "<span>" + this.Next + "</span>";
nextLabel.RenderControl(writer);
}
}
//转到 页 GO
TenLabel = new Literal();
TenLabel.ID = "nbsp5";
if (IsEN)
{
TenLabel.Text = " Goto ";
}
else
{
TenLabel.Text = " 跳转";
}
TenLabel.RenderControl(writer);
if (TotalRecords > 0)
{
int intGo = PageIndex + 1;
txtGO.Text = intGo.ToString();
}
txtGO.RenderControl(writer);
TenLabel = new Literal();
TenLabel.ID = "nbsp5";
if (IsEN)
{
TenLabel.Text = "";
}
else
{
TenLabel.Text = "页";
}
TenLabel.RenderControl(writer);
litError = new Label();
litError.ForeColor = System.Drawing.Color.Red;
litError.RenderControl(writer);
lbtnGO.RenderControl(writer);
}
#endregion
/// <summary>
/// 设置分页控件中子控件的样式
/// </summary>
private void PageSizeStyle()
{
if (PageSize == 10)
{
TenButton.BackColor = System.Drawing.Color.LightSkyBlue;
FiftyButton.BackColor = System.Drawing.Color.White;
TwentyButton.BackColor = System.Drawing.Color.White;
TenButton.ForeColor = System.Drawing.Color.White;
FiftyButton.ForeColor = System.Drawing.Color.Black;
TwentyButton.ForeColor = System.Drawing.Color.Black;
}
if (PageSize == 20)
{
TwentyButton.BackColor = System.Drawing.Color.LightSkyBlue;
FiftyButton.BackColor = System.Drawing.Color.White;
TenButton.BackColor = System.Drawing.Color.White;
TwentyButton.ForeColor = System.Drawing.Color.White;
FiftyButton.ForeColor = System.Drawing.Color.Black;
TenButton.ForeColor = System.Drawing.Color.Black;
}
if (PageSize == 50)
{
FiftyButton.BackColor = System.Drawing.Color.LightSkyBlue;
TenButton.BackColor = System.Drawing.Color.White;
TwentyButton.BackColor = System.Drawing.Color.White;
FiftyButton.ForeColor = System.Drawing.Color.White;
TenButton.ForeColor = System.Drawing.Color.Black;
TwentyButton.ForeColor = System.Drawing.Color.Black;
}
}
#region "实例定义的控件"
/// <summary>
/// 实例化分页控件的子控件
/// </summary>
void AddControls()
{
TenButton = new Button();
TenButton.ID = "TenButton";
TenButton.Text = "10";
TenButton.ToolTip = "10";
TenButton.CommandArgument = "10";
TenButton.Width = 22;
TenButton.Height = 20;
TenButton.BorderColor = System.Drawing.Color.LightSkyBlue;
TenButton.BorderStyle = BorderStyle.Solid;
TenButton.BorderWidth = 1;
TenButton.Click += new System.EventHandler(RecordsChanged_Click);
Controls.Add(TenButton);
TwentyButton = new Button();
TwentyButton.ID = "TwentyButton";
TwentyButton.Text = "20";
TwentyButton.ToolTip = "20";
TwentyButton.CommandArgument = "20";
TwentyButton.Width = 22;
TwentyButton.Height = 20;
TwentyButton.BorderColor = System.Drawing.Color.LightSkyBlue;
TwentyButton.BorderStyle = BorderStyle.Solid;
TwentyButton.BorderWidth = 1;
TwentyButton.Click += new System.EventHandler(RecordsChanged_Click);
Controls.Add(TwentyButton);
FiftyButton = new Button();
FiftyButton.ID = "FiftyButton";
FiftyButton.Text = "50";
FiftyButton.ToolTip = "50";
FiftyButton.CommandArgument = "50";
FiftyButton.Width = 22;
FiftyButton.Height = 20;
FiftyButton.BorderColor = System.Drawing.Color.LightSkyBlue;
FiftyButton.BorderStyle = BorderStyle.Solid;
FiftyButton.BorderWidth = 1;
FiftyButton.Click += new System.EventHandler(RecordsChanged_Click);
Controls.Add(FiftyButton);
//设置默认样式
PageSizeStyle();
//上一页
previousButton = new LinkButton();
previousButton.ID = "previousButton";
previousButton.Text = this.Previous;
previousButton.ToolTip = this.Previous;
previousButton.CommandArgument = "Prv";
previousButton.Click += new System.EventHandler(PageIndex_Click);
Controls.Add(previousButton);
// 下一页
nextButton = new LinkButton();
nextButton.ID = "nextButton";
nextButton.Text = this.Next;
nextButton.ToolTip = this.Next;
nextButton.CommandArgument = "Next";
nextButton.Click += new System.EventHandler(PageIndex_Click);
Controls.Add(nextButton);
//跳转
txtGO = new TextBox();
txtGO.ID = "txtGO";
txtGO.Text = string.Empty;
txtGO.Width = 30;
txtGO.MaxLength = 5;
Controls.Add(txtGO);
lbtnGO = new Button();
lbtnGO.ID = "lbtnGO";
lbtnGO.Text = "GO ";
lbtnGO.Width = 38;
lbtnGO.Attributes.Add("onclick", "return CtrlPagingGoValid(this,'" + txtGO.ClientID + "'," + CalculateTotalPages().ToString() + "," + (string.IsNullOrEmpty(txtGO.Text) ? Convert.ToString(this.PageIndex + 1) : txtGO.Text) + "," + this.IsEN.ToString().ToLower() + ")");
lbtnGO.CssClass = "gobutton";
litError = new Label();
litError.ID = "litError";
//lbtnGO.BorderColor = System.Drawing.Color.LightSkyBlue;
//lbtnGO.BorderStyle = BorderStyle.Solid;
//lbtnGO.BorderWidth = 1;
//lbtnGO.BackColor = System.Drawing.Color.LightGray;
//lbtnGO.CommandArgument = txtGO.Text;
lbtnGO.Click += new System.EventHandler(PageGo_Click);
Controls.Add(lbtnGO);
}
#endregion
#region "判断上一页是否到了第一页 或者到了最后一页"
/// <summary>
/// 判断是否有上一页
/// </summary>
private bool HasPrevious
{
get
{
if (PageIndex > 0)
return true;
return false;
}
}
/// <summary>
/// 判断是否有下一页
/// </summary>
private bool HasNext
{
get
{
if (PageIndex + 1 < CalculateTotalPages())
return true;
return false;
}
}
#endregion
#region "控件暴露给外面的事件"
/// <summary>
/// 暴露控件外上一页,下一页事件
/// </summary>
public event System.EventHandler IndexChanged;
/// <summary>
/// 上一页,下一页事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void PageIndex_Click(Object sender, EventArgs e)
{
string strMark = ((LinkButton)sender).CommandArgument.ToString();
if (strMark == "Prv")
{
PageIndex = PageIndex - 1;
}
else
{
PageIndex = PageIndex + 1;
}
if (null != IndexChanged)
IndexChanged(sender, e);
}
/// <summary>
/// 暴露控件外每页显示条数事件 10 20 50 三个规格
/// </summary>
public event System.EventHandler RecordsChanged;
/// <summary>
/// 每页显示条数事件 10 20 50 三个规格
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void RecordsChanged_Click(Object sender, EventArgs e)
{
PageSize = Convert.ToInt32(((Button)sender).CommandArgument);
PageSizeStyle();
PageIndex = 0;
txtGO.Text = "";
if (null != RecordsChanged)
RecordsChanged(sender, e);
}
/// <summary>
/// 暴露控件外跳转页面事件
/// </summary>
public event System.EventHandler PageGo;
/// <summary>
/// 跳转页面事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void PageGo_Click(Object sender, EventArgs e)
{
try
{
int.Parse(txtGO.Text);
}
catch
{
return;
}
if (CalculateTotalPages() < int.Parse(txtGO.Text))
{
txtGO.Text = CalculateTotalPages().ToString();
}
litError.Text = "";
if (int.Parse(txtGO.Text) < CalculateTotalPages())
{
PageIndex = Convert.ToInt32(int.Parse(txtGO.Text) - 1);
}
else
{
PageIndex = CalculateTotalPages() - 1;
}
if (null != PageGo)
PageGo(sender, e);
}
#endregion
#region "根据每页显示数目和总记录数获取显示页数"
/// <summary>
/// 获取总共多少页数据
/// </summary>
/// <returns></returns>
public int CalculateTotalPages()
{
int totalPagesAvailable;
if (TotalRecords == 0)
return 0;
totalPagesAvailable = TotalRecords / PageSize;
if ((TotalRecords % PageSize) > 0)
totalPagesAvailable++;
return totalPagesAvailable;
}
/// <summary>
/// 向页面注册脚本数据
/// </summary>
/// <param name="e"></param>
protected override void OnPreRender(EventArgs e)
{
//暂时不需要脚本的提示,还是页面作判断
//Page.RegisterStartupScript("PagerValidScript", s_Js);
base.OnPreRender(e);
}
#endregion
#region "属性"
/// <summary>
/// 当前页索引
/// </summary>
public int PageIndex
{
get
{
int _pageIndex = 0;
if (ViewState["PPageIndex"] == null)
{
_pageIndex = 0;
}
else
{
_pageIndex = Convert.ToInt32(ViewState["PPageIndex"]);
}
if (_pageIndex < 0)
{
return 0;
}
else
{
return _pageIndex;
}
}
set
{
ViewState["PPageIndex"] = value;
}
}
/// <summary>
/// 每页显示记录条数
/// </summary>
public int PageSize
{
get
{
if (ViewState["PageSize"] == null)
{
return 10;
}
else
{
return Convert.ToInt32(ViewState["PageSize"]);
}
}
set
{
ViewState["PageSize"] = value;
}
}
/// <summary>
/// 总记录条数
/// </summary>
public int TotalRecords
{
get
{
return Convert.ToInt32(ViewState["TotalRecords"]);
}
set
{
ViewState["TotalRecords"] = value;
}
}
/// <summary>
/// 上一页
/// </summary>
private string Previous
{
get
{
if (IsEN)
{
return "Previous";
}
else
{
return "上 页";
}
}
}
/// <summary>
/// 下一页面
/// </summary>
private string Next
{
get
{
if (IsEN)
{
return "Next";
}
else
{
return "下 页";
}
}
}
/// <summary>
/// 跳转
/// </summary>
private string GoTo
{
get
{
if (IsEN)
{
return "GO";
}
else
{
return "GO";
}
}
}
/// <summary>
/// 是否英文
/// </summary>
public bool IsEN
{
get
{
if (ViewState["IsEN"] == null)
return false;
else
return Convert.ToBoolean(ViewState["IsEN"]);
}
set
{
ViewState["IsEN"] = value;
}
}
/// <summary>
/// 是否英文
/// </summary>
public string strGoTxt
{
get
{
return txtGO.Text;
}
set
{
txtGO.Text = value;
}
}
/// <summary>
/// 当前页索引
/// </summary>
public int CurrentIndex
{
get
{
int _pageIndex = 0;
if (ViewState["PPageIndex"] == null)
{
_pageIndex = 0;
}
else
{
_pageIndex = Convert.ToInt32(ViewState["PPageIndex"]);
}
if (_pageIndex <= 0)
{
return 0;
}
else
{
if (_pageIndex >= TotalRecords / PageSize)
{
if (TotalRecords % PageSize > 0)
{
PageIndex = TotalRecords / PageSize;
return TotalRecords / PageSize;
}
else
{
PageIndex = TotalRecords / PageSize - 1;
return TotalRecords / PageSize - 1;
}
}
else
{
return _pageIndex;
}
}
}
set
{
ViewState["CurrentIndex"] = value;
}
}
/// <summary>
/// 注册到页面验证
/// </summary>
public const string s_Js = @"
<script type=""text/javascript"" language=""javascript"">
function CtrlPagingGoValid(sender, target, PageNum, curIndex, IsEn)
{
var curNum = document.getElementById(target).value.replace(/(^"s*)|("s*$)/g, """").replace(/(^" *)|(" *$)/g, """");
document.getElementById(target).value = curNum;
var numreg = new RegExp(""^""d+$"");
if (curNum.length == 0 || !numreg.test(curNum) )
{
if (IsEn)
{
alert(""Page Index Error!"");
}
else
{
alert(""页码错误!"");
}
return false;
}
return true;
}
</script>
";
#endregion
}
}
调用代码:int intStart, intEnd, intRows;//intRows返回查询数据集合的总记录数量
intRows = 0;
//设置其实记录位置
intStart = CtrlPag.PageIndex * CtrlPag.PageSize; //获取SQLRead的开始记录
intEnd = CtrlPag.PageSize; //获取记录条数量
DataTable dtb; //获取查询记录的总记录数
CtrlPag.TotalRecords = intRows;//给控件设置总记录数
GrideView.PageSize = CtrlPag.PageSize; //为GrideView设置当前页显示记录条数
//下面就不用解释了哦
GrideView.DataSource = dtb;
GrideView.DataBind();