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语句进行分页。本人比较倾向于此种分页方式,首先效率高,前面已经说过原理了。【待续...】

posted @ 2010-09-15 16:47  sms  阅读(203)  评论(0编辑  收藏  举报