top
Loading...
在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>http://www.zhujiangroad.com/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;
}

在實際的 Web 應用程序中,通常不是使用處于 Session 或 Application 狀態的高速緩存數據,而是通過所存儲的過程、中間層業務對象,或通過調用 Web 服務所揭示的方法來訪問和修改數據。無論采取怎樣的手段來訪問數據,您會發現你依舊以同樣的方式來編程和與控件的對象模型進行進行交互。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗