ASP.NET立即上手教程(12)_.Net教程
推薦:ASP.NET立即上手教程(11)訪問(wèn)基于XML的數(shù)據(jù) 在本章的開(kāi)始曾經(jīng)提到,DataSet被設(shè)計(jì)為不依賴于實(shí)際的數(shù)據(jù)源而抽象數(shù)據(jù)。你可以通過(guò)將實(shí)例中的數(shù)據(jù)從SQL改為XML明白這一點(diǎn)。DataSet支持ReadXml方法,它使用FileStream對(duì)
數(shù)據(jù)訪問(wèn)和定制
模板控件介紹
前面幾個(gè)章節(jié)演示的DataGrid控件,對(duì)于許多需要使用類似表格那樣來(lái)展示數(shù)據(jù)的web應(yīng)用程序來(lái)說(shuō)是非常適合的。但許多時(shí)候,需要用更豐富的形式來(lái)顯示數(shù)據(jù)。Asp.net提供了兩個(gè)控件,DataList和Repeater,對(duì)于類似列表的數(shù)據(jù)提供了非常靈活的控制方式。這兩個(gè)控件是基于模板的,所以沒(méi)有自己默認(rèn)的表現(xiàn)。實(shí)施數(shù)據(jù)的方法完全由控件模板的執(zhí)行,該模板描述如何呈現(xiàn)數(shù)據(jù)項(xiàng)目。
類似于DataGrid控件,DataList 和 Repeater支持DataSource屬性,該屬性可以被設(shè)置為任何ICollection, IEnumerable, 或 IListSource類型。DataSource(數(shù)據(jù)源)中的數(shù)據(jù)可以使用DataBind方法來(lái)綁定。數(shù)據(jù)一旦被綁定,每個(gè)數(shù)據(jù)項(xiàng)的格式就可以由模板來(lái)描述。
ItemTemplate 屬性控制數(shù)據(jù)源集合中每個(gè)項(xiàng)目的展現(xiàn)。在ItemTemplate內(nèi)部,你可以定義任意的表達(dá)代碼(HTML 或者其他)。
使用ASP.NET 的數(shù)據(jù)綁定語(yǔ)法,你可以從數(shù)據(jù)綁定中插入值到DataList 或 Repeater控件,就象下面這樣。
| 以下為引用的內(nèi)容: <ASP:Repeater id="MyRepeater" runat="server"> <ItemTemplate> Hello <%# DataBinder.Eval(Container.DataItem, "name") %> ! </ItemTemplate> </ASP:Repeater> |
Container 從名稱空間System.Web.UI.INamingContainer 直接繼承。在這種情況下,Container 解析為一個(gè)System.Web.UI.WebControls.RepeaterItem類型的對(duì)象,他有一個(gè)DataItem屬性。 就像Repeater 重復(fù)數(shù)據(jù)源集合一樣,DataItem 包含該集合中的當(dāng)前項(xiàng)。例如,如果雇員字段對(duì)象的數(shù)據(jù)源被設(shè)定為ArrayList,DataItem 就是雇員類型的。當(dāng)綁定到DataView,DataItem 則是DataRowView類型 。
下面的例子演示了一個(gè)Repeater 控件綁定到DataView (從sql查詢返回)。同時(shí)定義了兩個(gè)模板:HeaderTemplate 和 FooterTemplate ,分別用來(lái)展示列表的開(kāi)頭和結(jié)尾。
Repeater控件用來(lái)重復(fù)數(shù)據(jù)源集合中的數(shù)據(jù),為數(shù)據(jù)源集合中的每一個(gè)項(xiàng)目使用一次ItemTemplate,但是不顯示任何沒(méi)有包含在模板中的元素。相對(duì)于Repeater的重復(fù)數(shù)據(jù), DataList提供了一些額外的功能來(lái)控制列表的布局。與Repeater不同,DataList 使用額外的語(yǔ)法元素,如包含風(fēng)格屬性的表的行、列和跨列等等,在模板定義之外來(lái)豐富外觀的格式。例如,DataList支持RepeatColumns 和 RepeatDirection 屬性,分別用來(lái)指定數(shù)據(jù)是否以多列的樣式顯示,以及優(yōu)先排列的方向(水平或者垂直) DataList 也支持樣式屬性,如下面的代碼:
| 以下為引用的內(nèi)容: <ASP:DataList runat="server" DataSource="<%#MyData%>" RepeatColumns="2" RepeatDirection="Horizontal" ItemStyle-Font-Size="10pt" ItemStyle-Font-Name="Verdana" > ... </ASP:DataList> |
注意:本章的剩余部分集中講解了DataList控件的許多功能。Repeater 空間的更多信息,參考本教材中“web form 控件參考”章節(jié)中的“repeater”主題。
下面的例子演示了DataList控件的用法。注意數(shù)據(jù)項(xiàng)的外觀已經(jīng)和上一個(gè)例子中的有所不同,其實(shí)僅僅改變了一下控件ItemTemplate的屬性。RepeatDirection 和 RepeatColumns屬性決定了ItemTemplates的顯示樣式。
下面的例子更進(jìn)一步演示了通過(guò)改變ItemTemplate來(lái)達(dá)到模板的多姿多彩的變化。這次,DataItem的一個(gè)值使用<img>標(biāo)簽的"src"屬性來(lái)替代。DataBinder.Eval的格式化字符串參數(shù)也在URL查詢字符串中替換了DataItem的值。
處理模板中的返回
如同在DataGrid一樣,你可以從DataList模板激活一條命令,該模板通過(guò)綁定到DataList自身來(lái)傳遞事件句柄。例如,ItemTemplate中的LinkButton可以激活Select命令。通過(guò)設(shè)定DataList的OnSelectedIndexChanged屬性,能夠調(diào)用一個(gè)事件句柄來(lái)響應(yīng)這條命令。請(qǐng)看下面的代碼:
| 以下為引用的內(nèi)容: <ASP:DataList id="MyDataList" OnSelectedIndexChanged="MyDataList_Select" runat="server"> <ItemTemplate> <asp:linkbutton CommandName="Select" runat="server"> <%# DataBinder.Eval(Container.DataItem, "title") %> </asp:linkbutton> </ItemTemplate> </ASP:DataList> |
在MyDataList_Select 事件句柄中,組合了幾個(gè)其他的服務(wù)器控件,來(lái)表述被選中項(xiàng)目的詳細(xì)資料。
注意,當(dāng)DataList辨別一些特定的命令如Select和 Edit/Update/Cancel的時(shí)候,在模板中激活的命令字符串可以是任意的字符串。對(duì)于所有的命令, DataList的OnItemCommand 被激活。就像上面的例子一樣,你可以綁定這個(gè)事件到事件句柄。
| 以下為引用的內(nèi)容: <script runat="server"> protected void MyDataList_ItemCommand(Object sender, DataListCommandEventArgs e) { String command = e.CommandName; switch(command) { case "Discussions": ShowDiscussions((DataRowView)e.Item.DataItem); break; case "Ratings": ShowRatings((DataRowView)e.Item.DataItem); break; } } </script> <ASP:DataList id="MyDataList" OnItemCommand="MyDataList_ItemCommand" runat="server"> <ItemTemplate> <asp:linkbutton CommandName="Ratings" runat="server"> View Ratings </asp:linkbutton> <asp:linkbutton CommandName="Discuss" runat="server"> View Discussions </asp:linkbutton> </ItemTemplate> </ASP:DataList> |
注意,由于不僅一個(gè)命令可以激活這個(gè)事件句柄,所以你必須使用選擇語(yǔ)句來(lái)決定具體的命令。
使用選擇和編輯模板
除了使用頁(yè)面級(jí)的事件句柄來(lái)處理Select命令以外,也可以使用DataList來(lái)內(nèi)部處理這種事件。如果為DataList定義了一個(gè)SelectedItemTemplate,DataList就會(huì)通過(guò)激活Select命令的數(shù)據(jù)項(xiàng)來(lái)實(shí)施這個(gè)模板。下面的例子中使用SelectedItemTemplate來(lái)使被選擇的書(shū)名標(biāo)題字體加粗。
DataList 還支持EditItemTemplate,來(lái)編輯索引值等于DataList的EditItemIndex屬性的項(xiàng)目。關(guān)于編輯和更新工作的細(xì)節(jié)問(wèn)題,參考本教材中“數(shù)據(jù)訪問(wèn)”章的“更新數(shù)據(jù)”主題。
在模板中查找控件
有些時(shí)候,我們很有必要查找包含在模板中的控件。如果在模板中給定了控件的ID號(hào),那么就可以從他的容器(支持InamingContainer的父層中的第一個(gè)控件)中取得他的有關(guān)信息。在這種情況下,容器是DataListItem控件。注意,即使幾個(gè)控件具有相同的ID號(hào)(具有DataList的循環(huán)優(yōu)點(diǎn)),每一個(gè)也是被邏輯的包含在DataListItem容器控件的名稱空間中。
你能夠通過(guò)遍歷DataList的Items集合來(lái)取得DataListItem,然后調(diào)用DataListItem的 FindControl方法(從Control基類繼承而來(lái))取回具有特定ID號(hào)的控件。
| 以下為引用的內(nèi)容: <script runat="server"> public void Page_Load(Object sender, EventArgs E)) { // set datasource and call databind here for (int i=0; i<MyDataList.Items.Count; i ) { String isChecked = ((CheckBox) MyDataList.Items[i].FindControl("Save")).Checked.ToString(); If (isChecked == "True") { ... } } } </script> <ASP:DataList id="MyDataList" runat="server"> <ItemTemplate> <asp:CheckBox id="Save" runat="server"/> <b>Save to Favorites</b> </ItemTemplate> </ASP:DataList> |
下面的例子演示了剛才的技術(shù)。
本章小結(jié)
1、DataList和Repeater提供給開(kāi)發(fā)者微調(diào)數(shù)據(jù)綁定列表的外觀顯示格式。
2、使用模板來(lái)表現(xiàn)綁定數(shù)據(jù)的顯示,例如HeaderTemplate、FooterTemplate、或者ItemTemplate 。
3、Repeater控件是一般目的的重復(fù),他的模板中沒(méi)有的東西,都不會(huì)顯示。
4、DataList 控件對(duì)項(xiàng)目的布局和樣式提供了更多的控制,可以格式化輸出自己的表現(xiàn)代碼。
5、DataList 支持Select, Edit/Update/Cancel,以及 Item Command 事件。通過(guò)綁定事件句柄到DataList的 Command 事件,可以在頁(yè)面級(jí)別處理Item Command。
6、DataList支持SelectedItemTemplate 和 EditItemTemplate 兩個(gè)模板, 用來(lái)控制選定時(shí)的樣式和編輯時(shí)的表現(xiàn)樣式。
7、使用Control.FindControl方法,可以通過(guò)程序來(lái)取得模板中的控件。該方法通過(guò)DataList的項(xiàng)目集合 DataListItem調(diào)用。
分享:ASP.NET立即上手教程(10)在SQL數(shù)據(jù)庫(kù)中更新數(shù)據(jù) 在web應(yīng)用程序中更新數(shù)據(jù)庫(kù)常常是一件棘手的事情。DataGrid控件提供了一些內(nèi)建的支持,使得更新數(shù)據(jù)庫(kù)變得容易。要想編輯行記錄,DataGrid支持一個(gè)整數(shù)類型的EditItemI
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- ASP.Net用MD5和SHA1加密的幾種方法
- 如何用Microsoft Ajax Minifier幫Javascript瘦身
- 解析session簡(jiǎn)要用法實(shí)例
- ASP.NET 2.0高級(jí)數(shù)據(jù)處理之?dāng)?shù)據(jù)綁定
- c#.net函數(shù)列表
- 如何利用ajax.dll進(jìn)行asp.net ajax開(kāi)發(fā)
- Asp.net中使用PageDataSource分頁(yè)實(shí)現(xiàn)代碼
- asp.net ajax 使用updatepanel進(jìn)行更新后的提示
- 在.NET上執(zhí)行多線程操作要考慮的兩大因素
- .NET中 關(guān)于臟讀 不可重復(fù)讀與幻讀的代碼示例
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-ASP.NET立即上手教程(12)
。