亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET 2.0中實現模板中的數據綁定

2024-07-10 13:13:15
字體:
來源:轉載
供稿:網友
模板化的數據綁定控件為我們在頁面上顯示數據提供了根本的靈活性。你可能還記得ASP.NET v1.x中的幾個模板化控件(例如DataList和Repeater控件)。ASP.NET 2.0仍然支持這些控件,但在模板中綁定數據的語法已經被簡化和改善了。本文將討論在數據綁定控件模板中綁定數據的多種方法。

  數據綁定表達式

  ASP.NET 2.0改善了模板中的數據綁定操作,把v1.x中的數據綁定語法DataBinder.Eval(Container.DataItem, fieldname)簡化為Eval(fieldname)。Eval方法與DataBinder.Eval一樣可以接受一個可選的格式化字符串參數??s短的Eval語法與DataBinder.Eval的不同點在于,Eval會根據最近的容器對象(例如DataListItem)的DataItem屬性來自動地解析字段,而DataBinder.Eval需要使用參數來指定容器。由于這個原因,Eval只能在數據綁定控件的模板中使用,而不能用于Page(頁面)層。當然,ASP.NET 2.0頁面中仍然支持DataBinder.Eval,你可以在不支持簡化的Eval語法的環境中使用它。

  下面的例子演示了如何使用新的簡化的Eval數據綁定語法綁定到DataList數據項模板(ItemTemplate)中的Image、Label和HyperLink控件。

<asp:DataList ID="DataList1" RepeatColumns="5" Width="600" runat="server" DataSourceID="ObjectDataSource1">
?。糏temTemplate>
  <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl=''<%# Eval("PhotoID", "PhotoFormViewPlain.aspx?ID={0}") %>''>
 ?。糰sp:Image ID="Image1" Runat="server" ImageUrl=''<%# Eval("FileName", "images/thumbs/{0}") %>'' /></asp:HyperLink>
 ?。糰sp:Label ID="CaptionLabel" runat="server" Text=''<%# Eval("Caption") %>'' />
?。?ItemTemplate>
</asp:DataList><br />
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="DataComponentTableAdapters.PhotosTableAdapter" SelectMethod="GetPhotosForAlbum">

  數據綁定也可以作為控件的主題定義(theme definition)的一部分,這樣我們就可以通過改變主題來隨意地改變模板化控件的布局和外觀。但是Theme(主題)模板中只能使用Eval(或者后面討論的Bind)。綁定到任意的用戶代碼是被禁止的。

  FormView控件

  DataList控件在來自數據源的數據項中進行迭代操作,并為每個數據項輸出ItemTemplate(數據項模板)。這對于顯示數據項列表是有用的,但是通常情況下,你希望在一個窗體中實現單條數據項的綁定操作。為了實現這個目的,ASP.NET 2.0引入了FormView控件,它能夠在任意的模板中每次顯示一個數據項。DetailsView和FormView之間的主要差異在于,DetailsView擁有內建的表格顯示方式,而FormView需要使用用戶自定義的顯示模板。在其它方面FormView和DetailsView對象模型是非常相似的。下面的例子顯示了一個綁定到ObjectDataSource的FormView控件。該FormView的ItemTemplate屬性包含數據綁定的Image、Label和HyperLink控件,與前面的DataList示例類似。

<asp:FormView ID="FormView1" runat="server" DataSourceID="ObjectDataSource1">
?。糏temTemplate>
 ?。糰sp:Label ID="CaptionLabel" runat="server" Text=''<%# Eval("Caption") %>'' Font-Size="32pt" /><br />
 ?。糰sp: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類似,也跟蹤當前顯示的數據項,但是當數據源返回列表的時候,我們也可以選擇支持多個數據項的分頁操作。下面的例子顯示了一個帶有分頁功能的FormView。

<asp:FormView ID="FormView1" Runat="server" DataSourceID="SqlDataSource1"
HeaderText="Books for Author" AllowPaging="True">
?。糏temTemplate>
 ?。糰sp:Image ID="Image1" ImageUrl=''<%# Eval("title_id","~/Images/{0}.gif") %>'' Runat="server" />
 ?。糰sp: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>
<asp:SqlDataSource ID="SqlDataSource1" Runat="server" SelectCommand="SELECT dbo.authors.au_id, dbo.titles.title_id, dbo.titles.title, dbo.titles.type, dbo.titles.price, dbo.titles.notes FROM dbo.authors INNER JOIN dbo.titleauthor ON dbo.authors.au_id = dbo.titleauthor.au_id INNER JOIN dbo.titles ON dbo.titleauthor.title_id = dbo.titles.title_id WHERE (dbo.authors.au_id = @au_id)"
ConnectionString="<%$ ConnectionStrings:Pubs %>">
<SelectParameters>
<asp:QueryStringParameter Name="au_id" DefaultValue="213-46-8915" QueryStringField="ID" />
</SelectParameters>
</asp:SqlDataSource>



  雙向數據綁定

  FormView可以通過相關的數據源控件支持自動地更新、插入和刪除操作(與DetailsView類似)。如果要定義編輯或插入的UI,那么除了定義數據項模板(ItemTemplate)之外,你還要定義EditItemTemplate或InsertItemTemplate模板。在這個模板中,你可以把輸入控件(例如文本框、檢查框或下拉列表)綁定到數據源的字段。這些模板中的數據綁定使用了"雙向"數據綁定語法,允許FormView從模板的輸入控件中提取值并傳遞給數據源。這些數據綁定操作用新的Bind(fieldname)語法代替了Eval。

  請注意:使用Bind語法的數據綁定控件必須設置好ID屬性。

  GridView或DetailsView執行更新或插入操作的時候(這些控件的Columns或Fields都會定義BoundFields,綁定字段),GridView或 DetailsView負責建立編輯或插入模式中的輸入UI,因此它能夠自動地提取這些值并把它們傳遞給數據源。由于模板包含了任意的用戶自定義UI控件,雙向數據綁定語法就是必要的,以確保模板化控件(例如FormView)在應對更新、插入或刪除操作的時候,知道應該從模板中提取那些控件的值。你仍然可以在EditItemTemplate中使用Eval語句進行數據綁定,來給數據源傳遞值。請注意,FormView與DetailsView和GridView一樣支持DataKeyNames屬性,它保存了傳遞給更新/刪除操作的主鍵字典的原始值,即使這些值沒有顯示出來。

  FormView支持DefaultMode屬性,它可以指定默認顯示的模板,但在默認情況下FormView處于只讀模式并顯示ItemTemplate模板。為了把UI從只讀模式轉換為編輯或插入模式,你可以給模板添加一個按鈕控件,把該按鈕的CommandName屬性設置為Edit或New。在EditItemTemplate模板中,你可以增加按鈕,把CommandName設置為Update或Cancel以提交或終止更新操作。類似的,你可以增加按鈕,把CommandName設置為Insert或Cancel來提交或終止插入操作。

  下面的例子演示了定義了ItemTemplate和EditItemTemplate模板的FormView。其中的ItemTemplate模板包含了使用Eval(雙向)綁定的控件,而EditItemTemplate模板則包含了使用Bind語句進行雙向綁定的文本框控件。主鍵字段(PhotoID)是使用DataKeyNames屬性存放在viewstate中的。該FormView包含了用于在模板之間進行切換的按鈕。

<asp:FormView ID="FormView1" runat="server" DataSourceID="ObjectDataSource1" DataKeyNames="PhotoID">
<EditItemTemplate>
?。糱>Enter a New Caption:</b>
?。糰sp:TextBox Text=''<%# Bind("Caption") %>'' runat="server" ID="CaptionTextBox" /> <asp:Button ID="Button1" runat="server" Text="Update" CommandName="Update" />
?。糰sp:Button ID="Button2" runat="server" Text="Cancel" CommandName="Cancel" />
</EditItemTemplate>
<ItemTemplate>
 <asp:Label ID="CaptionLabel" runat="server" Text=''<%# Eval("Caption") %>'' Font-Size="32pt" /><br />
?。糰sp:Image ID="Image1" runat="server" ImageUrl=''<%# Eval("FileName", "images/{0}") %>'' /> <br />
 <asp:Button ID="Button3" runat="server" Text="Edit Caption..." CommandName="Edit" /> <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" UpdateMethod="UpdateCaption" OldValuesParameterFormatString="original_{0}">
?。糢pdateParameters>
  <asp:Parameter Name="Caption" />
 ?。糰sp:Parameter Name="Original_PhotoID" />
 </UpdateParameters>
<SelectParameters>
<asp:QueryStringParameter Name="PhotoID" DefaultValue="9" QueryStringField="ID" />
</SelectParameters>
</asp:ObjectDataSource>

  GridView和DetailsView還支持模板化UI,它是通過給Columns或Fields集合增加TemplateField來實現的。TemplateField支持使用ItemTemplate、EditItemTemplate和InsertItemTemplate(DetailsView才有)為控件的不同顯示模式中的字段指定UI。與上面的FormView示例類似,EditItemTemplate或InsertItemTemplate中的雙向數據綁定也允許GridView或DetailsView從這些模板的控件中提取值。TemplateField最常見的用途是給EditItemTemplate增加驗證器控件,用于公開地驗證GridView或DetailsView操作。下面的例子演示了這種技術。


……
<asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1" AutoGenerateColumns="False" AllowPaging="True" AllowSorting="True" DataKeyNames="AlbumID">
 <Columns>
 ?。糰sp:CommandField ShowEditButton="True" />
  <asp:BoundField ReadOnly="True" HeaderText="AlbumID" DataField="AlbumID" SortExpression="AlbumID" />
 ?。糰sp:TemplateField HeaderText="AlbumName" SortExpression="AlbumName" ItemStyle-Wrap="false">
  ?。糏temTemplate>
   ?。糰sp:Label ID="Label1" runat="server" Text=''<%# Eval("AlbumName") %>''></asp:Label>
   </ItemTemplate>
  ?。糆ditItemTemplate>
   ?。糰sp:TextBox ID="TextBox1" runat="server" Text=''<%# Bind("AlbumName") %>''></asp:TextBox>
    <asp:RequiredFieldValidator ControlToValidate="TextBox1" ErrorMessage="AlbumName cannot be empty" ID="RequiredFieldValidator1" Display="Dynamic" runat="server">*</asp:RequiredFieldValidator>
  ?。?EditItemTemplate>
  </asp:TemplateField>
  ……
 ?。?asp:GridView><br />
  <asp:ValidationSummary ID="ValidationSummary1" runat="server" />
 ?。糰sp:ObjectDataSource ID="ObjectDataSource1" runat="server" ConvertNullToDBNull="true"
TypeName="DataComponentTableAdapters.AlbumsTableAdapter" SelectMethod="GetAlbumsByOwner" UpdateMethod="Update" OldValuesParameterFormatString="original_{0}">
  ……
</asp:ObjectDataSource>

  TemplateField的另外一種用途是定制給GridView或DetailsView列/字段輸入值的控件。例如,你可以在TemplateField的EditItemTemplate中放置一個DropDownList,允許用戶從預定義的值列表中選擇。下面的例子演示了這種技術。請注意,示例中的下拉列表綁定到了自己的數據源控件,以動態地獲取列表值。

<asp:TemplateField HeaderText="Owner" SortExpression="Owner">
?。糏temTemplate>
  <asp:Label ID="Label2" runat="server" Text=''<%# Eval("Owner") %>''></asp:Label>
?。?ItemTemplate>
?。糆ditItemTemplate>
 ?。糰sp:DropDownList DataSourceID="ObjectDataSource2" DataTextField="Owner" DataValueField="Owner" ID="DropDownList2" runat="server" SelectedValue=''<%# Bind("Owner") %>''>
  </asp:DropDownList>
?。?EditItemTemplate>
 <ItemStyle Wrap="False" />
</asp:TemplateField> 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美专区国产专区| 欧美日韩在线视频一区二区| 91网站在线免费观看| 国产精品综合久久久| 日韩中文字幕免费| 国产精品∨欧美精品v日韩精品| 91成人性视频| 欧美日韩国产中文精品字幕自在自线| 欧美日韩国产区| 97免费中文视频在线观看| 国产一区二区成人| 国产精品久久久久久久久久ktv| 国产性色av一区二区| 成人黄色av网| 高清亚洲成在人网站天堂| 久久精品国产2020观看福利| 国产一区二区在线免费视频| 欧美一区亚洲一区| 福利一区视频在线观看| 国产自产女人91一区在线观看| 亚洲a在线观看| 久久天天躁狠狠躁夜夜躁2014| 欧美一区三区三区高中清蜜桃| 日韩在线视频免费观看| 亚洲一区二区三区香蕉| 国产精品情侣自拍| 欧美大尺度激情区在线播放| 91产国在线观看动作片喷水| 色偷偷亚洲男人天堂| 伊人一区二区三区久久精品| 97av在线播放| 亚洲精品不卡在线| 欧美色视频日本高清在线观看| 欧美成人在线免费| 亚洲欧美变态国产另类| 91免费在线视频网站| 成人在线免费观看视视频| 精品久久久中文| 综合国产在线观看| 欧美成人免费视频| 国语自产精品视频在线看抢先版图片| 欧美性猛交xxxx乱大交极品| 亚洲午夜av久久乱码| 成人在线视频福利| 国产女精品视频网站免费| 国产有码一区二区| 97超级碰碰碰久久久| 日韩成人中文字幕| 狠狠色狠狠色综合日日小说| 亚洲成av人影院在线观看| 精品无码久久久久久国产| 国产精品亚洲激情| 都市激情亚洲色图| 538国产精品一区二区在线| 亚洲激情在线观看视频免费| 国产成人av在线播放| 日韩欧美大尺度| 欧美日韩在线观看视频小说| 国产欧美精品日韩| 国产suv精品一区二区三区88区| 久久久久久高潮国产精品视| 欧美人与性动交| 丰满岳妇乱一区二区三区| 精品久久香蕉国产线看观看亚洲| 亚洲视频视频在线| 91精品国产自产在线老师啪| 国产v综合ⅴ日韩v欧美大片| 欧美性猛交xxx| 中日韩美女免费视频网址在线观看| 欧美性猛交xxxxx免费看| 久久精品夜夜夜夜夜久久| 成人av资源在线播放| 国产91精品久久久久久久| 精品亚洲国产成av人片传媒| 欧美一级视频一区二区| 国产成人97精品免费看片| 久久影视电视剧免费网站清宫辞电视| 日韩av网站在线| 日韩专区中文字幕| 中文字幕精品久久久久| 欲色天天网综合久久| 亚洲人成伊人成综合网久久久| 亚洲第一视频网站| 亚洲国产精品美女| 精品欧美激情精品一区| 97视频在线观看亚洲| 国产免费一区二区三区在线观看| 亚洲自拍偷拍色图| 成人欧美一区二区三区在线湿哒哒| 91在线高清视频| 国产亚洲欧洲高清| 国产日韩亚洲欧美| 久久久欧美精品| 国产丝袜高跟一区| 青草热久免费精品视频| 中文字幕国产亚洲2019| 国产成人精品久久二区二区| 亚洲人成毛片在线播放| 91精品国产高清久久久久久久久| 欧美精品999| 亚洲视频日韩精品| 国产精品国语对白| 国产精品自拍小视频| 精品国偷自产在线视频99| 精品女同一区二区三区在线播放| 久久久久久综合网天天| 欧美精品电影在线| 久久久久久久久久亚洲| 欧美日韩精品在线播放| 国内精品国产三级国产在线专| 亚洲成年网站在线观看| 亚洲人成绝费网站色www| 欧美日韩在线第一页| 日韩美女av在线免费观看| 日韩av大片在线| 日韩美女av在线| 高跟丝袜一区二区三区| 欧美激情videoshd| 亚洲综合日韩中文字幕v在线| 亚洲天堂av在线播放| 国产日产欧美a一级在线| 在线精品国产欧美| 黑人欧美xxxx| 久久亚洲国产精品| 亚洲大胆人体av| 精品福利在线看| 国产日韩中文字幕| 中文字幕日韩av| 色婷婷综合成人| 91在线直播亚洲| 亚洲mm色国产网站| 日韩av高清不卡| 国产日韩在线精品av| 欧美中文字幕视频| 欧美特黄级在线| 国语自产精品视频在线看一大j8| 91丝袜美腿美女视频网站| 91国语精品自产拍在线观看性色| 亚洲激情电影中文字幕| 国产成人精品免高潮在线观看| 国自在线精品视频| 国产91对白在线播放| 国产日韩中文字幕| 国产亚洲一区二区在线| 久久人人爽人人爽爽久久| 国产成人精品一区二区| 亚洲图片欧洲图片av| 自拍偷拍亚洲区| 国产精品白丝jk喷水视频一区| 亚洲成人中文字幕| 亚洲永久在线观看| 久久久综合免费视频| 精品动漫一区二区| 日韩精品视频在线观看免费| 午夜美女久久久久爽久久| 久久精品视频导航| www.欧美三级电影.com| 不卡av电影院| 日韩中文字幕在线看| 亚洲第一区在线观看| 亚洲第一精品夜夜躁人人躁| 国产精品流白浆视频| 国产精品丝袜白浆摸在线| 欧美大荫蒂xxx|