ASP.NET中的分页剖析(二)
由于控件内置的分页功能使用比较简单,在这里就不在赘述了。
首先谈一下使用ASP.NET提供的分页类PagedDataSource的用法,分页剖析(一)已经做了些介绍,这里给出具体代码帮助理解。
public partial class BookList : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//首次加载,赋初值
ViewState["Page"] = 0;
ViewState["Order"] = "";
try
{
ViewState["typeid"] = Convert.ToInt32(Request.QueryString["typeid"]);
}
catch
{
ViewState["typeid"] = -1;
}
MyDataBind();
}
}
private void MyDataBind()
{
PagedDataSource pdsBooks = new PagedDataSource();
//对PagedDataSource 对象的相关属性赋值
pdsBooks.DataSource = BookManager.GetOrderedSmallBooksByCategoryId(Convert.ToInt32(ViewState["typeid"]), (string)ViewState["Order"]);
pdsBooks.AllowPaging = true;
pdsBooks.PageSize = 4;
pdsBooks.CurrentPageIndex = Pager;
lblCurrentPage.Text = "第 " + (pdsBooks.CurrentPageIndex + 1).ToString() + " 页 共 " + pdsBooks.PageCount.ToString()+" 页";
SetEnable(pdsBooks);
//把PagedDataSource 对象赋给DataList控件,其ID为dlBooks
dlBooks.DataSource = pdsBooks;
dlBooks.DataBind();
}
/// <summary>
/// 获得封面的url
/// </summary>
/// <param name="isbn"></param>
/// <returns></returns>
public string GetUrl(string isbn)
{
return StringHandler.CoverUrl(isbn);
}
/// <summary>
/// 截断图书显示内容
/// </summary>
/// <param name="content"></param>
/// <param name="num"></param>
/// <returns></returns>
public string GetCut(string content, int num)
{
return StringHandler.CutString(content, num);
}
#region 排序
protected void btnDate_Click(object sender, EventArgs e)
{
ViewState["Order"] = "PublishDate";
Pager = 0;
btnDate.Enabled = false;
btnPrice.Enabled = true;
MyDataBind();
}
protected void btnPrice_Click(object sender, EventArgs e)
{
ViewState["Order"] = "UnitPrice";
Pager = 0;
btnPrice.Enabled = false;
btnDate.Enabled = true;
MyDataBind();
}
#endregion
#region 翻页
private void SetEnable(PagedDataSource pds)
{
btnPrev.Enabled = true;
btnNext.Enabled = true;
if (pds.IsFirstPage)
btnPrev.Enabled = false;
if (pds.IsLastPage)
btnNext.Enabled = false;
}
protected void btnNext_Click(object sender, EventArgs e)
{
Pager++;
MyDataBind();
}
protected void btnPrev_Click(object sender, EventArgs e)
{
Pager--;
MyDataBind();
}
/// <summary>
/// 当前页数
/// </summary>
private int Pager
{
get { return (int)ViewState["Page"]; }
set { ViewState["Page"] = value; }
}
#endregion
}
这种用法也比较简单,在此就不多说了。如果有疑问,可以给我留言解答。分页剖析(三)准备给大家讲下如何使用基于SQL语句进行分页。本人比较倾向于此种分页方式,首先效率高,前面已经说过原理了。【待续...】