分頁控件AspNetPager的用法

   分頁是Web應用程序中最常用到的功能之一,在ASP.NET中,雖然自帶了一個可以分頁的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分頁功能並不盡如人意,如可定製性差、無法通過Url實現分頁功能等,而且有時候我們需要對DataList和Repeater甚至自定義數據綁定控件進行分頁,手工編寫分頁代碼不但技術難度大、任務繁瑣而且代碼重用率極低,因此分頁已成爲許多ASP.NET程序員最頭疼的問題之一。
   今天閒來無事就學習學習了aspNetPager分頁控件的用法:
AspNetPager針對ASP.NET分頁控件的不足,提出了與衆不同的解決asp.net中分頁問題的方案,即將分頁導航功能與數據顯示功能完全獨立開來,由用戶自己控制數據的獲取及顯示方式,因此可以被靈活地應用於任何需要實現分頁導航功能的地方,如爲GridView、DataList以及Repeater等數據綁定控件實現分頁、呈現自定義的分頁數據以及製作圖片瀏覽程序等,因爲AspNetPager控件和數據是獨立的,因此要分頁的數據可以來自任何數據源,如SQL Server、Oracle、Access、mysql、DB2等數據庫以及XML文件、內存數據或緩存中的數據、文件系統等等。
1.首先下載aspnetpager控件,我這兒的版本是6.0.0.0   點擊下載
2.把控件加到項目中(添加自定義控件的方法),並把它拖放到頁面上:

<webdiyer:AspNetPager ID="AspNetPager1" runat="server" 
AlwaysShow
="True" //總是顯示分頁控件,即使要分頁的數據只有一頁 
  OnPageChanged
="AspNetPager1_PageChanged"  //分頁發生改變時觸發事件
UrlPaging
="true"  //通過URL傳遞分頁信息的方式來分頁。如果設爲true,禁用ViewState也能達到效果。如果設置爲false,禁用了viewstate則無法實現分頁. 
NumericButtonTextFormatString="[{0}]" //頁索引數字顯示的格式
 ShowCustomInfoSection
="Left">   //顯示當前頁和總頁數信息,默認值不顯示,爲left則將顯示在頁索引前,爲right則爲頁索引後            </webdiyer:AspNetPager>
3.Page_Load事件:
  protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                BindGridView();
            }

        }
BindGridView方法如下:
   public void BindGridView()
        {
            string sql = "select * from gw_newsletter_group";//自定義的SQL語句
            int recordcount;
            DataSet ds = GetPage(sql, this.AspNetPager1.CurrentPageIndex, this.AspNetPager1.PageSize,out recordcount);
            this.AspNetPager1.RecordCount = recordcount;
            this.GridView1.DataSource = ds;
            this.GridView1.DataBind();
            AspNetPager1.CustomInfoHTML = "記錄總數:<b>" + AspNetPager1.RecordCount.ToString() + "</b>";
            AspNetPager1.CustomInfoHTML += " 總頁數:<b>" + AspNetPager1.PageCount.ToString() + "</b>";
            AspNetPager1.CustomInfoHTML += " 當前頁:<font color=\"red\"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>";
        }
其中的GetPage方法代碼如下:(GetConnection()是返回一個SqlConnection對象)
/// <summary>
        
/// Get Data By CurrentPage
        
/// </summary>
        
/// <param name="sql">SQL</param>
        
/// <param name="currentPage">current Page</param>
        
/// <param name="pagesize">Page Size</param>
        
/// <param name="recordcount">Total Record</param>
        
/// <returns></returns>

        public DataSet GetPage(string sql, int currentPage, int pagesize,out int recordcount)
        {
            SqlDataAdapter ada = new SqlDataAdapter(sql, GetConnection());
            DataSet ds = new DataSet();
            int startRow = (currentPage - 1) * pagesize;
            ada.Fill(ds, startRow, pagesize, "table");
            recordcount = GetPageRecord(sql);
            return ds;
        }
GetPageRecord方法:(返回總的記錄數)
  public int GetPageRecord(string sql)
        {
            sql = System.Text.RegularExpressions.Regex.Replace(sql, "ORDER BY.*""");
            sql = "select count(*) from (" + sql + ") as temp";
            SqlCommand cmd = new SqlCommand(sql, GetConnection());
            cmd.Connection.Open();
            int recordcount = (int)cmd.ExecuteScalar();
            return recordcount;
        }
這裏注意要去掉”Order By“的字符串(聚合函數不能和"ORDER BY"連用)
4.另外:還有個事件:
    protected void AspNetPager1_PageChanged(object sender, EventArgs e)
        {
            BindGridView();

        }
到目前爲止就可以運行看到效果:
地址欄顯示效果:
注意這裏是把屬性:urlpaging=true,而且如果禁止了ViewState也能實現。
如果把urlpaging=false 的話 
如果禁止了ViewState就無法實現分頁功能了。
上面的代碼中有這樣一句話:
 AspNetPager1.CustomInfoHTML += " 總頁數:<b>" + AspNetPager1.PageCount.ToString() + "</b>";
這裏就有一個問題是aspNetPage1.PageCount怎樣得出來的呢?我們並沒有爲它賦值。(這裏而且這個屬性是隻讀的)
實際上它的值是本身的控件就實現了:我分析覺得代碼可能如下:
 public int GetPagerCount(string sql, int pagesize)
        {
            int recordcount = GetPageRecord(sql);//方法見上
            int pagecount=recordcount/pagesize;
            return (recordcount % pagesize == 0 ? pagecount : pagecount + 1);
        }
這樣就可以得出到底分頁的頁數.
最後補充說明:由於我只是初步研究這個控件,不過上面的代碼都是經過測試通過的。
而且我還發現這個控件還有很多屬性可以改變它的樣式外觀的。而且還比較靈活的。希望能給朋友們帶來一些幫助。
另外如果有什麼地方不正確還希望高手能及時的提出來!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章