程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 創建用於ASP.NET的分頁控件

創建用於ASP.NET的分頁控件

編輯:關於ASP.NET

從程序員的角度來看,Microsoft SQL Server查詢的最大缺陷之一就是返回的行數通常比應用程序的用戶界面實際可以容納的行數要多得多。這種尴尬情形經常將開發人員陷於困境。開發人員是應該創建一個非常長的頁面,讓用戶花時間去滾動浏覽,還是應該通過設置一個手動分頁機制來更好地解決這個問題?

哪種解決方案更好,在很大程度上取決於要檢索的數據的特性。由多個項目(如搜索結果)組成的較長列表,最好通過各頁大小相等、每頁相對較短的多個頁面顯示。由單個項目(如文章的文本)組成的較長列表,如果整個插入在一個頁面中,使用起來會更方便。最後得出的分析結果是,應該根據應用程序的總體用途來做決定。那麼,Microsoft ASP.NET 是如何解決數據分頁問題的呢?

ASP.NET 提供了功能強大的數據綁定控件,以便將查詢結果格式化為 HTML 標記。但是,這些數據綁定控件中只有一種控件(即 DataGrid 控件)本來就支持分頁。其他控件(如 DataList、Repeater 或 CheckBoxList)則不支持分頁。這些控件及其他列表控件不支持分頁,不是因為它們在結構上不支持分頁,而是因為它們與 DataGrid 不同,不包含任何處理分頁的特定代碼。但是,處理分頁的代碼是相當樣板化的,可以添加到所有這些控件中。

Scott Mitchell 在最近的一篇題目為“Creating a Pageable, Sortable DataGrid”的文章中,介紹了DataGrid分頁。該文還引用了Web 上的其他有用信息,為您提供了有關網格分頁基礎知識和其他信息。如果想查看如何使 DataList 控件可以進行分頁的示例,可以查看此文章(英文)。該文演示了如何創建一個自定義的 DataList 控件,該控件具有當前索引和頁面大小屬性,並可以啟動頁面更改事件。

同樣的代碼也可以用於滿足其他列表控件(如 ListBox 和 CheckBoxList)的分頁需要。不過,向各個控件添加分頁功能實際上並不是一種非常好的做法,因為,如上所述,分頁代碼是相當樣板化的。因此,對於聰明的程序員來說,有什麼方法比使用一種新的通用分頁程序控件來實現所有這些控件的分頁功能更好的呢?

本文中將建立一個分頁程序控件,它將使合作者列表控件能夠對 SQL Server 的查詢結果進行分頁。該控件名為 SqlPager,它支持兩種類型的合作者控件 - 列表控件和基礎數據列表控件。

SqlPager控件的顯著特點

SqlPager控件是一個 ASP.NET復合控件,包含一個單行表格。該行又包含兩個單元格 - 導航條和頁面描述符。該控件的用戶界面呈條形,理想情況下,其寬度與合作者控件的寬度相同。導航條部分提供了可單擊的元素,以便在頁面之間移動;頁面描述符部分為用戶提供了有關當前顯示的頁面的一些反饋信息。

圖 1:Visual Studio .NET 網頁設計器中顯示的 SqlPager 控件

與 DataGrid 控件的嵌入式分頁程序一樣,SqlPager 控件具有兩種導航模式,即下一頁/上一頁和數字頁面。此外,其特殊屬性 PagerStyle 使您能夠選擇更方便的樣式。該控件與列表控件協同工作。您可以通過 ControlToPaginate 字符串屬性為分頁程序指定一個這樣的合作者控件。

SqlPager1.ControlToPaginate = "ListBox1";

一般情況下,分頁程序首先獲取 SQL Server 的查詢結果,准備一個適當的記錄頁面,然後通過合作者控件的 DataSource 屬性顯示該頁面。當用戶單擊以查看新頁面時,分頁程序將檢索請求的數據並再次通過合作者控件來顯示數據。分頁機制對於列表控件是完全透明的。列表控件的數據源是通過編程方式進行更新的,任何時候都只包含適合當前頁面的記錄。

控件的分頁引擎具有多個 public 屬性,如 CurrentPageIndex、ItemsPerPage 和 PageCount,通過這些屬性來獲取並設置當前頁面的索引、每個頁面的大小以及要顯示的頁面的總數。分頁程序管理數據檢索和分頁所需的任何邏輯。

SelectCommand 屬性設置獲取數據所用的命令文本。ConnectionString 屬性定義數據庫的名稱和位置以及連接憑據。執行查詢時采用的方式取決於 PagingMode 屬性的值。該屬性的可能值為與其同名的 PagingMode 枚舉的值 - Cached 和 NonCached。如果選擇 Cached 選項,則將使用數據適配器和 DataTable 對象檢索整個結果集。可以選擇將結果集放置在 ASP.NET 的 Cache 對象中,該結果集可以重復使用直到過期。如果選擇 NonCached 選項,則查詢只檢索適合當前頁面的記錄。這時,ASP.NET 的 Cache 中不放置任何數據。NonCached 模式與 DataGrid 控件的自定義分頁模式幾乎相同。

下表列出 SqlPager 控件的全部編程接口。

表 1:SqlPager 控件的編程接口

名稱 類型 說明 CacheDuration 屬性 指示數據在 ASP.NET 的緩存中保留的秒數。只用於 Cached 模式。默認值為60。 ConnectionString 屬性 用來訪問所選擇的 SQL Server 數據庫的連接字符串。 ControlToPaginate 屬性 同一個 .aspx 頁面中的控件 ID,它將顯示分頁程序檢索的記錄頁面。這是合作者控件。 CurrentPageIndex 屬性 獲取並設置基於 0 的頁面索引。 ItemsPerPage 屬性 獲取並設置每頁要顯示的記錄數量。默認值為每頁顯示 10 個項目。 PagerStyle 屬性 該值指示分頁程序用戶界面的樣式。它可以為 PagerStyle 枚舉值:NextPrev 和 NumericPages 之一。在 NextPrev 模式中,將顯示 VCR 式的按鈕,來轉到第一頁、上一頁、下一頁和最後一頁。而在 NumericPages 模式中,將顯示一個下拉列表,列出所有可用頁面的索引。 PagingMode 屬性 該值指示檢索數據的方式。它可以為 PagingMode 枚舉值:Cached 和 NonCached 之一。如果為 Cached,則將使用數據適配器,且整個結果集將臨時放置在 ASP.NET 緩存中。如果為 NonCached,則只檢索當前頁面中的記錄。在這種情況下,不進行緩存。 SelectCommand 屬性 用來進行查詢的命令文本。最好為 SELECT-FROM-WHERE 形式。不支持 ORDER BY 子句。排序是通過 SortField 屬性另外指定的。 SortField 屬性 用來排序的字段的名稱。此字段用於為查詢提供動態的 ORDER BY 子句。排序是由 SQL Server 執行的。 ClearCache 方法 刪除存儲在 ASP.NET 緩存中的任何數據。 PageIndexChanged 事件 默認事件,當分頁程序移動到另一個頁面時發生。事件的數據結構為 PageChangedEventArgs 類,包含舊頁面和新頁面的索引。

由於 SqlPager 控件繼承了 WebControl,因此它也具有很多與 UI 相關的屬性來管理字體、邊框和顏色。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved