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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值