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;

    }
}



發佈了65 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章