在程序当中遇到了一个分页功能,这个看起来挺简单的,但是在这个程序中他是由自己写的。对于分页我们并不陌生,当初在学习牛腩新闻发布系统的时候,到了最后牛腩老师给我们留了一个可以算是作业——分页。分页当时他提出来的应该是使用空间来进行分页,当然在后边我们学习的ASP.Net的时候也有降到分页技术。
在这里就和大家分享一下用户自定义的分页是如何使用的。比如在ProductList页面中使用到了此控件。
一、用户自定义控件的代码:
前台:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PageNavigator.ascx.cs" Inherits="YXShopAdmin.Admin.Control.PageNavigator" %>
共<asp:Label runat="server" ID="LblRecordCount"/>条记录,共<asp:Label runat="server" ID="LblPageCount"/>页,当前第<asp:Label runat="server" ID="LblPageIndex" />页
<asp:LinkButton ID="LnkBtnFirst" runat="server" CommandName="Page" OnClick="LnkBtnFirst_Click" CssClass="list_link">首页</asp:LinkButton>
<asp:LinkButton ID="LnkBtnPrevious" runat="server" CommandName="Page" OnClick="LnkBtnPrevious_Click" CssClass="list_link">上一页</asp:LinkButton>
<asp:LinkButton ID="LnkBtnNext" runat="server" CommandName="Page" OnClick="LnkBtnNext_Click" CssClass="list_link">下一页</asp:LinkButton>
<asp:LinkButton ID="LnkBtnLast" runat="server" CommandName="Page" OnClick="LnkBtnLast_Click" CssClass="list_link">尾页</asp:LinkButton>
<asp:textbox id="txtNewPageIndex" runat="server" width="20px" CssClass="form"/>
<asp:linkbutton id="LnkBtnGoto" runat="server" causesvalidation="False" commandargument="-1" commandname="Page" text="转到此页" OnClick="LnkBtnGoto_Click" CssClass="list_link" />
后台:
public delegate void PageChangeHandler(object send, int nPageIndex);
public partial class PageNavigator : System.Web.UI.UserControl
{
public event PageChangeHandler OnPageChange;
private int _PageCount = 0;
private int _RecordCount = 0;
private int _PageIndex = 1;
protected void Page_Load(object sender, EventArgs e)
{
}
public int PageCount
{
get
{
return int.Parse(this.LblPageCount.Text);
}
set
{
_PageCount = value;
/*
if (_PageCount < 2)
{
//this.txtNewPageIndex.Enabled = false;
//this.LnkBtnGoto.Enabled = false;
}
else
{
//this.txtNewPageIndex.Enabled = true;
//this.LnkBtnGoto.Enabled = true;
}
*/
this.LblPageCount.Text = _PageCount.ToString();
}
}
public int RecordCount
{
get
{
return int.Parse(this.LblRecordCount.Text);
}
set
{
_RecordCount = value;
this.LblRecordCount.Text = _RecordCount.ToString();
}
}
public int PageIndex
{
get
{
return int.Parse(this.LblPageIndex.Text);
}
set
{
_PageIndex = value;
this.txtNewPageIndex.Text = this.LblPageIndex.Text = _PageIndex.ToString();
if (_PageIndex < 2)
{
this.LnkBtnFirst.Enabled = false;
this.LnkBtnPrevious.Enabled = false;
}
else
{
this.LnkBtnFirst.Enabled = true;
this.LnkBtnPrevious.Enabled = true;
}
if (_PageIndex >= _PageCount)
{
this.LnkBtnNext.Enabled = false;
this.LnkBtnLast.Enabled = false;
}
else
{
this.LnkBtnNext.Enabled = true;
this.LnkBtnLast.Enabled = true;
}
}
}
protected void LnkBtnFirst_Click(object sender, EventArgs e)
{
try
{
OnPageChange(sender, 1);
}
catch { }
}
protected void LnkBtnPrevious_Click(object sender, EventArgs e)
{
try
{
int n = Convert.ToInt32(this.LblPageIndex.Text);
n--;
OnPageChange(sender, n);
}
catch
{
throw;
}
}
protected void LnkBtnNext_Click(object sender, EventArgs e)
{
int n = Convert.ToInt32(this.LblPageIndex.Text);
n++;
OnPageChange(sender, n);
}
protected void LnkBtnLast_Click(object sender, EventArgs e)
{
try
{
int n = Convert.ToInt32(this.LblPageCount.Text);
OnPageChange(sender, n);
}
catch
{
throw;
}
}
protected void LnkBtnGoto_Click(object sender, EventArgs e)
{
int n;
try
{
n = Convert.ToInt32(this.txtNewPageIndex.Text);
}
catch
{
n = Convert.ToInt32(this.LblPageIndex.Text);
}
int np = Convert.ToInt32(this.LblPageCount.Text.Trim());
if (n > np)
n = np;
if (n < 1)
n = 1;
OnPageChange(sender, n);
}
}
二、前台(productList)使用:
引入控件:
<%@ Register Src="~/Saler/Admin/Control/PageNavigator.ascx" TagName="PageNavigator" TagPrefix="uc1" %>
<td><uc1:PageNavigator ID="PageNavigator1" runat="server" /></td>
后台控制:
protected void Page_Load(object sender, EventArgs e)
{
this.PageNavigator1.OnPageChange += new PageChangeHandler(PageNavigator1_PageChange);
}
//获得列表
protected void PageNavigator1_PageChange(object sender, int PageIndex)
{
StartLoad(PageIndex);
}
protected void StartLoad(int PageIndex)
{
int i = 0;
int j = 0;
//因为登陆页面上的需要MemberID,但是自己的登陆页面没有写,所以这里就处错误了
if (Session["MemberID"].ToString() == null)
{
Response.Redirect("../../Login.aspx");
return;
}
List<YXShop.Model.Product> data = BLL.GetListByColumn("*", "Pro_PutoutID=" + Session["MemberID"] + " and Pro_PutoutTypeId=1 ", PageIndex, 15, out i, out j);
this.PageNavigator1.PageCount = j;
this.PageNavigator1.PageIndex = PageIndex;
this.PageNavigator1.RecordCount = i;
Productlists.DataSource = data; //设置datalist数据源
Productlists.DataBind(); //绑定数据源
}
</pre><pre>
三、效果:
以上的功能都可以实现。
现在把这种方法分享给大家的意图:这种做法维护起来好维护,扩展性好。实现起来也不麻烦。希望对大家有所帮助。
学习ing......