1 前台:
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="font-size:12px;">
<tr>
<td class="STYLE4" style="padding-left:50px;">
共<asp:Label ID="lblTotalRows" runat="server"></asp:Label>条
当前第
<asp:Label ID="LabelCurrentPage" runat="server" Text="0"></asp:Label>/<asp:Label ID="LabelPageCount" runat="server" Text="0"></asp:Label>页
</td>
<td>
<table border="0" align="right" cellpadding="0" cellspacing="0">
<tr>
<td style="font-size: small;" colspan="4">
<asp:LinkButton ID="PageFirst" runat="server" OnClick="PageFirst_Click" CssClass="linkBt">
第一页</asp:LinkButton>
<asp:LinkButton ID="PagePrev" runat="server" OnClick="PagePrev_Click" CssClass="linkBt">上一页</asp:LinkButton>
<asp:LinkButton ID="PageNext" runat="server" OnClick="PageNext_Click" CssClass="linkBt">下一页</asp:LinkButton>
<asp:LinkButton ID="PageEnd" runat="server" OnClick="PageEnd_Click" CssClass="linkBt">尾 页</asp:LinkButton>
<asp:DropDownList ID="GoPage" runat="server" AutoPostBack="True" OnSelectedIndexChanged="GoPage_SelectedIndexChanged">
</asp:DropDownList>
</td>
</tr>
</table>
</td>
</tr>
</table>
2 后台:
private int mCurrentPage;
private DataSet mDataSet = new DataSet();
private int mPageCount;
private int mPageSize;
private int mRecordCount;
// Methods
public PageNavigation()
{
this.SetDefaultValue();
}
public DataSet GetPage()
{
int num;
DataSet set = new DataSet();
DataTable table = new DataTable();
if (this.mDataSet == null)
{
return null;
}
table = this.mDataSet.Tables[0].Clone();
if (this.mCurrentPage > this.mPageCount)
{
this.mCurrentPage = this.mPageCount;
}
if (this.mCurrentPage > 0)
{
num = (this.mCurrentPage - 1) * this.mPageSize;
}
else
{
num = 0;
}
for (int i = 1; i <= this.mPageSize; i++)
{
if (num >= this.mRecordCount)
{
break;
}
table.ImportRow(this.mDataSet.Tables[0].Rows[num]);
num++;
}
set.Tables.Add(table);
return set;
}
protected void GoPage_SelectedIndexChanged(object sender, EventArgs e)
{
this.mCurrentPage = this.GoPage.SelectedIndex + 1;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!base.IsPostBack)
{
this.mCurrentPage = 1;
}
else
{
this.mCurrentPage = Convert.ToInt32(this.ViewState["CurrnetPage"]);
if (this.mCurrentPage == 0)
{
this.mCurrentPage = 1;
}
}
}
protected void Page_PreRender(object sender, EventArgs e)
{
this.LabelCurrentPage.Text = this.mCurrentPage.ToString();
this.LabelPageCount.Text = this.mPageCount.ToString();
this.lblTotalRows.Text = this.mRecordCount.ToString();
this.GoPage.Items.Clear();
for (int i = 1; i <= this.mPageCount; i++)
{
ListItem item = new ListItem();
item.Text = i.ToString();
if (this.mCurrentPage == i)
{
item.Selected = true;
}
this.GoPage.Items.Add(item);
}
if (this.mCurrentPage <= 1)
{
this.PageFirst.Enabled = false;
this.PagePrev.Enabled = false;
}
else
{
this.PageFirst.Enabled = true;
this.PagePrev.Enabled = true;
}
if (this.mCurrentPage == this.mPageCount)
{
this.PageEnd.Enabled = false;
this.PageNext.Enabled = false;
}
else
{
this.PageEnd.Enabled = true;
this.PageNext.Enabled = true;
}
this.ViewState["CurrnetPage"] = this.mCurrentPage;
this.ViewState["PageCount"] = this.mPageCount;
this.ViewState["PageSize"] = this.mPageSize;
}
protected void PageEnd_Click(object sender, EventArgs e)
{
this.mCurrentPage = this.mPageCount;
}
protected void PageFirst_Click(object sender, EventArgs e)
{
this.mCurrentPage = 1;
}
protected void PageNext_Click(object sender, EventArgs e)
{
if (this.mCurrentPage < this.mPageCount)
{
this.mCurrentPage++;
}
}
protected void PagePrev_Click(object sender, EventArgs e)
{
if (this.mCurrentPage > 1)
{
this.mCurrentPage--;
}
}
private void SetDefaultValue()
{
this.mPageSize = 0x10;
}
Properties
//protected HttpApplication ApplicationInstance
//{
// get
// {
// return this.Context.ApplicationInstance;
// }
//}
public int CurrentPage
{
get
{
return this.mCurrentPage;
}
set
{
this.mCurrentPage = value;
}
}
public DataSet DataSource
{
get
{
return this.mDataSet;
}
set
{
this.mDataSet = value;
if (this.mDataSet == null)
{
this.mPageCount = 0;
this.mRecordCount = 0;
}
else
{
this.mRecordCount = this.mDataSet.Tables[0].Rows.Count;
this.mPageCount = Convert.ToInt32((int)(this.mRecordCount / this.mPageSize));
if (this.mDataSet.Tables[0].Rows.Count > (this.mPageCount * this.mPageSize))
{
this.mPageCount++;
}
}
}
}
public int PageCount
{
get
{
return this.mPageCount;
}
set
{
this.mPageCount = value;
}
}
public int PageSize
{
get
{
return this.mPageSize;
}
set
{
this.mPageSize = value;
}
}
public int RecordCount
{
get
{
return this.mRecordCount;
}
}
3 在其他页面上写上:
顶部引入:<%@ Register TagPrefix="pageInfo" TagName="pageNavi" Src="~/PageNavigation.ascx"%>
body 中写入: <pageInfo:pageNavi ID="PageNavInfo" runat="server" PageSize="22"/>
cs文件中写入:
protected void Page_Load(object sender, EventArgs e)
{
this.PageNavInfo.DataSource = getDataInfo();
this.PageNavInfo.DataBind();
}
getDataInfo()函数是通过底层取得需要在repeater控件中绑定的数据,返回一个数据集。
protected void Page_LoadComplete(object sender, EventArgs e)
{
Repeater1.DataSource = this.PageNavInfo.GetPage();
Repeater1.DataBind();
}