Repeater控件
Repeater控件和DataList控件,可以用来一次显示一组数据项。比如,可以用它们显示一个数据表中的所有行。
Repeater控件完全由模板驱动,提供了最大的灵活性,可以任意设置它的输出格式。DataList控件也由模板驱动,和Repeater不同的是,DataList默认输出是HTML表格,DataList将数据源中的记录输出为HTML表格一个个的单元格。
1. Repeater控件显示数据
要使用Repeater控件显示数据,必须创建ItemTemplate。如下所示:
例1:使用ItemTemplate显示数据
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
<ItemTemplate>
<div class="movies">
<h1><%#Eval("Title") %></h1>
</div>
<b>Directed by:</b><%#Eval("Director") %>
<br />
<b>Description:</b><%#Eval("Description") %>
</ItemTemplate>
</asp:Repeater>
以上代码,通过浏览器可以看到,.net不会改变里面的结构,模板里面怎么排列,数据显示也怎么样显示。它的HTML如下所示:、
<div class="movies">
<h1>史密斯行动</h1>
</div>
<b>Directed by:</b>Doug Liman
<br />
<b>Description:</b>约翰(布拉德?皮特 Brad Pitt 饰)和
<div class="movies">
<h1>暴力街区</h1>
</div>
<b>Directed by:</b>Luc Besson
<br />
<b>Description:</b>卧虎藏龙而又凌乱不堪的13区…
所以,Repeater的灵活性就在这个上面,完全可以自由发挥,想怎么显示就怎么显示。例如,都可以把它放在Javascript代码中
<script type=”text/javascript”>
<asp:Repeater id=”rptPhotos” Runat=”server”>
<ItemTemplate>
<%# Eval(“Name”, "photos.push(‘Photos/{0}’)") %>
</ItemTemplate>
</asp:Repeater>
</script>
以上,photos是一个Javscript数组对象。Repeater生成的数据,最后就像以下这样:
<script type="text/javascript">
photos.push('Photos/1.jpg');
photos.push('Photos/2.jpg');
photos.push('Photos/3.jpg');
photos.push('Photos/4.jpg');
…
</script>
2. Repeater中使用模板
Repeater支持以下5种模板
● ItemTemplate : 对每一个数据项进行格式设置 【Formats each item from the data source.】
● AlternatingItemTemplate : 对交替数据项进行格式设置
● SeparatorTemplate : 对分隔符进行格式设置
● HeaderTemplate : 对页眉进行格式设置
● FooterTemplate : 对页脚进行格式设置
以上,英文中使用了Formats item from datasource这样的话,就说明Repeater控件主要是用来对数据进行Format的,控制数据怎么样排列,怎么样显示。
Repeater必须使用的是Itemtemplate,其它的类型模板按需添加。
例2:以下通过CSS控制,显示了一个比较不错的列表项:
<style type="text/css">
html {
background-color:Silver
}
.content {
width:600px;
border:soild 1px black;
background-color:White;
}
.movies {
border-collapse:collapse;
}
.movies th,.movies td {
padding:10px;
border-bottom:1px solid black;
}
.alternating {
background-color:#eeeeee;
}
</style>
<div class="content">
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
<HeaderTemplate> <!-- 显示头部 -->
<table class="movies"> <!-- table头部声明-->
<tr>
<th>Movie Title</th>
<th>Movie Director</th>
<th>Box Office Totals</th>
</tr>
</HeaderTemplate>
<ItemTemplate> <!-- 数据行 -->
<tr>
<td><%#Eval("Title") %></td>
<td><%#Eval("Director") %></td>
<td><%#Eval("BoxOfficeTotals","{0:c}") %></td> <!-- 格式化为货币形式 -->
</tr>
</ItemTemplate>
<AlternatingItemTemplate> <!-- 交错行 -->
<tr class="alternating">
<td><%#Eval("Title") %></td>
<td><%#Eval("Director") %></td>
<td><%#Eval("BoxOfficeTotals","{0:c}") %></td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate> <!-- 脚注行 -->
</table> <!-- table尾 -->
</FooterTemplate>
</asp:Repeater>
</div>
以上,显示的样式如下所示:
3. Repeater控件的事件处理
Repeater控件有以下事件:
● DataBinding : Repeater控件绑定到数据源时触发
● ItemCommand : Repeater控件中的子控件触发事件时触发
● ItemCreated : 创建Repeater每个项目时触发
● ItemDataBound : Repeater控件的每个项目绑定数据时触发
例3:使用Repeater控件的事件支持编辑、更新、删除
=== 后台代码 ===
<script runat=”server”>
// The name of the primary key column
string DataKeyName = "Id";
/// 把每个列的ID存储在ViewState["Keys"]对象中,ViewState["Keys"]是一个HashTable对象。
Hashtable Keys
{
get
{
if (ViewState["Keys"] == null)
ViewState["Keys"] = new Hashtable();
return (Hashtable)ViewState["Keys"];
}
}
/// Repeater控件绑定到数据源时触发
/// 每次更新,删除,增加后,都会触发这个事件,Keys中的值都会被清除。
/// 在ItemDataBound事件发生时,被新的值填充
protected void rptMovies_DataBinding(object sender, EventArgs e)
{
Keys.Clear();
}
/// 每个项目绑定数据时触发
protected void rptMovies_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// 如果是数据列,把ID列取出来,加入到ViewState["Keys"]中
// DataBinder.Eval是在运行时计算数据绑定表达式。这样的用法要记住.
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==ListItemType.AlternatingItem)
{
Keys.Add(e.Item.ItemIndex, DataBinder.Eval(e.Item.DataItem, "Id"));
}
}
/// 当点击Update,Insert,Delete按钮时触发
protected void rptMovies_ItemCommand(object source, RepeaterCommandEventArgs e)
{
switch (e.CommandName)
{
case "Update":
UpdateMovie(e);
break;
case "Insert":
InsertMovie(e);
break;
case "Delete":
DeleteMovie(e);
break;
}
}
/// Update a movie record
protected void UpdateMovie(RepeaterCommandEventArgs e)
{
// 从一个数据项中获得相应的控件
TextBox txtTitle = (TextBox)e.Item.FindControl("txtTitle");
TextBox txtDirector = (TextBox)e.Item.FindControl("txtDirector");
CheckBox chkInTheaters = (CheckBox)e.Item.FindControl("chkInTheaters");
// 填充sqlDataSource的UpdateParameters值
srcMovies.UpdateParameters["Id"].DefaultValue =
Keys[e.Item.ItemIndex].ToString();
srcMovies.UpdateParameters["Title"].DefaultValue = txtTitle.Text;
srcMovies.UpdateParameters["Director"].DefaultValue = txtDirector.Text;
srcMovies.UpdateParameters["InTheaters"].DefaultValue =
chkInTheaters.Checked.ToString();
// 进行Update
srcMovies.Update();
}
/// Insert a movie record
protected void InsertMovie(RepeaterCommandEventArgs e)
{
// 从一个数据项中获得相应的控件
TextBox txtTitle = (TextBox)e.Item.FindControl("txtTitle");
TextBox txtDirector = (TextBox)e.Item.FindControl("txtDirector");
CheckBox chkInTheaters = (CheckBox)e.Item.FindControl("chkInTheaters");
// 填充sqlDataSource的InsertParameters值
srcMovies.InsertParameters["Title"].DefaultValue = txtTitle.Text;
srcMovies.InsertParameters["Director"].DefaultValue = txtDirector.Text;
srcMovies.InsertParameters["InTheaters"].DefaultValue =
chkInTheaters.Checked.ToString();
// Fire the InsertCommand
srcMovies.Insert();
}
/// Delete a movie record
protected void DeleteMovie(RepeaterCommandEventArgs e)
{
// 设置sqlDataSource的DeleteParameters值
srcMovies.DeleteParameters["Id"].DefaultValue = Keys[e.Item.ItemIndex].ToString();
// Fire the DeleteCommand
srcMovies.Delete();
}
</script>
=== 前台页面 ===
<asp:Repeater id="rptMovies" DataSourceID="srcMovies" Runat="server"
OnItemCommand="rptMovies_ItemCommand" OnItemDataBound="rptMovies_ItemDataBound" OnDataBinding="rptMovies_DataBinding">
<HeaderTemplate>
<table class="movies">
<tr> <th>Title</th><th>Director</th><th>In Theaters</th> </tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:TextBox id="txtTitle" Text='<%#Eval("Title")%>' Runat="server" /></td>
<td><asp:TextBox id="txtDirector" Text='<%#Eval("Director")%>' Runat="server" /></td>
<td><asp:CheckBox id="chkInTheaters" Checked='<%#Eval("InTheaters")%>'Runat="server" /></td>
<td><asp:LinkButton id="lnkUpdate" CommandName="Update" Text="Update" Runat="server" />
| <asp:LinkButton id="lnkDelete" CommandName="Delete" Text="Delete"
OnClientClick="return confirm(‘Are you sure?');" Runat="server" /></td>
</tr>
</ItemTemplate>
<FooterTemplate>
<tr>
<td><asp:TextBox id="txtTitle" Runat="server" /></td>
<td><asp:TextBox id="txtDirector" Runat="server" /></td>
<td><asp:CheckBox id="chkInTheaters" Runat="server" /></td>
<td><asp:LinkButton id="lnkInsert" CommandName="Insert" Text="Insert" Runat="server" /></td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
<asp:SqlDataSource id="srcMovies" ConnectionString="<%$ ConnectionStrings:Movies %>"
SelectCommand="SELECT Id,Title,Director,InTheaters FROM Movies"
UpdateCommand="UPDATE Movies SET Title=@Title,Director=@Director,InTheaters=@InTheaters WHERE Id=@Id"
InsertCommand="INSERT Movies(Title,Director,InTheaters) VALUES(@Title,@Director,@InTheaters)"
DeleteCommand="DELETE Movies WHERE Id=@Id" Runat="server">
<UpdateParameters>
<asp:Parameter Name="Id" />
<asp:Parameter Name="Title" />
<asp:Parameter Name="Director" />
<asp:Parameter Name="InTheaters" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="Title" />
<asp:Parameter Name="Director" />
<asp:Parameter Name="InTheaters" />
</InsertParameters>
<DeleteParameters>
<asp:Parameter Name="Id" />
</DeleteParameters>
</asp:SqlDataSource>
repeater控件灵活性很大,不止可以循环表格,还可以循环div等其他内容:
例如循环div:
代码:
<asp:Repeater ID="Repeater1" runat="server"><HeaderTemplate></HeaderTemplate><ItemTemplate><div class="div1"><%#Eval("NickName") %></div></ItemTemplate><FooterTemplate></FooterTemplate></asp:Repeater>
repeater的Command用法:
1、ItemCommand事件 - Repeater中所有可以触发事件的控件,都会来执行这一个事件
2、CommandName - 随意的起名,在后台事件中按照这个名字来区分你按下的是哪一个功能按钮
3、CommandArgument - 事件数据,通常放置主键值,在后台使用 e.CommandArgument来获取主键数据
转载于:https://www.cnblogs.com/bosamvs/p/5689381.html
Repeater控件相关推荐
- Datalist控件,Repeater控件如何分页?
Asp.net提供了三个功能强大的列表控件:DataGrid.DataList和Repeater控件,但其中只有DataGrid控件提供分页功能.相对DataGrid,DataList和Repeate ...
- Repeater控件的分页问题
作者:zhoubin@mail.sdu.edu.cn 以前做ASP的时间不算短,可是做ASP.NET我是个新手.前几天做项目,遇到一个问题,要求比较复杂的数据格式显示,用DataGrid非常难实现,后 ...
- 使用嵌套的Repeater控件显示分级数据
作者:wincheer 来自:Asp.Net中文专业网 简介 本文描述如何使用嵌套的Repeater 控件来显示分级数据 .当然了,你也可以将这一技术应用到其他的列表绑定控件上去,比如DataGri ...
- 改变Repeater控件中按钮颜色
昨晚有在论坛看到一帖,手上的工作一直忙到现在,Insus.NET现在抽点时间尝试实现它. Insus.NET没有使用数据库作为数据源,而是使用List<T>作为数据源.因此你在这篇博文中学 ...
- Repeater控件的使用
Repeater控件的使用 今天学习了Repeater控件的使用,Repeater控件没有定义样式,要自己编写HTML来定义样式,这样工作量可能会大一些,但它所带来的好处是可以随心所欲地定义自己数据的 ...
- onmouseover和onmouseout在Repeater控件中应用
如果你曾看过这篇,http://www.cnblogs.com/insus/articles/1411057.html ,它是在GridView控件中演示,但是它的方法在Repeater控件是无法复制 ...
- 读书笔记:《Aspx开发200问》——如何实现Repeater控件的分页
由于Repeater控件没有分页相关的属性,要使用System.Web.UI.WebControl中的PageDataSource类. PageDataSource封装了DataGrid控件的分页属性 ...
- Repeater控件最后一笔记录高亮显示
Insus.NET以前有写过 <Repeater控件第前10笔记录高亮显示> 不过,现在有一个想法,就是最后一笔记录高亮显示,怎样实现? 技术要求,就是获取最后一笔的索引即可.可以从数据源 ...
- asp.net学习之Repeater控件
Repeater控件和DataList控件,可以用来一次显示一组数据项.比如,可以用它们显示一个数据表中的所有行. Repeater控件完全由模板驱动,提供了最大的灵活性,可以任意设置它的输 ...
最新文章
- gis属性表怎么导成excel_第022篇:ArcGIS中将属性表直接导出为Excel的方法
- 【Redis】Redis介绍与Redis3在Window下的安装
- Apache Kafka-初体验Kafka(03)-Centos7下搭建kafka集群
- 【软件工程】第一章重点
- 风变编程python助教_花30天时间,学完了风变编程Python基础语法课
- 客户要求ASP.NET Core API返回特定格式,怎么办?
- 基于ASP.NET Core的模块化设计: 虚拟文件系统
- html5 audio 获取播放时间,html5 audio 延时获取播放路径播放失败
- 布隆过滤器及其数学推导
- android studio有时打不开,android studio 打不开的几种可能
- .net 注册引用的dll
- 另类多线程生产者与消费者模式
- 高斯克吕格投影中有关带号与经度的关系
- PHP抖音无水印解析视频代码+思路
- Java反射创建对象效率高还是通过new创建对象的效率高?
- 全新AIY Edge TPU开发板惊艳亮相,今秋发布!
- 16进制在计算机上显示,16进制计算器(16进制计算器安卓版)
- English——slang about body
- My blog has been migrated to GitHub.
- 西门子博途1500双驱同步,伺服同步运行程序,3轴码垛博途程序,scl项目,同步轴走PN工艺对象
热门文章
- DeeoID:Deep learning face representation from predicting 10,000 classes
- MPAndroidChart的具体属性方法
- cocos2d-x 3.1.1 学习笔记[17] 关于这些活动功能
- Android Studio导入github项目详解
- Cordova探险系列(一个)
- My interested stuff(2008-07-10)
- 客户端代码压缩成zip和服务器开启gzip
- XmlSerializer 对象序列化成XML 自定义编码格式(gb2312)
- 使用salt-api来搭建salt自动化平台
- Mac OS X上的lipo命令详解