天天看點

DataList精髓

使用DataList控件 本章内容:

         1、了解事件冒泡

         2、使用模闆

         3、在DataList中顯示資料

         4、在DataList中建立多列

         5、捕獲DataList控件中産生的事件

         6、選擇DataList中的項

         7、使用DataList控件中的DataKeys集合

         8、編輯DataList中的項

本章介紹在ASP.NET架構中功能最強大的兩個控件(DataList控件和DataGrid控件)之一的DataList控件。我們将深入探讨DataList控件,學習如何使用該控件顯示資料以及編輯資料庫資料。

一、了解事件冒泡

在ASP.NET架構包含三個支援事件冒泡的标準控件:Repeater、DataList和DataGrid控件。這些控件可以讓你捕獲其子控件的時間。當子控件産生一個事件時,事件就“冒泡”傳給包含該子控件的容器控件,并且容器控件就可以執行一個子程式來處理該事件。

二、使用模闆

       在前一章中我們已經介紹過Repeater控件的五個模闆(ItemTemplate、AlternationgItemTemplate、SeparatorTemplate、HeaderTemplate、FooterTemplate),可以格式化控件的輸出。在DataList控件中除了支援Repeater控件中的五個模闆以外,還支援如下兩個模闆:

1、SelectedItemTemplate:控制如何格式化被標明的項

2、EditItemTemplate:控制如何格式化被編輯的項。

當選定DataList中選中一個項時(即DataList的SelectedIndex屬性值為目前標明項的索引值),将顯示SelectedItem模闆,當在DataList中選擇一個項來編輯(即DataList的EditItemIndex屬性值為目前標明項的索引值)時,将顯示EditItem模闆。

三、在DataList中顯示資料:     

       可以像Repeater控件那樣來用DataList顯示資料庫表中的記錄。但是,與Repeater控件不同的是:DataList控件的預設行為是在HTML表格中顯示資料庫記錄。

       如下程式清單示範如何顯示pubs資料庫中authors表中的資料。

<%@ Page Language="C#" %> <%@ Import Namespace="System.Data.SqlClient" %> <script runat="server"> void Page_Load(Object sender, EventArgs e) { SqlConnection conn; SqlCommand cmd; SqlDataReader dr; conn = new SqlConnection("Server=localhost; Database=Pubs;uid=cdd;psw=123"); cmd = new SqlCommand("Select au_fname From authors", conn); conn.Open(); dr = cmdSelect.ExecuteReader(); DataList1.DataSource = dr; DataList1.DataBind(); dr.Close(); conn.Close(); } </script> <html> <head> <title>DataList.aspx</title> </head> <body> <form id="Form1" runat="Server"> <asp:DataList ID="DataList1" runat="Server"> <ItemTemplate> <%#DataBinder.Eval(Container.DataItem, "au_fname" )%> </ItemTemplate> </asp:DataList> </form> </body> </html>      在DataList中顯示記錄時,authors表中每行都顯示在獨立的HTML表格中,隻要你願意,也可以修改其RepeatLayout屬性把DataList的項顯示在HTML的<div></div>中。在預設情況下,RepeatLayout屬性值為Table。如果把RepeatLayout屬性設為Flow,那麼每個項就顯示在<div></div>中。

       <asp:DataList RepeatLayout=”Flow” Runat=”Server”>        當RepeatLayout屬性為Table時,通過設定GridLines屬性可以在每個單元格周圍顯示線條。GridLines屬性可選值有: Both / Horizontal / Vertical

四、在DataList中建立多列        DataList的一個好處的特征是可以以多個列顯示資料現。通過設定其RepeatColumns和RepeatDirection屬性,可以控制DataList的列的布局。        RepeatColumns屬性決定要顯示的列的數量。比如,如果要在DataList中顯示四列的項,那麼可以把這個屬性設為4。        RepeatDirection屬性句頂列是按水準或垂直方向來重複。在預設情況下,RepeatDirection值為Vertical,是以,如果RepeatColumns值為4,則列就像這樣顯示: Column 1    Column3    Column5    Column7

Column 2    Column4    Column6    Column8

如果把RepeatDirection設為Horizontal,而且RepeatColumns值為4,那麼列就像這樣顯示: Column 1    Column3    Column5    Column7 Column 2    Column4    Column6    Column8

注意,即使RepeatDirection值為Vertical,還是顯示為4個列。RepeatColumns永遠是指重複的列的數量,而不是行的數量。

五、捕獲DataList控件中産生的事件

正如第一小節中提到的那樣,DataList控件支援事件冒泡,可以捕獲DataList内包含的控件産生的事件,并且通過普通的子程式處理這些事件。講到這裡有些人可能不太明白事件冒泡的好處所在,這樣,我們反過來思考:如果沒有事件冒泡,那麼對于DataList内包含的每一個控件産生的事件都需要定義一個相應的處理函數,如果DataList中包含10000個控件呢?或者更多呢?那我們得寫多少個事件處理程式。是以有了事件冒泡,不管DataList中包含多少個控件,我們隻需要一個處理程式就可以了。DataList控件支援五個事件:

1)        EditCommand:由帶有CommandName=”edit”的子控件産生

2)        CancelCommand:由帶有CommandName=”cancel”的子控件産生

3)        UpdateCommand:由帶有CommandName=”update”的子控件産生

4)        DeleteCommand:由帶有CommandName=”delete”的子控件産生

5)        ItemCommand:DataList的預設事件

有了這五個事件,那麼當我點選了DataList控件中的某一個按鈕的時候,應該觸發哪一個事件呢?什麼時候才觸發它們呢?在ASP.NET中有三個控件帶有CommandName屬性,分别是Button、LinkButton和ImageButton,可以設定它們的CommandName屬性來表示容器控件内産生的時間類型。比如,如果設定DataList中的一個LinkButton的CommandName屬性為“update”,那麼點選此按鈕的時候,将會觸發DataList的CancelCommand事件,我們可以将相關處理代碼寫到對應的事件處理程式中去。

如下程式清單示範了點選DataList中三個CommandName分别為edit、delete、update的LinkButton按鈕。當點選不同的按鈕時,在DataList中産生不同的事件,執行不同的程式:

<%@ Page Language="C#" %> <%@ Import Namespace="System.Data.SqlClient" %> <script runat="server"> void Page_Load(Object sender, EventArgs e) { if (!IsPostBack) { SqlConnection conn; SqlCommand cmd; SqlDataReader dr; conn = new SqlConnection("Server=localhost; Database=Pubs;uid=cdd;psw=123"); cmd = new SqlCommand("Select au_fname From authors", conn); conn.Open(); dr = cmd.ExecuteReader(); dlstTitles.DataSource = dr; dlstTitles.DataBind(); dr.Close(); conn.Close(); } } void DataList1_ItemCommand(object s, DataListCommandEventArgs e) { lblMessage.Text = "<li>Item Command!"; } void DataList1_EditCommand(object s, DataListCommandEventArgs e) { lblMessage.Text += "<li>Editing Item!"; } void DataList1_DeleteCommand(object s, DataListCommandEventArgs e) { lblMessage.Text = "<li>Deleting Item!"; } void DataList1_UpdateCommand(object s, DataListCommandEventArgs e) { lblMessage.Text = "<li>Updating Item!"; } </script> <html> <head> <title>DataListEvents.aspx</title> </head> <body> <form id="Form1" runat="Server"> <asp:Label ID="lblMessage" BackColor="yellow" runat="Server" /> <p> <asp:DataList ID="DataList1" OnItemCommand="DataList1_ItemCommand" OnEditCommand="DataList1_EditCommand" OnDeleteCommand="DataList1_DeleteCommand" OnUpdateCommand="DataList1_UpdateCommand" GridLines="Both" CellPadding="4" runat="Server"> <ItemTemplate> <%#DataBinder.Eval(Container.DataItem, " au_fname " )%> <br> <asp:LinkButton ID="LinkButton1" Text="Edit!" CommandName="edit" runat="Server" /> <asp:LinkButton ID="LinkButton2" Text="Delete!" CommandName="delete&

文章出處:飛諾網(file:///E:/asp.net筆記/DataList/DataList的使用2.htm)

繼續閱讀