asp.net|建立|動態
摘要: DataGrid 控制項是與 ASP.net Page Framework 一起發行的資料繫結的伺服器控制項。本文使用 DataGrid 來建立包含動態表格視圖的 Web 頁面。還探討控制項所提供功能的各個方面,包括選擇、刪除、分頁和模板列 ,而控制項就是使用這些功能來建立最終的頁面的。
簡介
DataGrid 控制項可以用於若干個唯讀資料。該控制項可用於資料表格版面配置的輸出進行簡化。還提供多個機制,用於通過超級連結及其對選擇、排序、分頁和原地編輯和其它特性的支援,為輸出添加互動性。這使得該控制項在若干的常見 Web 應用程式方案中很有用,諸如列表、購物車和查詢結果。
DataGrid 還提供一些功能,這些功能具有 ASP.NET 架構所特有的所有伺服器控制項的特點。該控制項包含進行與瀏覽器無關的輸出所需的邏輯,同時提供了一個統一的編程模型,從而能夠處理回傳資料,以及對請求之間的狀態進行管理。這樣,開發人員就可以針對帶有屬性、方法和事件的物件模型進行編程,而不必處理直接用 HTML編程所帶來的不一致性和複雜性。
我們要建立什麼?
本文舉出了一系列的樣本頁面,彼此結合,從而最終產生一個頁面,該頁面以樣本資料庫的 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>
</keyref>
</element>
</schema>
<DocumentElement>
<Author>
<au_id>154-00-1300</au_id>
<au_name>John Doe</au_name>
<phone>425 705 1234</phone>
<address>One Microsoft Way</address>
<city>Redmond</city>
<state>CA</state>
<zip>98005</zip>
</Author>
<Title>
<title_id>BU1032</title_id>
<au_id>213-46-8915</au_id>
<title>The Busy Executive's Database Guide</title>
<price>19.99</price>
<pubdate>1991-06-12T07:00:00</pubdate>
</Title>
</DocumentElement>
</root>
這些範例簡化了資料訪問,從而將重點全部放在 DataGrid 的使用上。上面的 XML 被載入進一個 DataSet。 DataSet 為資料提供快取,從而可以進行篩選、排序和編輯等等各種操作。下面的代碼來自 Global.asax,用於載入 DataSet 和將其儲存為 Session 狀態。
public void Session_OnStart() {
// 將範例中所用的資料載入會話範圍的 DataSet.
FileStream fs = null;
DataSet ds = null;
try {
fs = new FileStream(Server.MapPath("Data\\TitlesDB.xml"),
FileMode.Open, FileAccess.Read);
ds = new DataSet();
ds.ReadXml(fs);
} finally {
if (fs != null) {
fs.Close();
fs = null;
}
}
Session["AppData"] = ds;
}
[1] [2] [3] [4] [5] [6] 下一頁