前台代码:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PagerList.ascx.cs" Inherits="PagerList" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<asp:Table width="100%" runat="server" id="tblPager" HorizontalAlign="Center" CssClass="table">
<asp:TableRow>
<asp:TableCell HorizontalAlign="Center" Font-Size="0.92em">
<FONT class="fontClass">共<asp:label id="lblRecordCount" runat="server">0</asp:label>筆</FONT>
| <asp:linkbutton id="btnFirst" runat="server" CommandArgument="fist" CssClass="fontClass">第一頁</asp:linkbutton> |
<asp:linkbutton id="btnPrev" runat="server" CommandArgument="prev" CssClass="fontClass">
上一頁</asp:linkbutton> | <FONT class="fontClass">到第
<asp:DropDownList ID="txtGoPage" runat="server" AutoPostBack="true"></asp:DropDownList> 頁</FONT> |
<asp:linkbutton id="btnNext" runat="server" CommandArgument="next" CssClass="fontClass">
下一頁</asp:linkbutton> |
<asp:linkbutton id="btnLast" runat="server" CommandArgument="last" CssClass="fontClass">
最末頁</asp:linkbutton> | <FONT class="fontClass">
第
<asp:label id="lblCurrentIndex" runat="server">1</asp:label>頁/共
<asp:label id="lblPageCount" runat="server">0</asp:label>頁
</FONT>
</asp:TableCell>
</asp:TableRow>
</asp:Table>
后台代码:
using System;
using System.Data;
using System.Drawing;
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;
using System.ComponentModel;
public partial class PagerList : System.Web.UI.UserControl
{
#region 數據綁定事件
//public delegate void DataListPageChangedEventHandler(object sender , DataGridPageChangedEventArgs e);
/// <summary>
/// 數據綁定事件
/// </summary>
public delegate void DataBindEventHandler();
#endregion
#region 初始化網頁
protected void Page_Load(object sender, EventArgs e)
{
// 在這裡放置使用者程式碼以初始化網頁
if (!Page.IsPostBack)
{
//txtGoPage.Attributes.Add("onclick", "this.select()");
txtGoPage.Style.Add("text-align", "center");
ListBind();
txtGoPage.SelectedValue = lblCurrentIndex.Text;
}
}
#endregion
#region Web Form 設計工具產生的程式碼
protected override void OnInit(EventArgs e)
{
//
// CODEGEN: 此為 ASP.NET Web Form 設計工具所需的呼叫。
//
this.PageIndexChanged += new DataGridPageChangedEventHandler(OnPageIndexChanged);
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 此為設計工具支援所必須的方法 - 請勿使用程式碼編輯器修改
/// 這個方法的內容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
this.btnFirst.Click += new EventHandler(btnFirst_Click);
this.btnLast.Click += new EventHandler(btnLast_Click);
this.btnNext.Click += new EventHandler(btnNext_Click);
this.btnPrev.Click += new EventHandler(btnPrev_Click);
//this.btnGoPage.Click+=new EventHandler(txtGoPage_TextChanged);
this.txtGoPage.SelectedIndexChanged += new EventHandler(txtGoPage_TextChanged);
}
#endregion
#region 變量定義
/// <summary>
/// 綁定數據
/// </summary>
public event DataBindEventHandler BindData;
/// <summary>
/// 換頁事件
/// </summary>
private event DataGridPageChangedEventHandler PageIndexChanged;
#endregion
#region 第一頁
private void btnFirst_Click(object sender, System.EventArgs e)
{
int intNewPage = 1;
this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
}
#endregion
#region 前一頁
private void btnPrev_Click(object sender, System.EventArgs e)
{
int intNewPage = CurrentPageIndex - 1;
this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
}
#endregion
#region 下一頁
private void btnNext_Click(object sender, System.EventArgs e)
{
int intNewPage = CurrentPageIndex + 1;
this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
}
#endregion
#region 最後一頁
private void btnLast_Click(object sender, System.EventArgs e)
{
int intNewPage = PageCount;
this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
}
#endregion
#region 改變第幾頁的textbox值
private void txtGoPage_TextChanged(object sender, System.EventArgs e)
{
try
{
int intNewPage = Convert.ToInt32(txtGoPage.SelectedValue);
this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
}
catch
{
int intNewPage = Convert.ToInt32(lblCurrentIndex.Text);
this.PageIndexChanged(this, new DataGridPageChangedEventArgs(sender, intNewPage));
}
}
#endregion
#region 設定link是否可以點選
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
if (this.CurrentPageIndex <= 1)
{
btnFirst.Enabled = false;
btnPrev.Enabled = false;
}
else
{
btnFirst.Enabled = true;
btnPrev.Enabled = true;
}
if (this.CurrentPageIndex >= this.PageCount)
{
btnNext.Enabled = false;
btnLast.Enabled = false;
}
else
{
btnNext.Enabled = true;
btnLast.Enabled = true;
}
if (this.PageCount <= 1)
{
//this.btnGoPage.Enabled=false;
txtGoPage.Enabled = false;
}
else
{
//this.btnGoPage.Enabled=true;
txtGoPage.Enabled = true;
}
base.Render(writer);
}
#endregion
#region 取得或設定當前頁
/// <summary>
/// 取得或設定當前頁
/// </summary>
public int CurrentPageIndex
{
get
{
if (ViewState["CurrentPageIndex"] == null) return 1;
int _tempI=Convert.ToInt32(ViewState["CurrentPageIndex"]);
if (_tempI < 1)
{
return 1;
}
else
{
return _tempI;
}
}
set
{
ViewState["CurrentPageIndex"] = value;
this.lblCurrentIndex.Text = CurrentPageIndex.ToString();
}
}
#endregion
/// <summary>
/// 頁大小
/// </summary>
public int PageSize
{
get
{
if (ViewState["PageSize"] == null) return 10;
return Convert.ToInt32(ViewState["PageSize"]);
}
set { ViewState["PageSize"] = value; }
}
#region 取得或設定總頁數
/// <summary>
/// 取得或設定總頁數
/// </summary>
public int PageCount
{
get
{
int pCount = 0;
if (PageSize > 0)
{
pCount = RecordCount / PageSize + (RecordCount % PageSize > 0 ? 1 : 0);
}
return pCount;
}
}
#endregion
#region 取得或設定總筆數
/// <summary>
/// 取得或設定總筆數
/// </summary>
public int RecordCount
{
get
{
if (ViewState["RecordCount"] == null) return 0;
return Convert.ToInt32(ViewState["RecordCount"]);
}
set
{
ViewState["RecordCount"] = value;
this.lblRecordCount.Text = RecordCount.ToString();
this.lblPageCount.Text = PageCount.ToString();
ListBind();
if (CurrentPageIndex != 0)
{
if (CurrentPageIndex > PageCount)
{
CurrentPageIndex = PageCount;
}
txtGoPage.SelectedValue = CurrentPageIndex.ToString();
}
}
}
#endregion
#region 改變頁碼
private void OnPageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
this.CurrentPageIndex = e.NewPageIndex;
this.BindData();
}
#endregion
#region 搜索時綁定List的值(當頁面搜索動作不重新調用本頁面時使用)
/// <summary>
/// 搜索時綁定List的值
/// </summary>
private void ListBind()
{
txtGoPage.Items.Clear();
for (int i = 1; i < this.PageCount + 1; i++)
{
txtGoPage.Items.Add(new ListItem(i.ToString(), i.ToString()));
}
}
#endregion
}