ASP.NET用Repeater控件显示数据

Repeater控件

 

 

 

 

 

 

 

 

 

 

5.3 重复控件Repeater和数据列表控件DataList 

精通基于ASP.NET 2.0的Web 2.0应用

http://book.csdn.net/ 2007-7-6 18:01:00

5.3  重复控件Repeater和数据列表控件DataList

本节介绍ASP.NET中两个数据迭代控件:Repeater和DataList控件。其中,Repeater控件又被称为重复控件;DataList控件又被称为数据列表控件。它们都可以以表格形式显示数据。

5.3.1  Repeater控件概述

Repeater控件是一个数据容器控件,它能够以表格形式显示数据源的数据。若该控件的数据源为空,则什么都不显示。该控件允许用户创建自定义列,并且还能够为这些列提供布局,然而,Repeater控件本身不提供内置呈现功能。若该控件需要呈现数据,则必须为其提供相应的布局。Repeater控件的属性如表5-12所示。

表5-12                                                       Repeater控件的属性

属    性

描    述

DataSource

数据源

DataSourceID

数据源控件的ID属性,控件从该数据源控件检索数据

DataMember

DataSource属性中要绑定到控件的数据成员

Items

RepeaterItem对象的集合

Controls

子控件集合

EnableTheming

是否应用主题

Repeater控件可以通过DataSourceID、DataSource或DataMember属性来设置其数据源。其中,DataSourceID属性为数据源控件的ID属性值。若Repeater控件使用数据源控件提供数据,它不需要显示绑定控件的数据。DataSource属性可以直接作为Repeater控件的数据源,但是需要显示调用DataBind()方法绑定Repeater控件的数据。另外,若DataSource属性包含多个数据成员,则还可以使用DataMember属性指定DataSource属性中的一个数据成员为Repeater控件的数据源。

Repeater控件还提供了3个事件:ItemCommand、ItemCreated和ItemDataBound,说明如表5-13所示。

表5-13                                                       Repeater控件的事件

事    件

描    述

ItemCommand

单击控件中的按钮时发生

ItemCreated

控件中的项创建时发生

ItemDataBound

控件中的项被数据绑定之后发生

5.3.2  DataList控件概述

DataList控件也是一种迭代控件。它不但可以以某种格式重复显示数据,而且还能够将样式应用这些数据,另外,DataList控件还可以控制数据显示的方向。和Repeater控件一样,DataList控件也支持模板,并且还为这些模板提供相应的样式。

DataList控件提供了5个静态只读字段,它们分别表示选择、编辑、更新、取消和删除命名的名称,如表5-14所示。

表5-14                                                       DataList控件的字段

字    段

描    述

SelectCommandName

【选择】命令名,只读字段

EditCommandName

【编辑】命令名,只读字段

UpdateCommandName

【更新】命令名,只读字段

CancelCommandName

【取消】命令名,只读字段

DeleteCommandName

【删除】命令名,只读字段

DataList控件提供了大量的属性,这些属性可以设置控件的行为、样式、外观等,如表5-15所示。

表5-15                                                       DataList控件的属性

属    性

描    述

EditItemIndex

编辑项的索引

SelectedIndex

选定项的索引

SelectedItem

选定项

SelectedValue

选定项的键字段的值

Items

控件的项集合,该集合的每一个元素类型为DataListItem

RepeatLayout

控件的重复模式,可以是表格形式或流形式

GridLines

网格线样式

RepeatColumns

控件重复显示的列数

RepeatDirection

控件是垂直显示还是水平显示

ShowHeader

控件是否显示页眉部分

ShowFooter

控件是否显示脚注部分

下面的实例代码在DatalistCtl.aspx页面上声明了一个DataList控件和一个SqlDataSource数据源控件,它们的ID属性的值分别为dlUser和myDSUser。其中,myDSUser控件为dlUser的数据源控件,并为该控件提供数据。

<!-- Sample_05_03的DatalistCtl.aspx页面 -->

<%@ Page Language="C#" %>

<script runat="server"></script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server"><title>DataList控件的模板列</title></head>

<body><form id="form1" runat="server">

<asp:DataList ID="dlUser" runat="server" BackColor="White"

    BorderColor="#336666" BorderStyle="Double" BorderWidth="3px"

    CellPadding="4" DataKeyField="ID" DataSourceID="myDSUser"

    GridLines="Horizontal" Font-Size="9pt" RepeatColumns="5">

注意

下述HTML代码创建DataList控件的一个交替模板列,并在该列中显示用户的ID值、名称、电子邮件等信息。

        <AlternatingItemTemplate>

            ID:<asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID")

            %>'></asp:Label><br />

            UserName:<asp:Label ID="UserNameLabel" runat="server" Text='<%#

            Eval("UserName") %>'></asp:Label><br />

            Email:<asp:Label ID="EmailLabel" runat="server" Text='<%#

            Eval("Email") %>'></asp:Label><br />

            CreateDate:<asp:Label ID="CreateDateLabel" runat="server" Text='<%#

            Eval("CreateDate") %>'></asp:Label><br /><br />

       </AlternatingItemTemplate>

注意

下述HTML代码创建DataList控件的一个项模板列,并在该列中显示用户的ID值、名称、电子邮件等信息。

    <ItemTemplate>

        ID:<asp:Label ID="IDLabel" runat="server" Text='<%# Eval("ID")

        %>'></asp:Label><br />

        UserName:<asp:Label ID="UserNameLabel" runat="server" Text='<%#

        Eval("UserName") %>'></asp:Label><br />

        Email:<asp:Label ID="EmailLabel" runat="server" Text='<%#

        Eval("Email") %>'></asp:Label><br />

        CreateDate:<asp:Label ID="CreateDateLabel" runat="server" Text='<%#

        Eval("CreateDate") %>'></asp:Label><br /><br />

    </ItemTemplate>

</asp:DataList>

<asp:SqlDataSource ID="myDSUser" runat="server" ConnectionString="<%$

    ConnectionStrings:WEB2ASPNET2DBConnectionString %>"

    SelectCommand="SELECT [ID], [UserName], [Email], [CreateDate]

        FROM [User]"></asp:SqlDataSource>

</form></body>

</html>

上述代码实例的执行结果如图5.19所示。

图5.19  DataList控件显示数据

5.3.3  Repeater控件的模板

Repeater控件支持5种模板:HeaderTemplate、FooterTemplate、AlternatingItemTemplate、ItemTemplate和SeparatorTemplate,它们的具体说明如表5-16所示。

表5-16                                                       Repeater控件的模板

模 板 名 称

描    述

ItemTemplate

项模板,定义如何显示控件中的项

AlternatingItemTemplate

交替项模板,定义如何显示控件中的交替项

HeaderTemplate

头模板,定义如何显示控件的标头部分

FooterTemplate

脚注模板,定义如何显示控件的注脚部分

SeparatorTemplate

分割模板,定义如何显示各项之间的分隔符

HeaderTemplate和FooterTemplate模板分别在Repeater控件的开始和结束处呈现文本和控件。ItemTemplate和AlternatingItemTemplate(如果存在)模板交替呈现Repeater控件的数据源中的数据项。如果不存在AlternatingItemTemplate模板,则重复显示ItemTemplate模板的内容。SeparatorTemplate模板是ItemTemplate之间、AlternatingItemTemplate之间或者两者之间的分割项。

下面的代码实例声明了一个Repeater控件,该控件使用了HeaderTemplate、ItemTemplate和FooterTemplate。另外,该控件使用SqlDataSource控件作为数据源,显示用户表User中的记录。

该Repeater控件还定义了ItemDataBound事件,名称为rpUser_ItemDataBound(object sender, RepeaterItemEventArgs e)。该事件设置控件中每一个数据项的编号。

<!-- Sample_05_03的RepeaterCtl.aspx页面 -->

<%@ Page Language="C#" %>

<script runat="server">

protected void rpUser_ItemDataBound(object sender,RepeaterItemEventArgs e)

{

    if(e.Item.ItemType == ListItemType.Item

        || e.Item.ItemType == ListItemType.AlternatingItem)

    {   ///找到lbNumber控件,并设置它的编号

        Label lbNumber = (Label)e.Item.FindControl("lbNumber");

        if(lbNumber != null)

        {

            lbNumber.Text = (e.Item.ItemIndex + 1).ToString();

        }

    }

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server"><title>Repeater控件的模板列</title></head>

<body><form id="form1" runat="server">

<asp:Repeater ID="rpUser" runat="server"

    OnItemDataBound="rpUser_ItemDataBound" DataSourceID="myDSUser">

注意

下述HTML代码创建Repeater控件的一个HeaderTemplate模板,并在该模板显示表格的表头。

    <HeaderTemplate>

        <table border="1">

            <tr>

                <td>编号</td>

                <td>用户ID</td>

                <td>用户名称</td>

                <td>电子邮件</td>

            </tr>

    </HeaderTemplate>

注意

下述HTML代码创建Repeater控件的一个ItemTemplate模板,并在该模板显示表格的每一个数据行。

    <ItemTemplate>

            <tr>

                <td><asp:Label ID="lbNumber" runat="server">

                    </asp:Label></td>

                <td><%# Eval("ID")%></td>

                <td><%# Eval("UserName").ToString() %></td>

                <td><%# Eval("Email").ToString() %></td>

            </tr>

    </ItemTemplate>

注意

下述HTML代码创建Repeater控件的一个FooterTemplate模板,并在该模板显示表格的表尾。

    <FooterTemplate>

        </table>

    </FooterTemplate>

</asp:Repeater>

<asp:SqlDataSource ID="myDSUser" runat="server" ConnectionString="<%$

    ConnectionStrings:WEB2ASPNET2DBConnectionString %>"

    SelectCommand="SELECT [ID], [UserName], [Email], [CreateDate]

        FROM [User]"></asp:SqlDataSource>

</form></body>

</html>

上述代码实例的执行结果如图5.20所示。

图5.20  Repeater控件的模板显示数据

5.3.4  DataList控件的模板

DataList控件支持7种模板:HeaderTemplate、FooterTemplate、AlternatingItemTemplate、ItemTemplate、EditItemTemplate、SelectedItemTemplate和SeparatorTemplate,它们的具体说明如表5-17所示。

表5-17                                                       DataList控件的模板

模板或样式名称

描    述

ItemTemplate

项的模板

AlternatingItemTemplate

交替项的模板

EditItemTemplate

编辑项的模板

HeaderTemplate

标题部分的模板

FooterTemplate

脚注部分的模板

SelectedItemTemplate

选定项的模板

SeparatorTemplate

各项间分隔项的模板

ItemStyle

项的样式属性

AlternatingItemStyle

交替项的样式属性

EditItemStyle

编辑项的样式属性

HeaderStyle

标题部分的样式属性

FooterStyle

脚注部分的样式属性

SelectedItemStyle

选定项的样式属性

SeparatorStyle

各项间分隔项的样式属性

HeaderTemplate和FooterTemplate模板分别呈现DataList控件的标题部分和脚注部分。ItemTemplate和AlternatingItemTemplate(如果存在)模板交替呈现DataList控件的数据源中的数据项。如果不存在AlternatingItemTemplate模板,则重复显示ItemTemplate模板的内容。

SeparatorTemplate模板是ItemTemplate之间、AlternatingItemTemplate之间或者两者之间的分隔项。SelectedItemTemplate模板呈现控件中被选中的项的数据或控件。EditItemTemplate模板呈现控件的编辑项的数据或控件。另外,DataList控件还为上述7个模板提供了相应的样式,具体描述如下。

*     HeaderStyle,标题项样式,应用于HeaderTemplate模板。

*     ItemStyle,普通项样式,应用于ItemTemplate模板。

*     AlternatingItemStyle,交替项样式,应用于AlternatingItemTemplate模板。

*     SeparatorStyle,分隔项样式,应用于SeparatorTemplate模板。

*     EditItemStyle,编辑项样式,应用于EditItemTemplate模板。

*     SelectedItemStyle,选定项样式,应用于SelectedItemTemplate模板。

*     FooterStyle,脚注项样式,应用于FooterTemplate模板。

下面的代码实例声明了一个DataList控件,它的ID属性值为dlUser。该控件使用了4种模板:HeaderTemplate、ItemTemplate、AlternatingItemTemplate和FooterTemplate。该控件使用SqlDataSource控件myDSUser作为数据源,显示用户表User中的记录。

另外,该控件还定义了ItemDataBound事件,名称为dlUser_ItemDataBound(object sender, DataListItemEventArgs e),该事件设置控件中每一个数据项的编号。

<!-- Sample_05_03的DLColumn.aspx页面 -->

<%@ Page Language="C#" %>

<script runat="server">

protected void dlUser_ItemDataBound(object sender,DataListItemEventArgs e)

{

    if(e.Item.ItemType == ListItemType.AlternatingItem

        || e.Item.ItemType == ListItemType.Item)

    {   ///找到lbNumber控件,并设置它的编号

        Label lbNumber = (Label)e.Item.FindControl("lbNumber");

        if(lbNumber != null)

        {

            lbNumber.Text = (e.Item.ItemIndex + 1).ToString();

        }

    }

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server"><title>DataList控件的模板列</title></head>

<body><form id="form1" runat="server">

<asp:DataList ID="dlUser" runat="server" BackColor="White"

    BorderStyle="Double" BorderWidth="3px" CellPadding="4"

    DataKeyField="ID" DataSourceID="myDSUser" GridLines="Horizontal"

    Font-Size="9pt" OnItemDataBound="dlUser_ItemDataBound"

    RepeatDirection="Horizontal">

注意

下述HTML代码创建DataList控件的一个HeaderTemplate模板,并在该模板显示表格的表头。

    <HeaderTemplate>

        <table border="1">

            <tr>

                <td>编号</td>

                <td>用户ID</td>

                <td>用户名称</td>

                <td>电子邮件</td>

            </tr>

    </HeaderTemplate>

注意

下述HTML代码创建DataList控件的一个ItemTemplate模板,并在该模板显示表格的表头。

    <ItemTemplate>

            <tr>

                <td><asp:Label ID="lbNumber" runat="server">

                     </asp:Label></td>

                <td><%# Eval("ID")%></td>

                <td><%# Eval("UserName").ToString() %></td>

                <td><%# Eval("Email").ToString() %></td>

            </tr>

    </ItemTemplate>

注意

下述HTML代码创建DataList控件的一个AlternatingItemTemplate模板,并在该模板显示表格的表头。

    <AlternatingItemTemplate>

            <tr>

                <td><asp:Label ID="lbNumber" runat="server">

                    </asp:Label></td>

                <td><%# Eval("ID")%></td>

                <td><%# Eval("UserName").ToString() %></td>

                <td><%# Eval("Email").ToString() %></td>

            </tr>

    </AlternatingItemTemplate>

注意

下述HTML代码创建DataList控件的一个FooterTemplate模板,并在该模板显示表格的表头。

    <FooterTemplate>

        </table>

    </FooterTemplate>

</asp:DataList>

<asp:SqlDataSource ID="myDSUser" runat="server" ConnectionString="<%$

    ConnectionStrings:WEB2ASPNET2DBConnectionString %>"

    SelectCommand="SELECT [ID], [UserName], [Email], [CreateDate]

        FROM [User]"></asp:SqlDataSource>

</form></body>

</html>

上述代码实例的执行结果如图5.21所示。

图5.21  DataList控件的模板显示数据

5.3.5  获取CommandArgument属性的值

按钮控件(如Button、ImageButton、LinkButton等)包括两个属性:CommandArgument和CommandName。其中,第一个属性用来保存操作所需要的参数,第二个属性用来保存执行操作的标识。

注意

CommandArgument和CommandName属性一般应用在控件的Command事件中。

若DataList控件的项中包含了按钮控件,当用户单击按钮控件时,会触发DataList控件的ItemCommand事件。该事件的参数e的CommandArgument和CommandName属性的值分别等于该按钮的CommandArgument和CommandName属性的值。

下面的代码实例首先判断参数e的CommandName属性的值是否为“show”,如果是,则显示该参数的CommandArgument属性的值。

protected void dlUser_ItemCommand(object source,

    DataListCommandEventArgs e)

{   ///获取CommandName属性的值

    if(e.CommandName.ToLower() == "show")

    {   ///显示CommandArgument属性的值

        Response.Write(e.CommandArgument.ToString());

    }

}

5.3.6  应用DataKeyField属性

DataList控件的基类BaseDataList提供了与数据源键值相关的DataKeyField和DataKeys属性。其中,DataKeyField属性指定DataList控件的数据源中的键字段。DataKeys属性为一个集合,它保存DataList控件中每一个记录的键值。通过DataKeys属性,可以访问DataList控件中每一行记录的键值。

下面的代码实例获取了DataList控件中的DataKeys属性中的每一行的键值,并显示在名称为lbIDValue的控件中。

protected void dlUser_ItemDataBound(object sender,DataListItemEventArgs e)

{

    if(e.Item.ItemType == ListItemType.Item

        || e.Item.ItemType == ListItemType.AlternatingItem)

    {

        Label lbIDValue = (Label)e.Item.FindControl("lbIDValue");

        if(lbIDValue != null)

        {   ///获取DataKeys属性中的值,并显示

              lbIDValue.Text = dlUser.DataKeys[e.Item.ItemIndex].ToString();

        }

    }

}

下面的实例代码在ButtonKey.aspx页面上声明一个DataList控件和一个SqlDataSource数据源控件,它们的ID属性的值分别为dlUser和myDSUser。其中,myDSUser控件为dlUser的数据源控件,并为该控件提供数据。另外,dlUser控件还定义两个事件:ItemDataBound和ItemCommand,它们的名称分别为dlUser_ItemDataBound(object sender, DataListItem EventArgs e)和dlUser_ItemCommand(object source,DataListCommandEventArgs e)。

<!-- Sample_05_03的ButtonKey.aspx页面 -->

<%@ Page Language="C#" %>

<script runat="server">

///省略了dlUser_ItemDataBound(object sender,DataListItemEventArgs e)和

///dlUser_ItemCommand(object source,DataListCommandEventArgs e)事件的代码

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server"><title>应用DataKeyField属性</title></head>

<body><form id="form1" runat="server">

<asp:DataList ID="dlUser" runat="server" BackColor="White"

    BorderStyle="None" BorderWidth="1px" CellPadding="3" DataKeyField="ID"

    DataSourceID="myDSUser" GridLines="Both" Font-Size="9pt"

    OnItemDataBound="dlUser_ItemDataBound" RepeatDirection="Horizontal"

    OnItemCommand="dlUser_ItemCommand" BorderColor="#CCCCCC">

    <HeaderTemplate>

        <table border="1">

            <tr>

                <td>键值</td>

                <td>用户名称</td>

                <td>电子邮件</td>

                <td>操作</td>

            </tr>

    </HeaderTemplate>

    <ItemTemplate>

            <tr>

                <td><asp:Label ID="lbIDValue" runat="server">

                     </asp:Label></td>

                <td><%# Eval("UserName").ToString() %></td>

                <td><%# Eval("Email").ToString() %></td>

                <td><asp:Button ID="btnShow" runat="server" Text="显示ID"

                  CommandName="show" CommandArgument='<%# Eval("ID") %>'

                  /></td>

            </tr>

    </ItemTemplate>

    <AlternatingItemTemplate>

            <tr>

                <td><asp:Label ID="lbIDValue" runat="server">

                     </asp:Label></td>

                <td><%# Eval("UserName").ToString() %></td>

                <td><%# Eval("Email").ToString() %></td>

                <td><asp:Button ID="btnShow" runat="server" Text="显示ID"

                  CommandName="show" CommandArgument='<%# Eval("ID") %>'

                  /></td>

            </tr>

    </AlternatingItemTemplate>

    <FooterTemplate>

        </table>

    </FooterTemplate>

</asp:DataList>

<asp:SqlDataSource ID="myDSUser" runat="server" ConnectionString="<%$

    ConnectionStrings:WEB2ASPNET2DBConnectionString %>"

    SelectCommand="SELECT [ID], [UserName], [Email], [CreateDate]

        FROM [User]"></asp:SqlDataSource>

</form></body>

</html>

上述代码实例执行之后,ButtonKey.aspx页面如图5.22所示。单击用户名称为“12345”所在行的【显示ID】按钮,ButtonKey.aspx页面将显示该行数据的键值“12”,如图5.23所示。

   

      图5.22  ButtonKey.aspx页面的初始界面                 图5.23  显示指定行的键值

5.3.7  DataList控件的事件

DataList控件提供了与行行为,以及对行的数据进行选择、编辑、更新、删除等操作相关的事件,如表5-18所示。

表5-18                                                       DataList控件的事件

事    件

描    述

ItemCommand

单击控件中的按钮时发生

ItemCreated

控件创建项时发生

ItemDataBound

控件中的项被数据绑定之后发生

EditCommand

单击控件中的【编辑】按钮时发生

CancelCommand

单击控件中的【取消】按钮时发生

UpdateCommand

单击控件中的【更新】按钮时发生

DeleteCommand

单击控件中的【删除】按钮时发生

SelectedIndexChanged

在两次服务器发送之间,当控件中选择了不同的项时发生

单击DataList控件中的按钮(如Button、ImageButton等)时,将触发ItemCommand事件。单击DataList控件中的【编辑】按钮时,将触发EditCommand事件。此时,DataList控件处于编辑状态,它将在【编辑】按钮位置处显示【更新】和【取消】按钮。单击【更新】按钮,控件将用户更新操作的结果提交到数据库;单击【取消】按钮,控件将取消本次编辑操作,然后恢复到非编辑状态。

单击DataList控件中的【删除】按钮时,将触发DeleteCommand事件。在两次服务器发送之间,若DataList控件的选择项发生改变时,将触发SelectedIndexChanged事件。

下面的代码实例在dlClick.aspx页面中定义了DataList控件的Init、Load、ItemCreated、DataBinding、ItemCommand、ItemDataBound、PreRender等事件,并且每一个事件在执行时将显示该事件的名称。如果事件与控件的项(Item)相关,则显示当前项(Item)的索引值。

<!-- Sample_05_03的dlClick.aspx页面 -->

<%@ Page Language="C#" %>

<script runat="server">

protected void dlUser_ItemCreated(object sender,DataListItemEventArgs e)

{   ///显示事件的名称

    Response.Write("第" + (e.Item.ItemIndex + 1).ToString()

        + "正在执行dlUser_ItemCreated()事件……<br />");

}

protected void dlUser_ItemDataBound(object sender,DataListItemEventArgs e)

{   ///显示事件的名称

    Response.Write("第" + (e.Item.ItemIndex + 1).ToString()

        + "正在执行dlUser_ItemDataBound()事件……<br />");

}

protected void dlUser_Init(object sender,EventArgs e)

{   ///显示事件的名称

    Response.Write("dlUser_Init()事件正在执行……<br />");

}

protected void dlUser_Load(object sender,EventArgs e)

{   ///显示事件的名称

    Response.Write("dlUser_Load()事件正在执行……<br />");

}

protected void dlUser_PreRender(object sender,EventArgs e)

{   ///显示事件的名称

    Response.Write("dlUser_PreRender()事件正在执行……<br />");

}

protected void dlUser_DataBinding(object sender,EventArgs e)

{   ///显示事件的名称

    Response.Write("dlUser_DataBinding()事件正在执行……<br />");

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server"><title>DataList控件的事件</title></head>

<body><form id="form1" runat="server">

<asp:DataList ID="dlUser" runat="server" BackColor="White"

    BorderStyle="None" BorderWidth="1px" CellPadding="3" DataKeyField="ID"

    DataSourceID="myDSUser" GridLines="Both" Font-Size="9pt"

    OnItemDataBound="dlUser_ItemDataBound" RepeatDirection="Horizontal"

    BorderColor="#CCCCCC" OnItemCreated="dlUser_ItemCreated"

    OnInit="dlUser_Init" OnLoad="dlUser_Load"

    OnPreRender="dlUser_PreRender" OnDataBinding="dlUser_DataBinding">

    <HeaderTemplate>

        用户名称

    </HeaderTemplate>

    <ItemTemplate>

        <%# Eval("UserName").ToString() %>

    </ItemTemplate>

    <AlternatingItemTemplate>

        <%# Eval("UserName").ToString() %>

    </AlternatingItemTemplate>

</asp:DataList>

<asp:SqlDataSource ID="myDSUser" runat="server" ConnectionString="<%$

    ConnectionStrings:WEB2ASPNET2DBConnectionString %>"

    SelectCommand="SELECT [ID], [UserName], [Email], [CreateDate]

        FROM [User]"></asp:SqlDataSource>

</form></body>

</html>

上述代码实例的执行结果如图5.24所示。

图5.24  显示DataList控件的事件执行结果

上一页    首页    下一页
查看所有评论( 12)条】 <script> /* 配置评论相关的参数 */ remark_para_SiteId = 'decfe161-e911-484e-989c-cbd8c4c563f4'; remark_para_PCId = 425; //remark_para_PId = '00000000-0000-0000-0000-000000000003'; remark_para_Title = escape('精通基于ASP.NET 2.0的Web 2.0应用'); remark_para_Tags =escape(''); remark_para_IframeHeight = '350px'; remark_para_IframeWidth = '100%'; remark_para_Charset = "gb2312";; remark_para_CountElemId = "remark_count"; remark_para_PostAreaId = "Ian_PostRemarkArea"; remark_para_List_PanelId = "Ian_RemarkList"; remark_para_Top_Id = "Ian_RemarkTop"; remark_para_PostAreaRandomImageWidth = "90";//"120"; remark_para_PostAreaRandomImageHeight = "25";//"30"; remark_para_PostAreaRandomImageFontSize = "15";//"15"; remark_para_PostAreaStyle = 'http://remark2.csdn.net/demo/csdnbook/rview.css'; remark_para_List_PageSize =5; </script>

最近评论



[热] malege 发表评论:

df

时间:2008-06-11 20:36:09 来自:203.81.21.*
PK Zone 支持 反对
[热] CSDN 网友 发表评论:

支持

时间:2008-05-29 10:55:02 来自:222.128.6.*
PK Zone 支持 反对
[热] CSDN 网友 发表评论:
[haizei]

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ASP.NET用Repeater控件显示数据

如果你正在使用ASP.NET,你一定对DataGrid控件非常熟悉。DataGrid控件提供了各种特性,通过这些特性可以很容易地在一个Web页面上以列表形式显示数据。但是,如果你不想使用HTML表格形式呢?此时,可以使用一个DataGrid的一个鲜为人知的兄弟控件,即Repeater控件。Repeater控件提供显示你所需要数据的灵活性。 
   
  Repeater控件是什么? 
   
  Repeater是一个可重复操作的控件,也就是说,它通过使用模板显示一个数据源的内容,而你可以很容易地配置这些模板。Repeater包含如标题和页脚这样的数据,它可以遍历所有的数据选项并应用到模板中。 
   
  与DataGrid和DataList控件不同,Repeater控件并不是由WebControl类派生而来。所以,它不包括一些通用的格式属性,比如控制字体,颜色,等等。然而,使用Repeater控件,HTML(或者一个样式表)或者ASP.NET类可以处理这些属性。 
   
  HTML在哪里? 
  Repeater控件与DataGrid (以及DataList)控件的主要区别是在于如何处理HTML。ASP.NET建立HTML代码以显示DataGrid控件,但Repeater允许开发人员决定如何显示数据。所以,你可以选择将数据显示在一个HTML表格中或者一个顺序列表中。这主要取决于你的选择,但你必须将正确的HTML插入到ASP.NET页面中。 
   
  模板与DataList一样,Repeater控件只支持模板。以下的模板可供选择: 
   
  AlternatingItemTemplate: 指定如何显示每一其它选项。 
  ItemTemplate: 指定如何显示选项。(AlternatingItemTemplate可以覆盖这一模板。) 
  HeaderTemplate: 建立如何显示标题。 
  FooterTemplate: 建立如何显示页脚。 
  SeparatorTemplate: 指定如何显示不同选项之间的分隔符。 
  你可以使用这些模板来显示你希望的数据。唯一具有强制性的模板是ItemTemplate,所有其它的模板都是具有选择性的。 
   
  数据 
  对于处理一个数据源,Repeater控件具有与DataGrid与DataList相同的属性: 
   
  DataMember:获得或者设置与 Repeater 控件绑定的相应DataSource属性的表格。 
   
  DataSource:获得或者设置为 Repeater 显示提供数据的数据源。 
   
  除此之外,还有一个Items属性,你可以通过这一属性编程访问Repeater数据中单一选项。它返回一个RepeaterItemCollection对象,为一组RepeaterItem对象的集合,代表 Repeater 数据的每一行。 
   
  ASP.NET Web数据控件还有其它一个共性:它们都使用DataBind方法来生成用户界面。调用这一方法可以返回并显示数据(假设DataSource和DataMember属性设置正确)。在查看DataBind方法之前,我们先看看如何在一个Web页面中使用一个Repeater控件。 
   
  使用Repeater控件 
  使用Repeater控件的第一步骤是决定我们将要使用的数据源和字段。例如,我们将要使用SQL Server Northwind数据库中的Employees列表。Web页面将显示职工的完整名字,地址,以及电话号码。HTML将使用DIV标记,用 Repeater 模板来分隔内容。下面是 Web 页面的 HTML 内容: 
   
  <%@ Page language="c#" %> 
  <%@ Import Namespace="System.Data" %> 
  <%@ Import Namespace="System.Data.SqlClient" %> 
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 
  <html><head> 
  <title>Builder.com Repeater Example</title> 
  <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> 
  <meta name="CODE_LANGUAGE" Content="C#"> 
  <style> 
  .alternate { 
  FONT-WEIGHT: bold; 
  COLOR: black; 
  FONT-FAMILY: Verdana, 'Times New Roman'; 
  BACKGROUND-COLOR: yellow 
  } 

   .row { 
  FONT-WEIGHT: bold; 
  COLOR: black; 
  FONT-FAMILY: Verdana, 'Times New Roman'; 
  BACKGROUND-COLOR: white 
  } 
  .footer { 
  FONT-WEIGHT: bold; 
  COLOR: red; 
  FONT-FAMILY: Verdana, 'Times New Roman'; 
  BACKGROUND-COLOR: gray 
  } 
  .header { 
  FONT-WEIGHT: bold; 
  COLOR: yellow; 
  FONT-FAMILY: Verdana, 'Times New Roman'; 
  BACKGROUND-COLOR: gray 
  } 
  .box { 
  BORDER-RIGHT: blue groove; 
  BORDER-TOP: blue groove; 
  DISPLAY: block; 
  VERTICAL-ALIGN: baseline; 
  OVERFLOW: auto; 
  BORDER-LEFT: blue groove; 
  CURSOR: wait; 
  BORDER-BOTTOM: blue groove; 
  FONT-FAMILY: verdana; 
  TEXT-ALIGN: center 
  } 
  body { 
  background: #333; 
  } 
  </style> 
  <script language="C#" runat="server"> 
  private void Page_Load(object sender, System.EventArgs e) { 
  if (!IsPostBack) { 
  DataSet dset = new DataSet(); 
  string conn = "server=(local);Initial Catalog=Northwind;UID=ctester;PWD=password"; 
  string qry = "SELECT firstname, lastname, address, city, region, postalcode, 
  homephone FROM employees"; 
  SqlDataAdapter sda = new SqlDataAdapter(qry, conn); 
  sda.Fill(dset); 
  Repeater1.DataSource = dset.Tables[0].DefaultView; 
  Repeater1.DataBind(); 
  } } 
  </script></head> 
  <body MS_POSITIONING="GridLayout" bgColor="#00cc99"> 
  <form id="Form1" method="post" runat="server"> 
  <div class="box"> 
  <asp:Repeater id="Repeater1" runat="server"> 
  <HeaderTemplate> 
  <div class="header" id="header">Northwind Employees</div> 
  </HeaderTemplate> 
  <SeparatorTemplate><hr /></SeparatorTemplate> 
  <ItemTemplate><div class="row"> 
  <%# ((DataRowView)Container.DataItem)["FirstName"] %> 
  <%# ((DataRowView)Container.DataItem)["LastName"] %><br> 
  <%# ((DataRowView)Container.DataItem)["Address"] %><br> 
  <%# ((DataRowView)Container.DataItem)["City"] %>, 
  <%# ((DataRowView)Container.DataItem)["Region"] %> 
  <%# ((DataRowView)Container.DataItem)["PostalCode"] %><br> 
  <%# ((DataRowView)Container.DataItem)["HomePhone"] %> 
  </div></ItemTemplate> 
  <AlternatingItemTemplate><div class="alternate"> 
  <%# ((DataRowView)Container.DataItem)["FirstName"] %> 
  <%# ((DataRowView)Container.DataItem)["LastName"] %><br> 
  <%# ((DataRowView)Container.DataItem)["Address"] %><br> 
  <%# ((DataRowView)Container.DataItem)["City"] %>, 
  <%# ((DataRowView)Container.DataItem)["Region"] %> 
  <%# ((DataRowView)Container.DataItem)["PostalCode"] %><br> 
  <%# ((DataRowView)Container.DataItem)["HomePhone"] %> 
  </div></AlternatingItemTemplate> 
  <FooterTemplate><div class="footer"> 
  <%# ((DataView)Repeater1.DataSource).Count + " employees found." %> 
  </div></FooterTemplate> 
  </asp:Repeater></div></form></body></html> 
   
   
  可以注意到,每个 Repeater 行中样式表控制着文字的外观。除此之外,在网页内容中还添加了一个文本框。嵌入式 C# 代码从 Repeater 的数据源中获取相应的列。每个数据项都被转换成一个DataRowView对象以便显示。 
   
  这一页面并不是使用ASP.NET的“后台代码”性质。由于这一原因,页面引用了两个System.Data和System.Data.SqlClient空间名称。这对于使用DataRowView对象和与 SQL Server 交互访问是必需的。 
   
  当调用页面时就会触发Page_Load事件。此时会把数据源连接到 Repeater 控件上,并查询数据库。每一Repeater行的代码从潜在数据源中载入数据,并且Web页面显示这些数据。 
   
  这一设计使用了样式表(以及 HTML div 标记),所以更改外观只需要更改必要的样式表代码。为了进一步地将数据和显示分离,你可以在一个独立文件中存储样式表,并以一个HTML LINK标记来引用它们

 

 

 

 

 

 

 

 

 

 

 

 

 

ASP.NET用Repeater控件显示数据
作者:佚名 文章来源:本站整理 点击数: <script language=javascript src="/wzjs/GetHits.asp?ArticleID=7013"></script> 15 更新时间:2007-12-13
<script src="/AD888/好好_网站建设标题下.js"></script> <script type=text/JavaScript> alimama_pid="mm_10066621_397120_2240864"; alimama_titlecolor="535353"; alimama_descolor ="707070"; alimama_bgcolor="F7F7F7"; alimama_bordercolor="F7F7F7"; alimama_linkcolor="BDBDBD"; alimama_bottomcolor="F7F7F7"; alimama_anglesize="4"; alimama_bgpic="0"; alimama_icon="1"; alimama_sizecode="14"; alimama_width=728; alimama_height=90; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>

    如果你正在使用ASP.NET,你一定对DataGrid控件非常熟悉。DataGrid控件提供了各种特性,通过这些特性可以很容易地在一个Web页面上以列表形式显示数据。但是,如果你不想使用HTML表格形式呢?此时,可以使用一个DataGrid的一个鲜为人知的兄弟控件,即Repeater控件。Repeater控件提供显示你所需要数据的灵活性。
  
  Repeater控件是什么?
  
  Repeater是一个可重复操作的控件,也就是说,它通过使用模板显示一个数据源的内容,而你可以很容易地配置这些模板。Repeater包含如标题和页脚这样的数据,它可以遍历所有的数据选项并应用到模板中。
  
  与DataGrid和DataList控件不同,Repeater控件并不是由WebControl类派生而来。所以,它不包括一些通用的格式属性,比如控制字体,颜色,等等。然而,使用Repeater控件,HTML(或者一个样式表)或者ASP.NET类可以处理这些属性。
  
  HTML在哪里?
  Repeater控件与DataGrid (以及DataList)控件的主要区别是在于如何处理HTML。ASP.NET建立HTML代码以显示DataGrid控件,但Repeater允许开发人员决定如何显示数据。所以,你可以选择将数据显示在一个HTML表格中或者一个顺序列表中。这主要取决于你的选择,但你必须将正确的HTML插入到ASP.NET页面中。
  
  模板与DataList一样,Repeater控件只支持模板。以下的模板可供选择:
  
  AlternatingItemTemplate: 指定如何显示每一其它选项。
  ItemTemplate: 指定如何显示选项。(AlternatingItemTemplate可以覆盖这一模板。)
  HeaderTemplate: 建立如何显示标题。
  FooterTemplate: 建立如何显示页脚。
  SeparatorTemplate: 指定如何显示不同选项之间的分隔符。
  你可以使用这些模板来显示你希望的数据。唯一具有强制性的模板是ItemTemplate,所有其它的模板都是具有选择性的。
  
  数据
  对于处理一个数据源,Repeater控件具有与DataGrid与DataList相同的属性:
  
  DataMember:获得或者设置与 Repeater 控件绑定的相应DataSource属性的表格。
  
  DataSource:获得或者设置为 Repeater 显示提供数据的数据源。
  
  除

[1] [2] [3] [4] [5] [6] 下一页

 

 

 

ASP.NET用Repeater控件显示数据
作者:佚名 文章来源:本站整理 点击数: <script language=javascript src="/wzjs/GetHits.asp?ArticleID=7013"></script> 16 更新时间:2007-12-13
<script src="/AD888/好好_网站建设标题下.js"></script> <script type=text/JavaScript> alimama_pid="mm_10066621_397120_2240864"; alimama_titlecolor="535353"; alimama_descolor ="707070"; alimama_bgcolor="F7F7F7"; alimama_bordercolor="F7F7F7"; alimama_linkcolor="BDBDBD"; alimama_bottomcolor="F7F7F7"; alimama_anglesize="4"; alimama_bgpic="0"; alimama_icon="1"; alimama_sizecode="14"; alimama_width=728; alimama_height=90; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>
此之外,还有一个Items属性,你可以通过这一属性编程访问Repeater数据中单一选项。它返回一个RepeaterItemCollection对象,为一组RepeaterItem对象的集合,代表 Repeater 数据的每一行。
  
  ASP.NET Web数据控件还有其它一个共性:它们都使用DataBind方法来生成用户界面。调用这一方法可以返回并显示数据(假设DataSource和DataMember属性设置正确)。在查看DataBind方法之前,我们先看看如何在一个Web页面中使用一个Repeater控件。
  
  使用Repeater控件
  使用Repeater控件的第一步骤是决定我们将要使用的数据源和字段。例如,我们将要使用SQL Server Northwind数据库中的Employees列表。Web页面将显示职工的完整名字,地址,以及电话号码。HTML将使用DIV标记,用 Repeater 模板来分隔内容。下面是 Web 页面的 HTML 内容:
  
  <%@ Page language="c#" %>
  <%@ Import Namespace="System.Data" %>
  <%@ Import Namespace="System.Data.SqlClient" %>
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  <html><head>
  <title>Builder.com Repeater Example</title>
  <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  <meta name="CODE_LANGUAGE" Content="C#">
  <style>
  .alternate {
  FONT-WEIGHT: bold;
  COLOR: black;
  FONT-FAMILY: Verdana, 'Times New Roman';
  BACKGROUND-COLOR: yellow
  }

   .row {
  FONT-WEIGHT: bold;
  COLOR: black;
  FONT-FAMILY: Verdana, 'Times New Roman';
  BACKGROUND-COLOR: white
 

上一页  [1] [2] [3] [4] [5] [6] 下一页

 

 

ASP.NET用Repeater控件显示数据
作者:佚名 文章来源:本站整理 点击数: <script language=javascript src="/wzjs/GetHits.asp?ArticleID=7013"></script> 17 更新时间:2007-12-13
<script src="/AD888/好好_网站建设标题下.js"></script> <script type=text/JavaScript> alimama_pid="mm_10066621_397120_2240864"; alimama_titlecolor="535353"; alimama_descolor ="707070"; alimama_bgcolor="F7F7F7"; alimama_bordercolor="F7F7F7"; alimama_linkcolor="BDBDBD"; alimama_bottomcolor="F7F7F7"; alimama_anglesize="4"; alimama_bgpic="0"; alimama_icon="1"; alimama_sizecode="14"; alimama_width=728; alimama_height=90; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>

 }
  .footer {
  FONT-WEIGHT: bold;
  COLOR: red;
  FONT-FAMILY: Verdana, 'Times New Roman';
  BACKGROUND-COLOR: gray
  }
  .header {
  FONT-WEIGHT: bold;
  COLOR: yellow;
  FONT-FAMILY: Verdana, 'Times New Roman';
  BACKGROUND-COLOR: gray
  }
  .box {
  BORDER-RIGHT: blue groove;
  BORDER-TOP: blue groove;
  DISPLAY: block;
  VERTICAL-ALIGN: baseline;
  OVERFLOW: auto;
  BORDER-LEFT: blue groove;
  CURSOR: wait;
  BORDER-BOTTOM: blue groove;
  FONT-FAMILY: verdana;
  TEXT-ALIGN: center
  }
  body {
  background: #333;
  }
  </style>
  <script language="C#" runat="server">
  private void Page_Load(object sender, System.EventArgs e) {
  if (!IsPostBack) {
  DataSet dset = new DataSet();
  string conn = "server=(local);Initial Catalog=Northwind;UID=ctester;PWD=password";
  string qry = "SELECT firstname, lastname, address, city, region, postalcode,
  homephone FROM employees";
  SqlDataAdapter sda = new SqlDataAdapter(qry, conn);
  sda.Fill(dset);
&

 

 

 

ASP.NET用Repeater控件显示数据
作者:佚名 文章来源:本站整理 点击数: <script language=javascript src="/wzjs/GetHits.asp?ArticleID=7013"></script> 18 更新时间:2007-12-13
<script src="/AD888/好好_网站建设标题下.js"></script> <script type=text/JavaScript> alimama_pid="mm_10066621_397120_2240864"; alimama_titlecolor="535353"; alimama_descolor ="707070"; alimama_bgcolor="F7F7F7"; alimama_bordercolor="F7F7F7"; alimama_linkcolor="BDBDBD"; alimama_bottomcolor="F7F7F7"; alimama_anglesize="4"; alimama_bgpic="0"; alimama_icon="1"; alimama_sizecode="14"; alimama_width=728; alimama_height=90; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>
nbsp; Repeater1.DataSource = dset.Tables[0].DefaultView;
  Repeater1.DataBind();
  } }
  </script></head>
  <body MS_POSITIONING="GridLayout" bgColor="#00cc99">
  <form id="Form1" method="post" runat="server">
  <div class="box">
  <asp:Repeater id="Repeater1" runat="server">
  <HeaderTemplate>
  <div class="header" id="header">Northwind Employees</div>
  </HeaderTemplate>
  <SeparatorTemplate><hr /></SeparatorTemplate>
  <ItemTemplate><div class="row">
  <%# ((DataRowView)Container.DataItem)["FirstName"] %>
  <%# ((DataRowView)Container.DataItem)["LastName"] %><br>
  <%# ((DataRowView)Container.DataItem)["Address"] %><br>
  <%# ((DataRowView)Container.DataItem)["City"] %>,
  <%# ((DataRowView)Container.DataItem)["Region"] %>
  <%# ((DataRowView)Container.DataItem)["PostalCode"] %><br>
  <%# ((DataRowView)Container.DataItem)["HomePhone"] %>
  </div></ItemTemplate>
  <AlternatingItemTemplate><div class="alternate">
  <%# ((DataRowView)Container.DataItem)["FirstName"] %>
  <%#

上一页  [1] [2] [3] [4] [5] [6] 下一页

 

 

 

ASP.NET用Repeater控件显示数据
作者:佚名 文章来源:本站整理 点击数: <script language=javascript src="/wzjs/GetHits.asp?ArticleID=7013"></script> 19 更新时间:2007-12-13
<script src="/AD888/好好_网站建设标题下.js"></script> <script type=text/JavaScript> alimama_pid="mm_10066621_397120_2240864"; alimama_titlecolor="535353"; alimama_descolor ="707070"; alimama_bgcolor="F7F7F7"; alimama_bordercolor="F7F7F7"; alimama_linkcolor="BDBDBD"; alimama_bottomcolor="F7F7F7"; alimama_anglesize="4"; alimama_bgpic="0"; alimama_icon="1"; alimama_sizecode="14"; alimama_width=728; alimama_height=90; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>
((DataRowView)Container.DataItem)["LastName"] %><br>
  <%# ((DataRowView)Container.DataItem)["Address"] %><br>
  <%# ((DataRowView)Container.DataItem)["City"] %>,
  <%# ((DataRowView)Container.DataItem)["Region"] %>
  <%# ((DataRowView)Container.DataItem)["PostalCode"] %><br>
  <%# ((DataRowView)Container.DataItem)["HomePhone"] %>
  </div></AlternatingItemTemplate>
  <FooterTemplate><div class="footer">
  <%# ((DataView)Repeater1.DataSource).Count + " employees found." %>
  </div></FooterTemplate>
  </asp:Repeater></div></form></body></html>
  
  
  可以注意到,每个 Repeater 行中样式表控制着文字的外观。除此之外,在网页内容中还添加了一个文本框。嵌入式 C# 代码从 Repeater 的数据源中获取相应的列。每个数据项都被转换成一个DataRowView对象以便显示。
  
  这一页面并不是使用ASP.NET的“后台代码”性质。由于这一原因,页面引用了两个System.Data和System.Data.SqlClient空间名称。这对于使用DataRowView对象和与 SQL Server 交互访问是必需的。
  
  当调用页面时就会触发Page_Load事件。此时会把数据源连接到 Repeater 控件上,并查询数据库。每一Repeater行的代码从潜在数据源中载入数据,并且Web页面显示这些数据。
  
  这一设计使用了样式表(以及 HTML div 标记),所以更改外观只需要更改必要的样式表代码。为了进一步地将数据和显示分离,你可以在一个独立文件中存储样式表,并以一个HTML LINK标记来引用它们。
  
  一个很好的选择
  当与其他 ASP.NET 开发者交流时,开发人员对 Repeater 控件知之甚少,这真让我感到惊讶。虽

上一页  [1] [2] [3] [4] [5] [6] 下一页

 

 

 

ASP.NET用Repeater控件显示数据
作者:佚名 文章来源:本站整理 点击数: <script language=javascript src="/wzjs/GetHits.asp?ArticleID=7013"></script> 20 更新时间:2007-12-13
<script src="/AD888/好好_网站建设标题下.js"></script> <script type=text/JavaScript> alimama_pid="mm_10066621_397120_2240864"; alimama_titlecolor="535353"; alimama_descolor ="707070"; alimama_bgcolor="F7F7F7"; alimama_bordercolor="F7F7F7"; alimama_linkcolor="BDBDBD"; alimama_bottomcolor="F7F7F7"; alimama_anglesize="4"; alimama_bgpic="0"; alimama_icon="1"; alimama_sizecode="14"; alimama_width=728; alimama_height=90; alimama_type=2; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>
然它不如DataGrid功能强大,但它在许多场合中仍然提供了出色的灵活性。Repeater 控件缺少编辑和排序功能,但可以通过进一步编程而实现。




上一页  [1] [2] [3] [4] [5] [6] 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页