人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

運用 ASP+ 下文綁定控件 (轉自ms 一)

運用 ASP+ 下文綁定控件 (轉自ms 一)

更新時間:2022-06-28 文章作者:未知 信息來源:網絡 閱讀次數:

使用 ASP+ 列表綁定控件
Nikhil Kothari
Microsoft Corporation
2000年7月

摘要: 說明 ASP+ Repeater、DataList 和 DataGrid 服務器控件。這些控件能夠實現一個根植于數據源的,基于 HTML 的應用程序用戶界面。討論與這些控件有關的概念并概要介紹使用這些控件的基本示例。

目錄
簡介
列表綁定控件是如何工作的?
Repeater 控件
DataList 控件
DataGrid 控件
Repeater、DataList 或 DataGrid?
相關資源
下載與本文相關的示例文件 (56 KB)。

簡介
Repeater、DataList 和 DataGrid 控件構成 ASP+ 頁面框架中 System.Web.UI.WebControls 名稱空間內的相關 Web 控件集。這些控件使 HTML 顯示所綁定列表或數據源的內容。因此,將它們統稱為“列表綁定控件”。

與框架中的其它 Web 控件類似,這些控件提供一致的編程模型并封裝一個獨立于瀏覽器的表示邏輯。這些特性使開發人員能夠針對對象模型編程而不用必須掌握與 HTML 相關的那些不一致的和復雜的技術知識。

這三種控件可以按多種布局(包括列表、分欄/報紙欄目和流布局(HTML 流))來表示與其相關的數據源內容。此外,它們還允許您創建完全不同的或完全定制的布局。除了封裝有表示邏輯外,還提供了用來處理已發送數據、執行狀態管理和引發事件的功能。最后,它們還對諸如選擇、編輯、分頁和排序之類的標準操作提供不同級別的支持。這些控件可以簡化幾種常見的 Web 應用程序方案,包括報表、購物車、產品列表、查詢結果和導航菜單。

下面幾節將進一步說明這些控件和如何在您的 Web 應用程序中使用它們,以及如何選用控件。

列表綁定控件是如何工作的?
本節是本文其余部分的背景材料。概述了這些列表綁定控件的工作方式、它們的共同特性以及某些相關概念。

DataSource 屬性
每個控件都有一個 DataSource 屬性,其類型為 System.Collections.ICollection。用最簡單的話來說,數據源是同類對象的一個列表或集合。

此框架中有幾個對象提供了 ICollection 的實現。這個集合包括 System.Data.DataView (它通常用來訪問關系數據庫和 XML 數據)、一般 ICollection 實現(如 ArrayList 和 Hashtable)以及數組。

與傳統的數據綁定控件(它們通常需要 ADO 記錄集)不同,除了實現 ICollection 接口之外,這些列表綁定控件未對其數據源強加任何其它要求。根據設計,通過大量增加可作為有效 DataSource 屬性值的類型和數據結構,它們能夠為您的應用程序代碼實現最大程度的簡單和靈活性。

項目集合
每個列表綁定控件都包含一個項目集合。控件通過列舉這些對象當前的數據源來置入其項目集合。在列舉中為每個對象創建單個項目并用于表示該對象。這些項目同時成為列表綁定控件中包含的控件層次結構的一部分。

下表列出了與數據源的數據相關聯的項目類型。

項目 創建的默認項目類型
AlternatingItem 為項目集合中具有奇數下標的項目創建
SelectedItem 為選定的項目創建(不論該項目是否為備選項目)
EditItem 為處于編輯模式下的項目創建(不管它是否被選中或是否為備選項目)


控件同時創建將在表示中用到的下列項目。但是,它們并不與數據源的數據相關聯。

標頭 用來表示標頭信息
注腳 用來表示注腳信息
分隔符 用來表示圖 1 中所示的每個項目之間的內容,并且僅適用于 Repeater 和 DataList
分頁符 用來表示與 DataGrid 控件相關聯的分頁 UI




圖 1. 相對于“控件”集合的“項目”集合

項目的數據綁定和創建
列表綁定控件遵循在整個 ASP+ 框架中實現的顯式數據綁定模型。這意味著控件僅當其 DataBind 方法被調用時才需要并列舉其數據源。

當調用 DataBind 方法時,列表控件將列舉其數據源、創建項目并通過從其數據源中提取值來對其進行初始化。如果啟用了狀態管理,則控件還將保存所需的全部信息,以便在頁面的回傳處理期間重新創建其項目而無須重新設置數據源。

顯式數據綁定模型使您的應用程序代碼可以精確地確定在處理序列中何時及何處需要數據源。這種功能使對數據庫服務器的訪問更少且更高效,而這些訪問通常是 Web 應用程序最耗費資源的操作。

一般規則是每當您需要重新創建項目時都必須調用 DataBind。在大多數情況下,您將在您的頁面首次被請求創建初始項目集合時調用 DataBind。在該頁面的后續執行過程中,您將需要在引起項目集合被更改的各種事件處理程序中調用此方法。當用于創建初始數據源的查詢被修改時,就可能發生這種情況。當項目的狀態改變(如從只讀模式變為編輯模式)時也可能發生這種情況。

樣式
通過在對象模型上使用樣式屬性,您可以定義全部 DataList 和 DataGrid 控件及其所包含項目的格式和外觀。這些屬性允許定制字體、顏色、邊框和其它外觀因素。控件本身的樣式屬性(如前景色、背景色、字體和邊框樣式)將影響整個控件的表示。

此外,每個控件都包含與其所創建的項目類型相匹配的大量樣式屬性,如 as ItemStyle、AlternatingItemStyle 和 headerStyle。DataGrid 提供第三級的樣式屬性,這些屬性將影響特定列的所有單元格。控件中包含的每一列都可以擁有其自己的 headerStyle、FooterStyle 和 ItemStyle。

模板
樣式控制格式顯示,而模板則定義每個項目的內容和表示。您可以將模板看作 HTML 代碼片斷,它定義了用來表示項目的控件層次結構。

Repeater 和 DataList 控件由您指定的模板來驅動,提供各種可設置的模板屬性,如 ItemTemplate、AlternatingItemTemplate 和 headerTemplate。與樣式類似,每個模板都對應于一個特定類型的項目。

DataGrid 控件未模板化。但是,控件的 Column 集合中的 TemplateColumns 使 DataGrid 中模板的使用成為可能。TemplateColumn 中的每個單元格都可以包含一個模板,這與 Repeater 或 DataList 控件中的項目極為類似。這也使 DataGrid 中的定制表示成為可能。

模板中的數據綁定
模板定義項目中包含的控件層次結構。通過使用數據綁定表達式,此層次結構中的控件屬性可綁定到與此項目相關聯的數據屬性上。

作為模板的邏輯父級的項目在數據綁定表達式中被稱為“容器”。每個容器都有一個稱為 DataItem 的屬性,該屬性引用其相關聯的數據。結果是,模板中的大多數典型數據綁定表達式都將控件屬性綁定到 Container.DataItem 的某個屬性上。將在以下幾節介紹的示例中進一步說明這種綁定。

Repeater 控件
如前面所述,Repeater 控件是完全由模板驅動的,允許創建完全可定制的表示和布局。下圖說明了這一功能。



圖 2. 使用 Repeater 控件生成的帶項目符號的鏈接列表

摘自 Repeater1.aspx:

<%@ Page language="C#" src="Repeater1.cs" inherits="Samples.Repeater1Page"%>
...

<asp:Repeater runat=server id="linksListRepeater"
DataSource='<%# SiteLinks %>'>
<template name="headerTemplate">
<ul type="1">
</template>
<template name="ItemTemplate">
<li>
<asp:HyperLink runat=server
Text='<%# DataBinder.Eval(Container.DataItem, "SiteName") %>'
NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "SiteURL") %>'>
</asp:HyperLink>
</li>
</template>
<template name="FooterTemplate">
</ul>
</template>
</asp:Repeater>

此 .aspx 文件顯示了一個用于生成帶項目符號列表的 repeater 控件的聲明。

此示例說明了用數據綁定語法 (<%#...%>) 設置數據源的聲明方法。當您調用 DataBind 方法時,數據綁定中的表達式就會被執行。在這種情況下,repeater 的 DataSource 屬性被綁定到頁面的 SiteLinks 屬性上,后者包含要顯示的 URL 引用。

Repeater 是唯一允許在其模板中存在 HTML 片段的控件,將 Repeater 控件和 HTML 片段合在一起會產生良好形式的 HTML。在本示例中,帶項目符號的列表分為三個部分:

由 headerTemplate 表示的列表開始標記 (<ul type="1">)。


由 FooterTemplate 表示的列表結束標記 (</ul>)。


列表的主體由通過為 SiteLinks 集合中出現的每個對象重復 ItemTemplate 而生成的列表項 (<li>) 置入。
您也可以使用這些模板在標頭中指定表的開始標記 (<TABLE>),在注腳中指定表的結束標記(</TABLE>),在每個項目中指定單個表行 (<TR>)。此替換選項將導致列表表示。

您必須指定 ItemTemplate。它是唯一必需的模板。當未指定其它模板時,控件會自動將此 ItemTemplate 用于其它模板。

在以下示例中,ItemTemplate 包含一個 HyperLink Web 控件。此控件的 Text 和 NavigateUrl 屬性被綁定到與每個重復項目相關聯的數據屬性上。這又是使用數據綁定表達式(在創建項目后立即對該表達式求值)完成的。

Repeater1.cs:

namespace Samples {
...

public class Repeater1Page : Page {
protected Repeater linksListRepeater;

public ICollection SiteLinks {
get {
ArrayList sites = new ArrayList();

sites.Add(new SiteInfo("Microsoft Home",
 "http://www.microsoft.com"));
sites.Add(new SiteInfo("MSDN Home",
 "http://msdn.microsoft.com"));
sites.Add(new SiteInfo("MSN Homepage",
 "http://www.msn.com"));
sites.Add(new SiteInfo("Hotmail",
 "http://www.hotmail.com"));
return sites;
}
}

protected override void OnLoad(EventArgs e) {
base.OnLoad(e);

if (!IsPostBack) {
// 首次請求該頁時即對其進行數據綁定 (DataBind)。
// 這將在此頁的控件層次結構中遞歸調用每個控件。
DataBind();
}
}
}

public sealed class SiteInfo {
private string siteName;
private string siteURL;

public SiteInfo(string siteName, string siteURL) {
this.siteName = siteName;
this.siteURL = siteURL;
}

public string SiteName {
get { return siteName; }
}
public string SiteURL {
get { return siteURL; }
}
}
}

此 .cs 文件包含隨前一個列表中的 aspx 頁一起出現的代碼。

Repeater1Page 類覆蓋了 Page 類的 OnLoad 方法。此表示在對該頁的首次請求中調用 DataBind。這將導致對這些頁上的數據綁定表達式求值并使 repeater 控件列舉數據源以及創建其項目。僅在首次請求時調用 DataBind 方法。這之所以能正常工作是因為 repeater 能夠在從前一次保存狀態的回傳過程中重新創建其項目,而無需數據源實例。

此頁將類型 ICollection 的公用屬性顯露出來。這將在設置 repeater 的 DataSource 屬性值的數據綁定表達式中使用。屬性的獲取實現使用包含一組 SiteInfo 對象序列的 ArrayList。此屬性是公用的,因為只有頁類的公用和保護成員可在數據綁定表達式中使用。

每個 SiteInfo 對象有兩個屬性:SiteName 和 SiteURL。當對模板中的 HyperLink 控件進行數據綁定時將訪問這些屬性。在此控件的綁定表達式中,Container.DataItem 表示要將特定項綁定到其上的單個 SiteInfo 對象。DataBinder.Eval(Container.DataItem, "SiteName") 訪問當前 SiteInfo 對象的 SiteName 屬性。

Repeater1 示例向您介紹了幾個基本概念:

定義模板


模板中的數據綁定語法和數據綁定表達式


將 ArrayList 的 ICollection 表示用作數據源


在最初處理頁的過程中調用 DataBind 方法
DataList 控件
DataList 控件是一個模板化控件,它提供使用樣式屬性可視化地格式化其表示的能力。它也可以產生多列布局。圖 3 說明了這兩種特性。



圖 3. 從 DataList 的雙列表示生成的示例

摘自 DataList1.aspx:

<%@ Page language="C#" src="DataList1.cs" inherits="Samples.DataList1Page"%>
...

<asp:DataList runat=server id="peopleDataList"
RepeatColumns="2" RepeatDirection="Vertical" RepeatMode="Table"
Width="100%">

<property name="AlternatingItemStyle">
<asp:TableItemStyle BackColor="#EEEEEE"/>
</property>
<template name="ItemTemplate">
<asp:Panel runat=server font-size="12pt" font-bold="true">
<%# ((Person)Container.DataItem).Name %>
</asp:Panel>
<asp:Label runat=server Width="20px"
BorderStyle="Solid" BorderWidth="1px" BorderColor="Black"
BackColor='<%# ((Person)Container.DataItem).FavoriteColor %>'> 
</asp:Label>
 
<asp:Label runat=server Font-Size="10pt"
Text='<%# GetColorName(((Person)Container.DataItem).FavoriteColor) %>'>
</asp:Label>
</template>
</asp:DataList>

此 .aspx 文件顯示了用來生成此示例的 DataList 的聲明。

在此示例中,DataList 的多列布局是通過將 RepeatColumns 屬性設置為“2”來實現的。將 RepeatDirection 設置為“Vertical”會使項目從上到下、然后從左到右排列。相反,值設置為“Horizontal”會導致項目從左到右、然后從上到下排列。

aspx 語法包含對少數幾種 DataList 的樣式屬性的設置。在此示例中,DataList 的 Width 被設置為其父級的 100%。設置具有灰色背景的 AlternatingItemStyle 是為了獲得帶有條紋的外觀。此示例還說明模板可以包含任意復雜的控件定義,以滿足在每個項目內獲得理想布局的需要。

最后,此模板中的數據綁定表達式通過將 Container.DataItem 轉換為其類型來使用前期綁定。這不會招致與使用 DataBinder.Eval (如 Repeater1 中所示) 相關聯的后期綁定的代價。但是,這種方法可能會產生可讀性較差的表達式。以下示例還給出了一個調用 GetColorName 方法(該方法是在本頁有代碼支持的文件中實現的)的表達式示例。

DataList1.cs:

namespace Samples {
...

public class DataList1Page : Page {
protected DataList peopleDataList;

protected string GetColorName(Color c) {
return
TypeDescriptor.GetConverter(typeof(Color)).ConvertToString(c);
}

private void LoadPeopleList() {
// 創建數據源
Person[] people = new Person[] {
new Person("Nikhil Kothari", Color.Green),
new Person("Steve Millet", Color.Purple),
new Person("Chris Anderson", Color.Blue),
new Person("Mike Pope", Color.Orange),
new Person("Anthony Moore", Color.Yellow),
new Person("Jon Jung", Color.MediumAquamarine),
new Person("Susan Warren", Color.SlateBlue),
new Person("Izzy Gryko", Color.Red)
};

// 設置控件的數據源
peopleDataList.DataSource = people;

// 并使該控件用此數據源構建其項目
peopleDataList.DataBind();
}

protected override void OnLoad(EventArgs e) {
base.OnLoad(e);

if (!IsPostBack) {
// 首次請求此頁
LoadPeopleList();
}
}
}

public sealed class Person {
private string name;
private Color favoriteColor;

public Person(string name, Color favoriteColor) {
 this.name = name;
 this.favoriteColor = favoriteColor;
}

public Color FavoriteColor {
get { return favoriteColor; }
}
public string Name {
get { return name; }
}
}
}

在此頁中,控件的 DataSource 屬性是通過程序設置的,與在 aspx 文件中聲明性地設置相對。兩種方法的結果相同。無法選擇哪種方法,都必須調用 DataBind 方法,以便控件可以列舉其數據源并創建它要表示的項目。

此示例中所用的數據源是 Person 對象的一個簡單數組。由于每個數組都實現 ICollection 方法,所以數組適合用作數據源。這顯示了將數據結構和類型用作數據源時可獲得的靈活程度。

DataList1 示例介紹了下列概念:

在模板中定義豐富的 HTML UI


使用簡單數組作為數據源


通過程序設置數據源


數據綁定語法中所允許的各

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 永仁县| 双流县| 定日县| 峨边| 定陶县| 酉阳| 青川县| 开远市| 香港| 南岸区| 井研县| 香格里拉县| 榆社县| 临江市| 繁昌县| 高雄县| 明水县| 呼图壁县| 宁远县| 大关县| 桐柏县| 房产| 正阳县| 永登县| 黄石市| 化州市| 凌源市| 潞西市| 瓦房店市| 高要市| 夏津县| 通渭县| 平山县| 龙州县| 师宗县| 中宁县| 宁都县| 吉水县| 垦利县| 济宁市| 乾安县|