天天看點

DataList分頁(仿GOOGLE)

DataList是一個很好的自定義模版控件,而唯一不足的是它卻沒有分頁功能,正在做的一個項目剛好又要用到DataList分頁,平時裡做的分頁功能都不是很好,使用者體驗較差,捉摸着做一個體驗效果較好的分頁功能,那麼類似GOOGLE的分頁效果無疑是很好的了,想做個跟它一樣但功能比它全的,在網上找了半天的資料所實作的效果都不是很好,唉!研究一下别人的代碼自個做了個分頁類,感覺還挺實用。

效果:

共1頁       首頁 上一頁  1 2 3 4 5 6 7 8 9 10 ....下一頁 末頁

調用頁面(Aspx):

在要顯示分頁導航的地方加個DIV标簽:<div id="PageInfo" runat="server" class="Blue_Font12"></div>

調用頁的代碼(CS):

DataSet ds = db.getDs(sql);

this.PageInfo.InnerHtml = PageNums.GetPageNum(ds,DataList1,12); //傳入DataSet,DataList名稱和分頁大小

PageNums實作分頁類(PageNums.cs):

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.HtmlControls;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

/// <summary>

///PageNums 的摘要說明

/// </summary>

public class PageNums

{

    /// </summary>

    /// <param name="ds">DataSet執行個體</param>

    /// <param name="datalistname">DataList名稱</param>

    /// <param name="pagesize">分頁大小</param>

    public static string GetPageNum(DataSet ds, DataList datalistname, int pagesize)

    {

        PagedDataSource objPds = new PagedDataSource();

        objPds.DataSource = ds.Tables[0].DefaultView;

        objPds.AllowPaging = true;

        int total = ds.Tables[0].Rows.Count;

        objPds.PageSize = pagesize;

        int page;

        if (HttpContext.Current.Request.QueryString["page"] != null)

            page = Convert.ToInt32(HttpContext.Current.Request.QueryString["page"]);

        else

            page = 1;

        objPds.CurrentPageIndex = page - 1;

        datalistname.DataSource = objPds;

        datalistname.DataBind();

        int allpage = 0;

        int next = 0;

        int pre = 0;

        int startcount = 0;

        int endcount = 0;

        string pagestr = "";

        if (page < 1) { page = 1; }

        //計算總頁數

        if (pagesize != 0)

        {

            allpage = (total / pagesize);

            allpage = ((total % pagesize) != 0 ? allpage + 1 : allpage);

            allpage = (allpage == 0 ? 1 : allpage);

        }

        next = page + 1;

        pre = page - 1;

        startcount = (page + 5) > allpage ? allpage - 9 : page - 4;//中間頁起始序号

        //中間頁終止序号

        endcount = page < 5 ? 10 : page + 5;

        if (startcount < 1) { startcount = 1; } //為了避免輸出的時候産生負數,設定如果小于1就從序号1開始

        if (allpage < endcount) { endcount = allpage; } //頁碼+5的可能性就會産生最終輸出序号大于總頁碼,那麼就要将其控制在頁碼數之内

        pagestr = "共" + allpage + "頁&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

        pagestr += page > 1 ? "<a href=/"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=1/">首頁</a>&nbsp;&nbsp;<a href=/"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + pre + "/">上一頁</a>" : "首頁 上一頁";

       //中間頁處理,這個增加時間複雜度,減小空間複雜度

        for (int i = startcount; i <= endcount; i++)

        {

            pagestr += page == i ? "&nbsp;&nbsp;<font color=/"#ff0000/">" + i + "</font>" : "&nbsp;&nbsp;<a href=/"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + i + "/">" + i + "</a>";

        }

        pagestr += page != allpage ? "&nbsp;&nbsp;<a href=/"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + next + "/">下一頁</a>&nbsp;&nbsp;<a href=/"" + HttpContext.Current.Request.CurrentExecutionFilePath + "?page=" + allpage + "/">末頁</a>" : " 下一頁 末頁";

        return pagestr;

    }

}

本文出自: http://hi.baidu.com/honfei

繼續閱讀