熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

簡單實用的分頁類

2013-11-13 10:28:07  來源: .NET編程 
    一寫一個分頁類
   
    using System;
   
    using SystemText;
   
    using SystemDiagnostics;
   
    namespace Zhuwenfeng
   
    {
   
    public class MyPager
   
    {
   
    /// <summary>
   
    /// 總數據條數
   
    /// </summary>
   
    public int TotalCount { get; set; }
   
    /// <summary>
   
    /// 每頁數據條數
   
    /// </summary>
   
    public int PageSize { get; set; }
   
    /// <summary>
   
    /// 當前頁碼(從開始)
   
    /// </summary>
   
    public int CurrentPageIndex { get; set; }
   
    /// <summary>
   
    /// 顯示出來最多的頁碼數量因為假設有不可能把頁都顯示到界面上
   
    /// </summary>
   
    public int MaxPagerCount { get; set; }
   
    /// <summary>
   
    /// 頁碼鏈接的地址格式頁碼用{n}占位
   
    /// </summary>
   
    public string UrlFormat { get; set; }
   
    public MyPager()
   
    {
   
    PageSize = ;
   
    MaxPagerCount = ;
   
    }
   
    /// <summary>
   
    /// 嘗試從字符串pn中解析當前頁面賦值給CurrentPageIndex
   
    /// </summary>
   
    /// <param name=pn></param>
   
    public void TryParseCurrentPageIndex(string pn)
   
    {
   
    int temp;
   
    if (intTryParse(pn out temp))
   
    {
   
    CurrentPageIndex = temp;
   
    }
   
    else
   
    {
   
    CurrentPageIndex = ;
   
    }
   
    }
   
    /// <summary>
   
    /// 創建頁碼鏈接
   
    /// </summary>
   
    /// <param name=i>頁碼</param>
   
    /// <param name=text>鏈接文本</param>
   
    /// <returns></returns>
   


    private string GetPageLink(int istring text)
   
    {
   
    StringBuilder sb = new StringBuilder()
   
    string url = UrlFormatReplace({n} iToString())
   
    sbAppend(<a )Append(url)Append(>Append(text)Append(</a>
   
    return sbToString()
   
    }
   
    /// <summary>
   
    /// 檢查輸入參數
   
    /// </summary>
   
    private void Check()
   
    {
   
    DebugAssert(PageSize>
   
    DebugAssert(CurrentPageIndex >=
   
    DebugAssert(!stringIsNullOrEmpty(UrlFormat))
   
    }
   
    /// <summary>
   
    ///渲染到前台到得HTML代碼
   
    /// </summary>
   
    /// <returns></returns>
   
    public string Render()
   
    {
   
    Check()
   
    StringBuilder sb = new StringBuilder()
   
    double tempCount = TotalCount / PageSize;
   
    int pageCount = (int)MathCeiling(tempCount)
   
    //計算顯示的頁碼數(當總頁碼大於MaxPagerCount)的起始頁碼
   
    int visibleStart = CurrentPageIndexMaxPagerCount/;
   
    if (visibleStart <
   
    {
   
    visibleStart = ;
   
    }
   
    //計算顯示的頁碼數(當總頁碼大於MaxPagerCount)的起始頁碼
   
    int visibleEnd = visibleStart + MaxPagerCount;
   
    //顯示最多MaxPagerCount條
   
    //如果算出來的結束頁碼大於總頁碼的話則調整為最大頁碼
   
    if (visibleEnd >pageCount)
   
    {
   
    visibleEnd = pageCount;
   
    }
   
    if (CurrentPageIndex >
   
    {
   
    sbAppend(GetPageLink( 首頁))
   
    sbAppend(GetPageLink(CurrentPageIndex 上一頁))
   
    }
   
    else
   
    {
   
    sbAppend(<span>首頁</span>
   
    //如果沒有上一頁了則只顯示一個上一頁的文字沒有超鏈接
   
    sbAppend(<span>上一頁</span>
   
    }


   
    //繪制可視的頁碼鏈接
   
    for (int i = visibleStart; i <= visibleEnd; i++)
   
    {
   
    //當前頁不是超鏈接
   
    if (i == CurrentPageIndex)
   
    {
   
    sbAppend(<span>Append(i)Append(</span>
   
    }
   
    else
   
    {
   
    sbAppend(GetPageLink(iiToString()))
   
    }
   
    }
   
    if (CurrentPageIndex < pageCount)
   
    {
   
    sbAppend(GetPageLink(CurrentPageIndex + 下一頁))
   
    sbAppend(GetPageLink(pageCount + 末頁))
   
    }
   
    else
   
    {
   
    sbAppend(<span>下一頁</span>
   
    sbAppend(<span>末頁</span>
   
    }
   
    return sbToString()
   
    }
   
    }
   
    }
   
    二UI層代碼示例
   
    public partial class 分頁測試 : SystemWebUIPage
   
    {
   
    protected string PagerHTML { get; private set; }
   
    protected void Page_Load(object sender EventArgs e)
   
    {
   
    var pager = new MyPager()
   
    pagerUrlFormat = 分頁測試aspx?pagenum={n};
   
    pagerPageSize = ;
   
    pagerTryParseCurrentPageIndex(Request[pagenum])
   
    int startRowIndex = (pagerCurrentPageIndex ) * pagerPageSize;
   
    so_KeywordLogBLL bll = new so_KeywordLogBLL()
   
    pagerTotalCount = bllGetTotalCount()
   
    RepeaterDataSource = bllGetPagedData(startRowIndex startRowIndex + pagerPageSize
   
    RepeaterDataBind()
   
    PagerHTML = pagerRender()//渲染頁碼條HTML
   
    }
   
    }
   


    三前台代碼
   
    <form id=form runat=server>
   
    <div>
   
    <asp:Repeater ID=Repeater runat=server>
   
    <ItemTemplate>
   
    <li>
   
    <%#Eval(Id) %>|<%#Eval(KeyWord) %>
   
    </li>
   
    </ItemTemplate>
   
    </asp:Repeater>
   
    <div class=pager>
   
    <%=PagerHTML%>
   
    </div>
   
    </div>
   
    </form>
   
    四加一個CSS更好看
   
    <style type=text/css>
   
    pager
   
    {
   
    textalign: center;
   
    paddingbottom: px;
   
    paddingleft: px;
   
    paddingright: px;
   
    float: right;
   
    paddingtop: px;
   
    }
   
    pager a
   
    {
   
    borderbottom: #ccc px solid;
   
    textalign: left;
   
    borderleft: #ccc px solid;
   
    paddingbottom: px;
   
    lineheight: px;
   
    margin: px px;
   
    outlinestyle: none;
   
    paddingleft: px;
   
    paddingright: px;
   
    background: #fff;
   
    color: #;
   
    fontsize: px;
   
    bordertop: #ccc px solid;
   
    borderright: #ccc px solid;
   
    textdecoration: none;
   
    paddingtop: px;
   
    }
   
    pager a:hover
   
    {
   
    borderbottom: #f px solid;
   
    borderleft: #f px solid;
   
    color: #f;
   
    bordertop: #f px solid;
   
    borderright: #f px solid;
   
    textdecoration: underline;
   
    }
   
    pager a:focus
   
    {
   
    mozoutlinestyle: none;
   
    }
   
    pager span
   
    {
   
    borderbottomstyle: none;
   
    textalign: left;
   
    paddingbottom: px;
   
    lineheight: px;
   
    borderrightstyle: none;
   
    margin: px px;
   
    paddingleft: px;
   
    paddingright: px;
   
    bordertopstyle: none;
   
    background: #f;
   
    color: #fff;
   
    fontsize: px;
   
    borderleftstyle: none;
   
    paddingtop: px;
   
    }
   
    </style>
   


    五再加一個數據訪問層的Select代碼
   
    public int GetTotalCount()
   
    {
   
    string sql = SELECT count(*) FROM so_KeywordLog;
   
    return (int)DbHelperSQLGetSingle(sql)
   
    }
   
    public DataSet GetPagedData(int minrownum int maxrownum)
   
    {
   
    string sql = SELECT * from(SELECT *(row_number() over(order by Id)) rownum FROM so_KeywordLog) t where rownum>=@minrownum and rownum<=@maxrownum;
   
    SqlParameter[] parameters = { new SqlParameter(@minrownum SqlDbTypeInt new SqlParameter(@maxrownum SqlDbTypeInt ) };
   
    parameters[]Value = minrownum;
   
    parameters[]Value = maxrownum;
   
    return  DbHelperSQLQuery(sql parameters)
   
    }
   
    六相關分頁Select語句(擴展)
   
    存儲過程
   
    create PROCEDURE GetPageDataOutRowPageCount
   
    (
   
    @PageIndex int = 當前頁數
   
    @PageSize  int = 每頁大小
   
    @RowCount int output總行數(傳出參數)
   
    @PageCount int output總頁數(傳出參數)
   
    )
   
    AS
   
    begin
   
    DECLARE @sql NVARCHAR(@sqlCount NVARCHAR(
   
    select @RowCount =COUNT(SID)@PageCount=CEILING((COUNT(SID)+)/@PageSize) FROM Students
   
    SET @sql=SELECT TOP +str(@PageSize) +  FROM Students where SID not in(select top +str((@PageIndex)*@PageSize) + SID from Students)
   
    EXEC(@sql)
   
    end
   
    Select語句
   
    select top + pageSize + * from Students where SID not in (select top + (pageIndex ) * intParse(pageSize) + SID from Students)
   
    Select語句
   
    select * from (select * Row_Number()over(order by id) RowNumber from books) t
   
    where tRowNumber>= and tRowNumber<=
   
    第n頁 (PageIndex)*pageSize+PageIndex*pageSize
   
    ListView 提供的分頁不說了


From:http://tw.wingwit.com/Article/program/net/201311/13748.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.