ASP.NET立即上手教程(12)_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:ASP.NET立即上手教程(11)
      訪問基于XML的數據 在本章的開始曾經提到,DataSet被設計為不依賴于實際的數據源而抽象數據。你可以通過將實例中的數據從SQL改為XML明白這一點。DataSet支持ReadXml方法,它使用FileStream對

      數據訪問和定制

      模板控件介紹

      前面幾個章節演示的DataGrid控件,對于許多需要使用類似表格那樣來展示數據的web應用程序來說是非常適合的。但許多時候,需要用更豐富的形式來顯示數據。Asp.net提供了兩個控件,DataList和Repeater,對于類似列表的數據提供了非常靈活的控制方式。這兩個控件是基于模板的,所以沒有自己默認的表現。實施數據的方法完全由控件模板的執行,該模板描述如何呈現數據項目。

      類似于DataGrid控件,DataList 和 Repeater支持DataSource屬性,該屬性可以被設置為任何ICollection, IEnumerable, 或 IListSource類型。DataSource(數據源)中的數據可以使用DataBind方法來綁定。數據一旦被綁定,每個數據項的格式就可以由模板來描述。

      ItemTemplate 屬性控制數據源集合中每個項目的展現。在ItemTemplate內部,你可以定義任意的表達代碼(HTML 或者其他)。

      使用ASP.NET 的數據綁定語法,你可以從數據綁定中插入值到DataList 或 Repeater控件,就象下面這樣。

      以下為引用的內容:
      <ASP:Repeater id="MyRepeater" runat="server">
      <ItemTemplate>
      Hello <%# DataBinder.Eval(Container.DataItem, "name") %> !
      </ItemTemplate>
      </ASP:Repeater>

      Container 從名稱空間System.Web.UI.INamingContainer 直接繼承。在這種情況下,Container 解析為一個System.Web.UI.WebControls.RepeaterItem類型的對象,他有一個DataItem屬性。 就像Repeater 重復數據源集合一樣,DataItem 包含該集合中的當前項。例如,如果雇員字段對象的數據源被設定為ArrayList,DataItem 就是雇員類型的。當綁定到DataView,DataItem 則是DataRowView類型 。

      下面的例子演示了一個Repeater 控件綁定到DataView (從sql查詢返回)。同時定義了兩個模板:HeaderTemplate 和 FooterTemplate ,分別用來展示列表的開頭和結尾。

      Repeater控件用來重復數據源集合中的數據,為數據源集合中的每一個項目使用一次ItemTemplate,但是不顯示任何沒有包含在模板中的元素。相對于Repeater的重復數據, DataList提供了一些額外的功能來控制列表的布局。與Repeater不同,DataList 使用額外的語法元素,如包含風格屬性的表的行、列和跨列等等,在模板定義之外來豐富外觀的格式。例如,DataList支持RepeatColumns 和 RepeatDirection 屬性,分別用來指定數據是否以多列的樣式顯示,以及優先排列的方向(水平或者垂直) DataList 也支持樣式屬性,如下面的代碼:

      以下為引用的內容:
      <ASP:DataList runat="server" DataSource="<%#MyData%>"
      RepeatColumns="2"
      RepeatDirection="Horizontal"
      ItemStyle-Font-Size="10pt"
      ItemStyle-Font-Name="Verdana"
      >
      ...
      </ASP:DataList>

      注意:本章的剩余部分集中講解了DataList控件的許多功能。Repeater 空間的更多信息,參考本教材中“web form 控件參考”章節中的“repeater”主題。

      下面的例子演示了DataList控件的用法。注意數據項的外觀已經和上一個例子中的有所不同,其實僅僅改變了一下控件ItemTemplate的屬性。RepeatDirection 和 RepeatColumns屬性決定了ItemTemplates的顯示樣式。

      下面的例子更進一步演示了通過改變ItemTemplate來達到模板的多姿多彩的變化。這次,DataItem的一個值使用<img>標簽的"src"屬性來替代。DataBinder.Eval的格式化字符串參數也在URL查詢字符串中替換了DataItem的值。

      處理模板中的返回

      如同在DataGrid一樣,你可以從DataList模板激活一條命令,該模板通過綁定到DataList自身來傳遞事件句柄。例如,ItemTemplate中的LinkButton可以激活Select命令。通過設定DataList的OnSelectedIndexChanged屬性,能夠調用一個事件句柄來響應這條命令。請看下面的代碼:

      以下為引用的內容:
      <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 事件句柄中,組合了幾個其他的服務器控件,來表述被選中項目的詳細資料。

      注意,當DataList辨別一些特定的命令如Select和 Edit/Update/Cancel的時候,在模板中激活的命令字符串可以是任意的字符串。對于所有的命令, DataList的OnItemCommand 被激活。就像上面的例子一樣,你可以綁定這個事件到事件句柄。

      以下為引用的內容:
      <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>

      注意,由于不僅一個命令可以激活這個事件句柄,所以你必須使用選擇語句來決定具體的命令。

      使用選擇和編輯模板

      除了使用頁面級的事件句柄來處理Select命令以外,也可以使用DataList來內部處理這種事件。如果為DataList定義了一個SelectedItemTemplate,DataList就會通過激活Select命令的數據項來實施這個模板。下面的例子中使用SelectedItemTemplate來使被選擇的書名標題字體加粗。

      DataList 還支持EditItemTemplate,來編輯索引值等于DataList的EditItemIndex屬性的項目。關于編輯和更新工作的細節問題,參考本教材中“數據訪問”章的“更新數據”主題。

      在模板中查找控件

      有些時候,我們很有必要查找包含在模板中的控件。如果在模板中給定了控件的ID號,那么就可以從他的容器(支持InamingContainer的父層中的第一個控件)中取得他的有關信息。在這種情況下,容器是DataListItem控件。注意,即使幾個控件具有相同的ID號(具有DataList的循環優點),每一個也是被邏輯的包含在DataListItem容器控件的名稱空間中。

      你能夠通過遍歷DataList的Items集合來取得DataListItem,然后調用DataListItem的 FindControl方法(從Control基類繼承而來)取回具有特定ID號的控件。

      以下為引用的內容:
      <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>

      下面的例子演示了剛才的技術。

      本章小結
      1、DataList和Repeater提供給開發者微調數據綁定列表的外觀顯示格式。

      2、使用模板來表現綁定數據的顯示,例如HeaderTemplate、FooterTemplate、或者ItemTemplate 。

      3、Repeater控件是一般目的的重復,他的模板中沒有的東西,都不會顯示。

      4、DataList 控件對項目的布局和樣式提供了更多的控制,可以格式化輸出自己的表現代碼。

      5、DataList 支持Select, Edit/Update/Cancel,以及 Item Command 事件。通過綁定事件句柄到DataList的 Command 事件,可以在頁面級別處理Item Command。

      6、DataList支持SelectedItemTemplate 和 EditItemTemplate 兩個模板, 用來控制選定時的樣式和編輯時的表現樣式。

      7、使用Control.FindControl方法,可以通過程序來取得模板中的控件。該方法通過DataList的項目集合 DataListItem調用。

      分享:ASP.NET立即上手教程(10)
      在SQL數據庫中更新數據 在web應用程序中更新數據庫常常是一件棘手的事情。DataGrid控件提供了一些內建的支持,使得更新數據庫變得容易。要想編輯行記錄,DataGrid支持一個整數類型的EditItemI

      來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
      相關.Net教程