ASP.NET自訂分頁程式碼

來源:互聯網
上載者:User

一、自訂分頁類 PagerHelper

 代碼如下 複製代碼

 public class PagerHelper
    {
private int _pageSize = 10;
/// <summary>
/// 每頁預設10條數
/// </summary>
public int pageSize
{
    get
    {
if (_pageSize < 1)
    _pageSize = 1;
return _pageSize;
    }
    set { _pageSize = value; }
}

private int _extendPage = 5;
/// <summary>
/// 每頁顯示分頁數
/// </summary>
public int extendPage
{
    get
    {
if (_extendPage < 3)
    _extendPage = 3;
return _extendPage;
    }
    set
    {
_extendPage = value;
    }
}

private int _currentPage = 1;
/// <summary>
/// 當前頁碼
/// </summary>
public int currentPage
{
    get
    {
if (_currentPage < 1)
    _currentPage = 1;
if (_currentPage > totalPages)
    _currentPage = totalPages;
return _currentPage;
    }
    set
    {
_currentPage = value;
    }
}

private int _totalRows = 0;
/// <summary>
/// 總資料數
/// </summary>
public int totalRows
{
    get { return _totalRows; }
    set { _totalRows = value; }
}

/// <summary>
/// 分頁時是否做urlRewriter處理
/// </summary>
private bool isRewrite
{
    get { return pageUrl.IndexOf("{0}") > 0; }
}

private string _pageUrl = "";
/// <summary>
/// 分頁url
/// </summary>
public string pageUrl
{
    get { return _pageUrl; }
    set { _pageUrl = value; }
}

/// <summary>
/// 總頁數
/// </summary>
private int totalPages
{
    get
    {
if ((totalRows % pageSize) == 0)
{
    return (totalRows / pageSize);
}
return (totalRows / pageSize + 1);
    }
}

/// <summary>
/// 上一頁
/// </summary>
private int prevPage
{
    get
    {
int temp = currentPage - 1;
if (temp < 1)
{
    return 1;
}
return temp;
    }
}

/// <summary>
/// 下一頁
/// </summary>
private int nextPage
{
    get
    {
int temp = currentPage + 1;
if (temp > totalPages)
{
    return temp;
}
return temp;
    }
}

/// <summary>
/// 獲得開始顯示的頁碼
/// </summary>
private int startPage
{
    get
    {
int _startPage = 0;
if (totalPages > extendPage)
{
    if (currentPage - (extendPage / 2) > 0)
    {
if (currentPage + (extendPage / 2) < totalPages)
{
    _startPage = currentPage - (extendPage / 2);
}
else
{
    _startPage = endPage - extendPage + 1;
}
    }
    else
    {
_startPage = 1;
    }
}
else
{
    _startPage = 1;
}
return _startPage;
    }
}

/// <summary>
/// 擷取最後一個顯示的頁面
/// </summary>
private int endPage
{
    get
    {
int _endPage = 0;
if (totalPages > extendPage)
{
    if (currentPage - (extendPage / 2) > 0)
    {
if (currentPage + (extendPage / 2) < totalPages)
{
    _endPage = startPage + extendPage - 1;
}
else
{
    _endPage = totalPages;
}
    }
    else
    {
_endPage = extendPage;
    }
}
else
{
    _endPage = totalPages;
}
return _endPage;
    }
}

private string _HtmlDisablePrevPage = "";
/// <summary>
/// 第一頁時上一頁的樣式
/// </summary>
public string HtmlDisablePrevPage
{
    get { return _HtmlDisablePrevPage; }
    set { _HtmlDisablePrevPage = value; }
}

private string _HtmlDisableNextPage = "";
/// <summary>
/// 最後頁時下一頁的樣式
/// </summary>
public string HtmlDisableNextPage
{
    get { return _HtmlDisableNextPage; }
    set { _HtmlDisableNextPage = value; }
}

private string _HtmlCurOfTotalPage = "";
/// <summary>
/// 當前第幾頁 例如:第 2/5 頁
/// </summary>
public string HtmlCurOfTotalPage
{
    get { return _HtmlCurOfTotalPage; }
    set { _HtmlCurOfTotalPage = value; }
}

private bool _bHtmlCurOfTotalPage = true;
/// <summary>
/// 當前第幾頁 例如:第 2/5 頁
/// </summary>
public bool bHtmlCurOfTotalPage
{
    get { return _bHtmlCurOfTotalPage; }
    set { _bHtmlCurOfTotalPage = value; }
}

private string _HtmlTotalCount = "";
/// <summary>
/// 總記錄數的顯示形式
/// </summary>
public string HtmlTotalCount
{
    get { return _HtmlTotalCount; }
    set { _HtmlTotalCount = value; }
}

private string _HTMLMoveToPage = "";
/// <summary>
/// 跳轉到的格式HTML
/// </summary>
public string HTMLMoveToPage
{
    get
    {
string strReturnHtml = string.Format(_HTMLMoveToPage, currentPage);
if (isRewrite)
{
    strReturnHtml += "<script>function GoToPage(pg){if(isNaN(pg)||pg>" + totalPages + "||pg<1){window.alert('請正確輸入頁碼,只能為正整數!且不能大於" + totalPages + "');return false;}else{window.location.href='"+pageUrl+"'.replace('{0}',pg);return true;}}</script>";
}
else
{
    if (pageUrl.IndexOf("?") > 0)
strReturnHtml += "<script>function GoToPage(pg){if(isNaN(pg)||pg>" + totalPages + "||pg<1){window.alert('請正確輸入頁碼,只能為正整數!且不能大於" + totalPages + "');return false;}else{window.location.href='" + pageUrl + "&pn='+pg+'';return true;}}</script>";
    else
strReturnHtml += "<script>function GoToPage(pg){if(isNaN(pg)||pg>" + totalPages + "||pg<1){window.alert('請正確輸入頁碼,只能為正整數!且不能大於" + totalPages + "');return false;}else{window.location.href='" + pageUrl + "?pn='+pg+'';return true;}}</script>";
}
return strReturnHtml;
    }
    set
    {
_HTMLMoveToPage = value;
    }
}

private string _HtmlPrevPage = @"";
/// <summary>
/// 上一頁代碼
/// </summary>
public string HtmlPrevPage
{
    get
    {
if (isRewrite)
{
    if (currentPage < 2 )
    {
 return _HtmlDisablePrevPage;
    }
    else
    {
return string.Format(_HtmlPrevPage, string.Format(pageUrl, 1), string.Format(pageUrl, prevPage));
    }
}
else
{
    if (currentPage < 2)
    {
return _HtmlDisablePrevPage;
    }
    else
    {
if (pageUrl.IndexOf("?") > 0)
    return string.Format(_HtmlPrevPage, pageUrl + "&pn=1", pageUrl + string.Format("&pn={0}", prevPage));
else
    return string.Format(_HtmlPrevPage, pageUrl + "?pn=1", pageUrl + string.Format("?pn={0}", prevPage));

    }
}
    }
    set
    {
_HtmlPrevPage = value;
    }
}

private string _HtmlNextPage = @"";
/// <summary>
/// 下一頁html代碼
/// </summary>
public string HtmlNextPage
{
    get
    {
if (isRewrite)
{
    if (currentPage < totalPages)
    {
return string.Format(_HtmlNextPage, string.Format(pageUrl, nextPage), string.Format(pageUrl, totalPages));
    }
    else
    {
return _HtmlDisableNextPage;
    }
}
else
{
    if (currentPage < totalPages)
    {
if (pageUrl.IndexOf("?") > 0)
    return string.Format(_HtmlNextPage, pageUrl + string.Format("&pn={0}", nextPage), pageUrl + string.Format("&pn={0}", totalPages));
else
    return string.Format(_HtmlNextPage, pageUrl + string.Format("?pn={0}", nextPage), pageUrl + string.Format("?pn={0}", totalPages));

    }
    else
    {
return _HtmlDisableNextPage;
    }
}
    }
    set
    {
_HtmlNextPage = value;
    }
}

private string _HtmlCurrentPage = @"<span style=""color:Red"">{0}</span>&nbsp;";
/// <summary>
/// 當前頁html代碼
/// </summary>
public string HtmlCurrentPage
{
    get { return _HtmlCurrentPage; }
    set { _HtmlCurrentPage = value; }
}

private string _HtmlPageNum = "";
/// <summary>
/// 頁碼數的html
/// </summary>
public string HtmlPageNum
{
    get { return _HtmlPageNum; }
    set { _HtmlPageNum = value; }
}

private string _HtmlPageTag = @"<div class=""page""><ul>{0}</ul></div>";
/// <summary>
/// 用於設定分頁html外面的div, span等標
/// </summary>
public string HtmlPageTag
{
    get { return _HtmlPageTag; }
    set { _HtmlPageTag = value; }
}

/// <summary>
/// 擷取最終html
/// </summary>
/// <returns></returns>
public string GetHtmlPage()
{
   return GetHtmlPage(false);
}

/// <summary>
/// 擷取最終html
/// </summary>
/// <returns></returns>
public string GetHtmlPage(bool bGoToPage)
{
    if (totalPages <= 0)
return "";
    StringBuilder s = new StringBuilder("");

    s.Append(HtmlPrevPage);
    for (int i = startPage; i <= endPage; i++)
    {
if (i == currentPage)
{
    s.Append(string.Format(HtmlCurrentPage, i));
}
else
{
    if (isRewrite)
    {
s.Append(string.Format(HtmlPageNum, string.Format(pageUrl, i), i));
    }
    else
    {
if (pageUrl.IndexOf("?") > 0)
    s.Append(string.Format(HtmlPageNum, string.Format(pageUrl + @"&pn={0}", i), i));
else
    s.Append(string.Format(HtmlPageNum, string.Format(pageUrl + @"?pn={0}", i), i));

    }
}
    }
    s.Append(HtmlNextPage);
    if (bGoToPage)
    {
s.Append(HTMLMoveToPage);
    }
    return string.Format(HtmlPageTag, s.ToString());
}

/// <summary>
/// 擷取最終html
/// </summary>
/// <returns></returns>
public string GetHtmlNoNumsPage()
{
    if (totalPages < 0)
return "";
    StringBuilder s = new StringBuilder("");
    if (bHtmlCurOfTotalPage)
    {
if (string.IsNullOrEmpty(HtmlCurOfTotalPage))
    s.Append(string.Format(" 第 {0}/{1} 頁 ", currentPage, totalPages));
else
    s.Append(string.Format(HtmlCurOfTotalPage, currentPage, totalPages));
    }
    s.Append(HtmlPrevPage);
    s.Append(HtmlNextPage);
    return string.Format(HtmlPageTag, s.ToString());
}

    }

 


二、使用執行個體
 

 代碼如下 複製代碼

public string GetHtmlPager()
{
    PagerHelper pHelper = new PagerHelper();
    pHelper.HtmlPageTag = @"<div class=""fenye""><ul>{0}</ul></div>";
    pHelper.pageUrl = url;
    pHelper.totalRows = TotalCount;
    pHelper.pageSize = pageSize;
    pHelper.extendPage = 8;
    pHelper.HtmlPrevPage = @"<li><a href=""{1}"">上一頁</a></li>";
    pHelper.HtmlNextPage = @"<li><a href=""{0}"">下一頁</a></li>";
    pHelper.HtmlDisablePrevPage = @"<li><span class=""nohref"">上一頁</span></li>";
    pHelper.HtmlDisableNextPage = @"<li><span class=""nohref"">下一頁</span></li>";
    pHelper.HtmlCurrentPage = @"<li class=""current"">{0}</li> ";
    pHelper.currentPage = pageIndex;
    pHelper.HtmlPageNum = @"<li><a href=""{0}"">{1}</a></li> ";
    return pHelper.GetHtmlPage();
}


自訂分頁控制項

使用:

 代碼如下 複製代碼
<%@ Register assembly="YSM.AspNetPager" namespace="YSM.AspNetPager" tagprefix="cc1" %>

頁面註冊控制項,也可以在web.config中配置
1.ajax之UpdatePanel分頁則把控制項放到UpdatePanel裡面即可(不能啟用url重寫和url參數分頁,即跳轉頁面)

 代碼如下 複製代碼
<cc1:YsmPager ID="YsmPager1" runat="server" PageSize="10" onpagechanged="YsmPager1_PageChanged" CssClass="yahoo" CurrentPageButtonClass="current" DisabledButtonClass="disabled"></cc1:YsmPager>

CssClass:設定控制項div的樣式;CurrentPageButtonClass:設定當前索引頁的樣式;DisabledButtonClass:設定啟用上一頁下一頁按鈕時的禁用樣式。
2.url重寫分頁需要設定UrlRewriting屬性為true,Url重寫規則UrlRewritePattern屬性。

 代碼如下 複製代碼
<cc1:YsmPager ID="YsmPager2" runat="server" PageSize="10" UrlRewriting="true" UrlRewritePattern="index-{0}-[cid].html"></cc1:YsmPager>

index-{0}-[cid].html多個參數時候的使用頁面使用{0}自動格式化,其他參數使用[你的參數名]進行配置。
屬性介紹:
PageSize:擷取或設定每頁顯示記錄數
CurrentPageIndex:擷取或設定當前頁索引
RecordCount:擷取或設定記錄總數(必須設定值才能產生分頁連結)
PageCount:擷取頁總數,此屬性只有get
UrlPaging:是否啟用Url傳參方式分頁(預設false)
UrlPageIndexName:"擷取或設定當啟用Url分頁方式時,在url中表示要傳遞的頁索引的參數的名稱(預設page)。
UrlRewriting:是否啟用Url重寫,當為true時UrlPaging自定為true(預設false)
UrlRewritePattern:Url重寫格式(預設null)
CurrentPageButtonClass:當前頁按鈕樣式(預設null)
DisabledButtonClass:設定禁用上一頁下一頁按鈕樣式(預設null)
FirstPageText:設定第一頁按鈕的文本(預設1)
LastPageText:設定最後一夜按鈕的文本(預設PageCount的值)
ShowJumpBox:設定是否顯示跳轉框(預設顯示)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.