asp+|控制項 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控制項是一個樣板化控制項,它提供使用樣式屬性可視化地格式
化其表示的能力。它也可以產生多欄版面配置。
摘自 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%。設定具灰色背景的Alternating
ItemStyle是為了獲得帶有條紋的外觀。此樣本還說明模板可以包含任意
複雜的控制項定義,以滿足在每個項目內獲得理想布局的需要。
最後此模板中的資料繫結運算式通過將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)).Convert
ToString(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();