ASP.NET 2.0中实现模板中的数据绑定
生活随笔
收集整理的這篇文章主要介紹了
ASP.NET 2.0中实现模板中的数据绑定
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
模板化的數(shù)據(jù)綁定控件為我們?cè)陧?yè)面上顯示數(shù)據(jù)提供了根本的靈活性。你可能還記得ASP.NET?v1.x中的幾個(gè)模板化控件(例如DataList和Repeater控件)。ASP.NET?2.0仍然支持這些控件,但在模板中綁定數(shù)據(jù)的語(yǔ)法已經(jīng)被簡(jiǎn)化和改善了。本文將討論在數(shù)據(jù)綁定控件模板中綁定數(shù)據(jù)的多種方法。
數(shù)據(jù)綁定表達(dá)式
ASP.NET?2.0改善了模板中的數(shù)據(jù)綁定操作,把v1.x中的數(shù)據(jù)綁定語(yǔ)法DataBinder.Eval(Container.DataItem,?fieldname)簡(jiǎn)化為Eval(fieldname)。Eval方法與DataBinder.Eval一樣可以接受一個(gè)可選的格式化字符串參數(shù)。縮短的Eval語(yǔ)法與DataBinder.Eval的不同點(diǎn)在于,Eval會(huì)根據(jù)最近的容器對(duì)象(例如DataListItem)的DataItem屬性來(lái)自動(dòng)地解析字段,而DataBinder.Eval需要使用參數(shù)來(lái)指定容器。由于這個(gè)原因,Eval只能在數(shù)據(jù)綁定控件的模板中使用,而不能用于Page(頁(yè)面)層。當(dāng)然,ASP.NET?2.0頁(yè)面中仍然支持DataBinder.Eval,你可以在不支持簡(jiǎn)化的Eval語(yǔ)法的環(huán)境中使用它。
下面的例子演示了如何使用新的簡(jiǎn)化的Eval數(shù)據(jù)綁定語(yǔ)法綁定到DataList數(shù)據(jù)項(xiàng)模板(ItemTemplate)中的Image、Label和HyperLink控件。
<asp:DataList?ID="DataList1"?RepeatColumns="5"?Width="600"?runat="server"?DataSourceID="ObjectDataSource1">
<ItemTemplate>
<asp:HyperLink?ID="HyperLink1"?runat="server"?NavigateUrl=''<%#?Eval("PhotoID",?"PhotoFormViewPlain.aspx?ID={0}")?%>''>
<asp:Image?ID="Image1"?Runat="server"?ImageUrl=''<%#?Eval("FileName",?"images/thumbs/{0}")?%>''?/></asp:HyperLink>
<asp:Label?ID="CaptionLabel"?runat="server"?Text=''<%#?Eval("Caption")?%>''?/>
</ItemTemplate>
</asp:DataList><br?/>
<asp:ObjectDataSource?ID="ObjectDataSource1"?runat="server"?TypeName="DataComponentTableAdapters.PhotosTableAdapter"?SelectMethod="GetPhotosForAlbum">?
數(shù)據(jù)綁定也可以作為控件的主題定義(theme?definition)的一部分,這樣我們就可以通過(guò)改變主題來(lái)隨意地改變模板化控件的布局和外觀。但是Theme(主題)模板中只能使用Eval(或者后面討論的Bind)。綁定到任意的用戶代碼是被禁止的。?
FormView控件
DataList控件在來(lái)自數(shù)據(jù)源的數(shù)據(jù)項(xiàng)中進(jìn)行迭代操作,并為每個(gè)數(shù)據(jù)項(xiàng)輸出ItemTemplate(數(shù)據(jù)項(xiàng)模板)。這對(duì)于顯示數(shù)據(jù)項(xiàng)列表是有用的,但是通常情況下,你希望在一個(gè)窗體中實(shí)現(xiàn)單條數(shù)據(jù)項(xiàng)的綁定操作。為了實(shí)現(xiàn)這個(gè)目的,ASP.NET?2.0引入了FormView控件,它能夠在任意的模板中每次顯示一個(gè)數(shù)據(jù)項(xiàng)。DetailsView和FormView之間的主要差異在于,DetailsView擁有內(nèi)建的表格顯示方式,而FormView需要使用用戶自定義的顯示模板。在其它方面FormView和DetailsView對(duì)象模型是非常相似的。下面的例子顯示了一個(gè)綁定到ObjectDataSource的FormView控件。該FormView的ItemTemplate屬性包含數(shù)據(jù)綁定的Image、Label和HyperLink控件,與前面的DataList示例類似。
<asp:FormView?ID="FormView1"?runat="server"?DataSourceID="ObjectDataSource1">
<ItemTemplate>
<asp:Label?ID="CaptionLabel"?runat="server"?Text=''<%#?Eval("Caption")?%>''?Font-Size="32pt"?/><br?/>
<asp:Image?ID="Image1"?runat="server"?ImageUrl=''<%#?Eval("FileName",?"images/{0}")?%>''?/>
<asp:HyperLink?ID="HyperLink1"?Text="Back?to?Album"?NavigateUrl=''<%#?Eval("AlbumID",?"PhotosDataList.aspx?ID={0}")?%>''?runat="server"?/>
</ItemTemplate>
</asp:FormView>
<asp:ObjectDataSource?ID="ObjectDataSource1"?runat="server"?TypeName="DataComponentTableAdapters.PhotosTableAdapter"?SelectMethod="GetPhoto">
<SelectParameters>
<asp:QueryStringParameter?Name="PhotoID"?DefaultValue="9"?QueryStringField="ID"?/>
</SelectParameters>
</asp:ObjectDataSource>?
FormView與DetailsView類似,也跟蹤當(dāng)前顯示的數(shù)據(jù)項(xiàng),但是當(dāng)數(shù)據(jù)源返回列表的時(shí)候,我們也可以選擇支持多個(gè)數(shù)據(jù)項(xiàng)的分頁(yè)操作。下面的例子顯示了一個(gè)帶有分頁(yè)功能的FormView。
<asp:FormView?ID="FormView1"?Runat="server"?DataSourceID="SqlDataSource1"
HeaderText="Books?for?Author"?AllowPaging="True">
<ItemTemplate>
<asp:Image?ID="Image1"?ImageUrl=''<%#?Eval("title_id","~/Images/{0}.gif")?%>''?Runat="server"?/>
<asp:Label?ID="Label1"?Font-Size="1.2em"?Font-Bold="true"?Text=''<%#?Eval("title")?%>''?runat="server"?/>
<asp:Label?ID="Label2"?Text=''<%#?Eval("price","{0:c}")?%>''?runat="server"?/>
</ItemTemplate>
</asp:FormView>
數(shù)據(jù)綁定表達(dá)式
ASP.NET?2.0改善了模板中的數(shù)據(jù)綁定操作,把v1.x中的數(shù)據(jù)綁定語(yǔ)法DataBinder.Eval(Container.DataItem,?fieldname)簡(jiǎn)化為Eval(fieldname)。Eval方法與DataBinder.Eval一樣可以接受一個(gè)可選的格式化字符串參數(shù)。縮短的Eval語(yǔ)法與DataBinder.Eval的不同點(diǎn)在于,Eval會(huì)根據(jù)最近的容器對(duì)象(例如DataListItem)的DataItem屬性來(lái)自動(dòng)地解析字段,而DataBinder.Eval需要使用參數(shù)來(lái)指定容器。由于這個(gè)原因,Eval只能在數(shù)據(jù)綁定控件的模板中使用,而不能用于Page(頁(yè)面)層。當(dāng)然,ASP.NET?2.0頁(yè)面中仍然支持DataBinder.Eval,你可以在不支持簡(jiǎn)化的Eval語(yǔ)法的環(huán)境中使用它。
下面的例子演示了如何使用新的簡(jiǎn)化的Eval數(shù)據(jù)綁定語(yǔ)法綁定到DataList數(shù)據(jù)項(xiàng)模板(ItemTemplate)中的Image、Label和HyperLink控件。
<asp:DataList?ID="DataList1"?RepeatColumns="5"?Width="600"?runat="server"?DataSourceID="ObjectDataSource1">
<ItemTemplate>
<asp:HyperLink?ID="HyperLink1"?runat="server"?NavigateUrl=''<%#?Eval("PhotoID",?"PhotoFormViewPlain.aspx?ID={0}")?%>''>
<asp:Image?ID="Image1"?Runat="server"?ImageUrl=''<%#?Eval("FileName",?"images/thumbs/{0}")?%>''?/></asp:HyperLink>
<asp:Label?ID="CaptionLabel"?runat="server"?Text=''<%#?Eval("Caption")?%>''?/>
</ItemTemplate>
</asp:DataList><br?/>
<asp:ObjectDataSource?ID="ObjectDataSource1"?runat="server"?TypeName="DataComponentTableAdapters.PhotosTableAdapter"?SelectMethod="GetPhotosForAlbum">?
數(shù)據(jù)綁定也可以作為控件的主題定義(theme?definition)的一部分,這樣我們就可以通過(guò)改變主題來(lái)隨意地改變模板化控件的布局和外觀。但是Theme(主題)模板中只能使用Eval(或者后面討論的Bind)。綁定到任意的用戶代碼是被禁止的。?
FormView控件
DataList控件在來(lái)自數(shù)據(jù)源的數(shù)據(jù)項(xiàng)中進(jìn)行迭代操作,并為每個(gè)數(shù)據(jù)項(xiàng)輸出ItemTemplate(數(shù)據(jù)項(xiàng)模板)。這對(duì)于顯示數(shù)據(jù)項(xiàng)列表是有用的,但是通常情況下,你希望在一個(gè)窗體中實(shí)現(xiàn)單條數(shù)據(jù)項(xiàng)的綁定操作。為了實(shí)現(xiàn)這個(gè)目的,ASP.NET?2.0引入了FormView控件,它能夠在任意的模板中每次顯示一個(gè)數(shù)據(jù)項(xiàng)。DetailsView和FormView之間的主要差異在于,DetailsView擁有內(nèi)建的表格顯示方式,而FormView需要使用用戶自定義的顯示模板。在其它方面FormView和DetailsView對(duì)象模型是非常相似的。下面的例子顯示了一個(gè)綁定到ObjectDataSource的FormView控件。該FormView的ItemTemplate屬性包含數(shù)據(jù)綁定的Image、Label和HyperLink控件,與前面的DataList示例類似。
<asp:FormView?ID="FormView1"?runat="server"?DataSourceID="ObjectDataSource1">
<ItemTemplate>
<asp:Label?ID="CaptionLabel"?runat="server"?Text=''<%#?Eval("Caption")?%>''?Font-Size="32pt"?/><br?/>
<asp:Image?ID="Image1"?runat="server"?ImageUrl=''<%#?Eval("FileName",?"images/{0}")?%>''?/>
<asp:HyperLink?ID="HyperLink1"?Text="Back?to?Album"?NavigateUrl=''<%#?Eval("AlbumID",?"PhotosDataList.aspx?ID={0}")?%>''?runat="server"?/>
</ItemTemplate>
</asp:FormView>
<asp:ObjectDataSource?ID="ObjectDataSource1"?runat="server"?TypeName="DataComponentTableAdapters.PhotosTableAdapter"?SelectMethod="GetPhoto">
<SelectParameters>
<asp:QueryStringParameter?Name="PhotoID"?DefaultValue="9"?QueryStringField="ID"?/>
</SelectParameters>
</asp:ObjectDataSource>?
FormView與DetailsView類似,也跟蹤當(dāng)前顯示的數(shù)據(jù)項(xiàng),但是當(dāng)數(shù)據(jù)源返回列表的時(shí)候,我們也可以選擇支持多個(gè)數(shù)據(jù)項(xiàng)的分頁(yè)操作。下面的例子顯示了一個(gè)帶有分頁(yè)功能的FormView。
<asp:FormView?ID="FormView1"?Runat="server"?DataSourceID="SqlDataSource1"
HeaderText="Books?for?Author"?AllowPaging="True">
<ItemTemplate>
<asp:Image?ID="Image1"?ImageUrl=''<%#?Eval("title_id","~/Images/{0}.gif")?%>''?Runat="server"?/>
<asp:Label?ID="Label1"?Font-Size="1.2em"?Font-Bold="true"?Text=''<%#?Eval("title")?%>''?runat="server"?/>
<asp:Label?ID="Label2"?Text=''<%#?Eval("price","{0:c}")?%>''?runat="server"?/>
</ItemTemplate>
</asp:FormView>
總結(jié)
以上是生活随笔為你收集整理的ASP.NET 2.0中实现模板中的数据绑定的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: bat 存储过程返回值_使用Mybati
- 下一篇: asp.net ajax控件工具集 Au