天天看點

超級簡單:在你的ASP.NET頁面自定義清單和分頁

     這個例子展示如何使用SQL Server 2005 的ROW_NUMBER功能去分頁,以及通過在code-behind中自定義HTML輸出比較好看的界面。

   首先,我們必須去選擇的清單記錄,通常使用的分頁技術是我們将所有的記錄放入一個dataset,然後使用PagedDataSource來顯示适當的頁。這種技術主要不好的地方是在記憶體中存儲了所有的記錄,而在頁面上僅僅顯示其中的一些記錄。每次你點選頁碼,每次它都将查詢了所有的記錄。為了克服這個頭痛的問題,我将有效地使用SQL Server 2005的ROW_NUMBER 功能。

    我們将傳遞兩個參數,存儲過程能查詢特定的記錄。

<code>    @intCurrentPage int</code> - 這個參數用來表示目前頁碼。

<code>    @intRecordPerPage int</code> -  這個參數用來得到一頁中顯示的記錄數量。

    例如,如果我們将 <code>@intCurrentPage設定為1</code> ,将@intRecordPerPage設定為10,結果将會是1到10的記錄。 這個存儲過程連接配接到AdventureWorks資料庫,從Production.Product 查詢記錄。

代碼

     通過傳遞:@intCurrentPage=1, @intRecordPerPage=10,執行上面的存儲過程。

    第一個結果集是第一頁的記錄,第二個結果集是記錄的總和。

    在AdventureWorks 資料庫中執行這個存儲過程,建立一個連接配接字元串來連接配接AdventureWorks。

connectionString ="Data Source=[SERVER NAME];

   Initial Catalog=AdventureWorks;User ID=[USERNAME]; Password=[PASSWORD]" /&gt;

    現在我們在資料庫中準備好存儲過程,開始實作我們的清單和分頁方法。 為了顯示清單,我将不使用任何資料源控件,我将直接在aspx頁面上輸出。對于這個,在背景代碼中,我們首先定義兩個字元串。

   protected string strList; // to set the HTML of the listing

   protected string strPages;//to set the HTML of paging

     字元串變量strList 用來儲存記錄的清單的HTML,strPages 用來儲存分頁的HTML。首先,我必須得到頁的索引,我将頁的索引存放在隐藏的文本字段中(txtHidPageIndex)。預設,第一頁将被顯示。我們将使用者點選的頁索引,将它存儲在這個隐藏字段中 ,服務端能通路這個隐藏字段來獲得頁碼。我們需要一個服務端控件來監聽頁面的點選。 我在頁面上添加一個link button控件(lnkPaging)來初始化clicking,它也能完成一些服務端的動作。

    寫一個javascript函數來接受頁碼和将頁碼以及将它放到隐藏字段中。 在此之後,執行link button的回傳,這樣我們能執行服務端的操作。該連結按鈕的Click事件可以發起的ASP.NET doPostBack方法。

function doPaging(intPageIndex)

{

    document.getElementById('txtHidPageIndex').value=intPageIndex;

    __doPostBack('lnkPaging','');

}

  link button (<code>lnkPaging</code>) 的背景代碼如下:

     protected void lnkPaging_Click(object sender, EventArgs e)

        {

            DoSearch(int.Parse(txtHidPageIndex.Value));

        }

     下面的片段顯示如何将記錄填充到reader中。

       我設定一頁顯示10條記錄。如果你想讓使用者自定義每頁的記錄數量,在你的網站中,你能添加一個選項設定值。用這個值來作為每頁顯示的記錄數量。現在,我們在reader已經有了結果。建立一個StringBuilder 來存儲建立的 HTML 。

     在建立清單的HTML之後,我将它配置設定給一個保護的變量strList。

strList = sbHTML.ToString();

    現在完成我們主要要做的事情:如何去分頁。對于分頁,首先我們需要所有記錄的總數量。能從reader中得到這個數量。

      objReader.NextResult();

        int intTotalRecords = 0;

        if (objReader.Read()) {

            intTotalRecords =int.Parse(objReader[0].ToString());

     現在,intTotalRecords變量包含了記錄的總數量。第二個任務是去找頁碼數量。如下所示:

     現在我們必須去找每一頁的開始的一條記錄和最後的一條記錄。我們假設顯示在頁碼清單中包含5頁。 是以使用者能獲得First和Previous按鈕,接下來是下5頁的頁碼按鈕,還有Next和Last按鈕。

    現在,我們要能通過頁的索引和剩餘的記錄數目來隐藏和禁用First, Previous, Next, 和Last button。

    現在,我們能添加一個頁數,它從第一頁到最後一頁。 

    在實作了分頁的HTML之後,在protected類型的字元串strPages中存儲StringBuilder類型的值。分頁就是就是如果頁數超過一頁,就僅僅顯示一頁。

     如果使用這個方法,你不需要任何的資料源控件。我們建立和管理清單和分頁的HTML。這項技術在你的頁面上将給你帶來最大的靈活性。

本文轉自麒麟部落格園部落格,原文連結:http://www.cnblogs.com/zhuqil/archive/2010/01/02/custompagingandlisting.html,如需轉載請自行聯系原作者