Microsoft® Visual Studio.NET 的下一發行版包括 DataGrid Web 控件 (作為服務器控件的 Active Server Page+ (ASP+) 套件的一部分)。 該控件提供用以根據數據源的內容來表示 HTML 的功能。
DataGrid 控件可以用於若干個只讀匯報情形。該控件設計用於對豐富而完全可定制的數據表格布局的輸出進行簡化。還提供多個機制,用於通過超級鏈接及其對選擇、排序、分頁和原地編輯和其它特性的支持,為輸出添加交互性。這使得該控件在若干的常見 Web 應用方案中很有用,諸如列表、購物車和查詢結果。
DataGrid 還提供一些功能,這些功能具有 ASP+ 架構所特有的所有服務器控件的特點。該控件包含進行與浏覽器無關的輸出所需的邏輯,同時提供了一個統一的編程模型,從而能夠處理回傳數據,以及對請求之間的狀態進行管理。這樣,開發商就可以針對帶有屬性、方法和事件的對象模型進行編程,而不必處理直接用 HTML 編程所帶來的不一致性和復雜性。
使用 ASP+ 列表綁定控件 介紹 DataGrid 控件以及相關的 DataList 和 Repeater 控件。還介紹了數據綁定、模板和格式化等等多個關鍵的概念。該文以此為基礎寫成,並將重點放在 DataGrid 控件,以揭示如何在您自己的應用程序中利用該控件所提供的功能。
我們要建立什麼?
該文舉出了一序列的示例頁面,彼此結合,從而最終生成一個頁面,該頁面以示例數據庫的 Authors 表和 Titles 表為依據,提供主/詳細資料視圖(該數據庫隨 Microsoft SQL Server™2000 一起發運)。序列中的每個頁面均介紹 DataGrid 控件的一個新的特性或功能。下列圖象是從 pubs 數據庫抽取出來的。
主/詳細資料視圖類似於 Microsoft Access 所介紹的窗體/子窗體概念。也類似於隨 Microsoft Visual InterDev®6.0 一起發運的 DataForm Wizard (數據窗體向導)。主/詳細資料視圖顯示一到多的關系結果,其中視圖的一個部分顯示第一個查詢或主查詢的結果。然後跟蹤一個選擇,以篩選所使用的第二個查詢的結果,從而在視圖的另一部分顯示選擇內容的詳細資料。
圖 1. 完成的頁面
圖 1 將 Author 列表顯示在頁面的上半部分,並將關於所選作者的詳細資料(包括相關書名)顯示在下半部分。 Authors 列表和 Titles 均是用 DataGrid 控件加以表示的。 顯示作者的 DataGrid 舉例說明如何進行選擇、排序、和分頁。顯示書名的 DataGrid 演示如何進行原地編輯、格式化和定制列。
數據訪問
為了使示例自成一體,從 SQL Server 抽取數據並將該數據連同其架構信息一同保留為一個 XML 文件 TitlesDB.xml。下面是該文件的一個片斷。
<root>
<schema id="DocumentElement" targetNamespace=""
xmlns="http://www.w3.org/1999/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<element name="Author">
<complexType content="elementOnly">
<element name="au_id" type="string" minOccurs="1"
maxOccurs="1"></element>
<element name="au_name" type="string" minOccurs="1"
maxOccurs="1"></element>
<element name="address" type="string" minOccurs="0"
maxOccurs="1"></element>
<element name="city" type="string" minOccurs="0"
maxOccurs="1"></element>
<element name="state" type="string" minOccurs="0"
maxOccurs="1"></element>
<element name="zip" type="string" minOccurs="0"
maxOccurs="1"></element>
<element name="phone" type="string" minOccurs="0"
maxOccurs="1"></element>
</complexType>
<unique name="AuthorConstraint" msdata:PrimaryKey="True">
<selector>.</selector>
<field>au_id</field>
</unique>
</element>
<element name="Title">
<complexType content="elementOnly">
<element name="title_id" type="string" minOccurs="1"
maxOccurs="1"></element>
<element name="au_id" type="string" minOccurs="1"
maxOccurs="1"></element>
<element name="title" type="string" minOccurs="1"
maxOccurs="1"></element>
<element name="price" msdata:DataType="System.Currency"
type="string"
minOccurs="1" maxOccurs="1"></element>
<element name="pubdate" type="timeInstant" minOccurs="1"
maxOccurs="1"></element>
</complexType>
<unique name="TitleConstraint" msdata:PrimaryKey="True">
<selector>.</selector>
<field>title_id</field>
</unique>
<key name="AuthorTitle">
<selector>../Author</selector>
<field>au_id</field>
</key>
<keyref refer="AuthorTitle">
<selector>.</selector>
<field>au_id</field>