Repeater控件

Repeater控件

Repeater 控件使用列表方式来显示数据,能够让用户定义 Template 模板标记,自动用模板标记的项目,像循环那样重复编排数据源的数据,其基本语法如下所示。

<asp:Repeater Id="repeater" Runat="server">

   <HeaderTemplate>    </HeaderTemplate>

   <ItemTemplate>    </ItemTemplate>

   <AlternatingItemTemplate>    </AlternatingItemTemplate>

   <FooterTemplate>    </FooterTemplate>

</asp:Repeater>

上述Repeater 控件使用 Template 模板标记(标记内容可以使用 HTML 标记)编排数据。各种Template 标记的说明如表10-4所示。

10-4  Template 标记的说明

Template 模板标记

   

ItemTemplate

定义列表项目,也就是重复显示部分,对数据表来说是每一条记录,此为必须标记

AlternatingItemTemplate

项目交叉使用不同样式的模板,例如,记录轮流使用不同色彩显示,可以定义此标记,奇数项目( 0 开始)使用此模板显示,偶数项目使用 ItemTemplate 模板

SeparatorTemplate

项目分隔模板,可以定义分隔标记,通常使用 HTML 标记 <br> <hr>,如果没有定义就不显示

HeaderTemplate

定义列表标题,对数据表来说,就是 <table> 和记录的标题列,如果没有定义就不显示

FooterTemplate

定义列表脚注,对数据表来说,就是结尾标记 </table>,如果没有定义就不显示

10.2.1  Repeater控件以表格显示数据表

Repeater 控件的功能如同 Visual Basic For/Next 循环,换句话说,配合 HTML 表格标记和数据源控件,就可以使用表格来显示数据表的记录数据。

首先创建数据源控件为 Products 数据库,如下所示。

<asp:AccessDataSource Id="Products" Runat="server"

     DataFile="~/Products.mdb"

     SelectCommand="SELECT * FROM Products"/>

上述标记建立数据库的数据源后,Repeater 控件可以使用 Template 标记编排记录数据。Template 模板标记内容中的 HTML 表格标记如表10-5所示。

10-5  Template模板标记内容中的HTML表格标记

Template 模板标记

ItemTemplate

<tr>

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

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

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

</tr>

AlternatingItemTemplate

<tr bgcolor="lightyellow">

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

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

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

</tr>

HeaderTemplate

<table border="1" cellspacing="0" cellpadding="5">

<tr bgcolor="FFCC99">

<td>书号</td><td>书名</td><td>书价</td>

</tr>

FooterTemplate

</table>

Repeater 控件首先显示 HeaderTemplate 后,依数据表的记录数重复显示 ItemTemplate AlternativeItemTemplate 标记,最后显示 FoolterTemplate 模板标记的内容。

<td>标记中每一个单元格使用“<%#”符号和“%>”符号标记为表达式,此例是获取和显示指定数据表字段内容,如下所示。

<%# Eval("ProductNo")%>

上述程序代码的参数字符串是数据表的字段名称,此为 ASP.NET 2.0 的写法。1.0/1.1 版的写法如下所示。

<%# Container.DataItem("ProductNo")%>

上述 Container 属性可以参考 RepeaterItem 对象,然后使用 RepeaterItem 对象的属性 DataItem 获取字段值。

1. ASP.NET程序:Ch10-2-1.aspx

ASP.NET 程序中使用 Repeater AccessDataSource 控件,用表格显示数据表的记录数据,如下所示。

01: <html>

02: <head><title>Ch10-2-1.aspx</title></head>

03: <body>

04: <h3>Repeater控件 - 数据源控件</h3>

05: <form Runat="server">

06: <asp:AccessDataSource Id="Products" Runat="server"

07:      DataFile="~/Products.mdb"

08:      SelectCommand="SELECT * FROM Products"/>

09: <asp:Repeater Id="repeater" Runat="server"

10:      DataSourceID="Products">

11:  <HeaderTemplate>

12:   <table border="1" cellspacing="0" cellpadding="5">

13:   <tr bgcolor="FFCC99">

14:     <td>书号</td><td>书名</td><td>书价</td>

15:   </tr>

16:  </HeaderTemplate>

17:  <ItemTemplate>

18:   <tr>

19:     <td><%# Eval("ProductNo")%></td>

20:     <td><%# Eval("ProductName")%></td>

21:     <td><%# Eval("ProductPrice")%></td>

22:   </tr>

23:  </ItemTemplate>

24:  <AlternatingItemTemplate>

25:   <tr bgcolor="lightyellow">

26:     <td><%# Eval("ProductNo")%></td>

27:     <td><%# Eval("ProductName")%></td>

28:     <td><%# Eval("ProductPrice")%></td>

29:   </tr>

30:  </AlternatingItemTemplate>

31:  <FooterTemplate>

32:   </table>

33:  </FooterTemplate>

34: </asp:Repeater>

35: </form>

36: </body>

37: </html>

2. 程序说明

6~8行是AccessDataSource 控件,建立 Products 数据库的数据源,SQL 查询命令可以提取 Products 数据表的所有记录和字段。

9~34行是 Repeater 控件,第19~21行和26~28行的表达式显示数据表记录的字段数据。

3. 网页预览

Ch10文件夹建立为虚拟目录后,启动浏览程序执行 ASP.NET 程序,可以看到表格显示的记录数据,如图10-3所示。

10-3  Ch10-2-1.aspx运行结果

上图使用表格显示数据表的记录数据,每一条记录交叉显示不同色彩,分别是 ItemTemplate AlternativeItemTemplate 模板标记的 <tr> 表格行标记显示的记录数据。

Repeater 控件也可以使用数据绑定方式获取数据源,如下所示。

repeater.DataSource = objCmd.ExecuteReader()

repeater.DataBind()

上述程序代码的repeaterRepeater控件,完整程序范例是Ch10-2-1Script.aspx

10.2.2  Null值字段处理与ItemIndex属性

记录字段值如果是空值 Null,显示的单元格数据是空字符串。为了让单元格具有值,例如N/A "没有值" 等字符串。可以建立 showNull()函数来检查字段值,如下所示。

Function showNull(value As String )As String

   If value = "" Then

      Return "[N/A]"

   Else

      Return value

   End If

End Function

上述函数检查参数字符串,如果字符串为空值,就返回 " [N/A]" 字符串。在 Repeater 控件的表达式中只需要改成上述函数,如下所示。

<%# showNull(Eval("ProductName").ToString())%>

上述程序代码将字段值使用 ToString()方法转换成字符串后,使用 showNull()函数检查是否为空字符串。

程序范例的 Repeater 控件是使用列表项目来显示记录数据,可以使用 RepeaterItem 对象的 ItemIndex 属性显示列表项目编号,如下所示。

<%# Container.ItemIndex + 1 %>

上述程序代码因为 ItemIndex 值是从 0 开始,所以加 1 显示。

1. ASP.NET程序:Ch10-2-2.aspx

ASP.NET 程序中使用 Repeater AccessDataSource 控件,以项目编号的列表方式来显示数据表指定字段的记录数据,如下所示。

01: <%@ Page Language="VB" %>

02: <script Runat="server">

03: Function showNull(value As String )As String

04:    If value = "" Then

05:       Return "[N/A]"

06:    Else

07:       Return value

08:    End If

09: End Function

10: </script>

11: <html>

12: <head><title>Ch10-2-2.aspx</title></head>

13: <body>

14: <h3>Repeater控件 - Null值字段与ItemIndex</h3>

15: <form Runat="server">

16: <asp:AccessDataSource Id="Products" Runat="server"

17:      DataFile="~/Products.mdb"

18:      SelectCommand="SELECT * FROM Products"/>

19: <asp:Repeater Id="repeater" Runat="server"

20:      DataSourceID="Products">

21:  <ItemTemplate>

22:   <font color="red">

23:   <%# Container.ItemIndex + 1 %> :

24:   <%# showNull(Eval("ProductName").ToString())%> -

25:   <%# showNull(Eval("ProductNote").ToString())%>

26:   </font>

27:  </ItemTemplate>

28:  <AlternatingItemTemplate>

29:   <font color="blue">

30:   <%# Container.ItemIndex + 1 %> :

31:   <%# showNull(Eval("ProductName").ToString())%> -

32:   <%# showNull(Eval("ProductNote").ToString())%>

33:   </font>

34:  </AlternatingItemTemplate>

35:  <SeparatorTemplate>

36:    <br>

37:  </SeparatorTemplate>

38: </asp:Repeater>

39: </form>

40: </body>

41: </html>

2. 程序说明

3~9行是showNull()函数,第16~18行是数据源控件,第19~38行是 Repeater控件,第21~27行是ItemTemplate标记,第28~34行是AlternativeItemTemplate标记。

23行和30行显示ItemIndex属性值,第35~37行是SeparatorTemplate标记,使用<br>标记分隔列表选项。

3. 网页预览

Ch10文件夹建立为虚拟目录后,启动浏览程序执行 ASP.NET 程序,可以看到 Repeater 控件以项目编号显示的记录数据,如图10-4所示。

10-4  Ch10-2-2.aspx运行结果

上图使用项目编号显示记录数据,第1条记录的ProductNote字段是空值,所以显示 [N/A],因为SeparatorTemplate 标记是<br>标记,所以项目会分行显示

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值