asp.net学习之Repeater控件
文章摘自:http://www.cnblogs.com/shipfi/archive/2009/10/19/1585703.html
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>
asp.net学习之Repeater控件的更多相关文章
-
asp.net学习之DataList控件
asp.net学习之DataList控件 DataList控件与Repeater控件一样由模板驱动,与Repeater控件不同的是: DataList控件默认输出是一个HTML表格.DataLis ...
-
asp.net学习之数据绑定控件、数据源控件概述
原文:asp.net学习之数据绑定控件.数据源控件概述 1.asp.net数据绑定控件分为三大类,每个类分别进行详细: ● 列表式数据绑定控件: 列表式数据绑定控件常用来在一个表格内的一个字 ...
-
asp.net学习之 数据绑定控件--表格绑定控件
原文:asp.net学习之 数据绑定控件--表格绑定控件 数据绑定 Web 服务器控件是指可绑定到数据源控件,以实现在 Web 应用程序中轻松显示和修改数据的控件.数据绑定 Web 服务器控件 ...
-
asp.net学习之 数据绑定控件--List数据绑定控件
原文:asp.net学习之 数据绑定控件--List数据绑定控件 List控件(如 CheckBoxList.DropDownList.ListBox 和 RadioButtonList 类)继承自L ...
-
asp.net动态网站repeater控件使用及分页操作介绍
asp.net动态网站repeater控件使用及分页操作介绍 1.简单介绍 Repeater 控件是一个容器控件,可用于从网页的任何可用数据中创建自定义列表.Repeater 控件没有自己内置的呈现功 ...
-
[ASP.NET]asp.net Repeater控件的使用方法
asp.net Repeater控件的使用方法 -- : 4770人阅读 评论() 收藏 举报 asp.netserveraspdatasetdeletexhtml 今天学习了,Repeater控件 ...
-
asp.net中Repeater控件用法笔记
大家可能都对datagrid比较熟悉,但是如果在数据量大的时候,我们就得考虑使用 repeater作为我们的数据绑定控件了.Repeater控件与DataGrid (以及DataList)控件的主要区 ...
-
ASP.NET- 查找Repeater控件中嵌套的控件
如何在Repeater的HeaderTemplate和FooterTemplate模板中寻找控件?在Repeater的ItemTemplate模板中的控件,我们可以用Items属性来遍历行并用Find ...
-
Asp.net Repeater控件
Repeater控件和DataList控件,可以用来一次显示一组数据项.比如,可以用它们显示一个数据表中的所有行. Repeater控件完全由模板驱动,提供了最大的灵活性,可以任意设置它的输出 ...
随机推荐
-
ps commad
要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续: (2) top:如果想对进 ...
-
java内存映射文件
内存映射文件能够让我们创建和修改大文件(大到内存无法读入得文件),对于内存映射文件,我们可以认为是文件已经全部被读入到内存当中,然后当成一个大的数字来访问,简化修改文件的代码. 1.directBuf ...
-
Gradle多项目配置的一个demo
ParentProject├─build.gradle├─settings.gradle├─libs├─subProject1├────────────build.gradle├─────────── ...
-
谷歌Dremel即时数据分析解决方案
Hadoop技术已经无处不在.不管是好是坏,Hadoop已经成为大数据的代名词.短短几年间,Hadoop从一种边缘技术成为事实上的标准.看来,不仅现在Hadoop是企业大数据的标准,而且在未来,它的地 ...
-
eclipse代码提示配置
打开 MyEclipse 6.5,然后“window”→ “Preferences” 2.选择“java”, 展开, “Editor”, 选择“Content Assist”. 3.选择“Conten ...
-
处理Block中的self问题(Capturing &#39;self&#39; strongly in this block is likely to lead to a retain cycle)
警告:ARC Retain Cycle Capturing 'self' strongly in this block is likely to lead to a retain cycle 代码: ...
-
一步一步学习Vue(十三)
最近比较忙,忙着工作交接,忙着招人.忙着各种会,更新很少,这一篇也是作为本入门系列的最后一篇了,以后可能会写一些自己在前端这块的心得或者体会了,无关乎使用什么框架,可能就是原生的js.dom.编程模式 ...
-
C# Serializable
System.SerializableAttribute 串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上,在取消串行化时,对象会被还原,且不能与其原 ...
-
linux学习笔记-软件包的相关知识
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.软件包种类 1.源码包 源码包即提供源代码的发行包 2.二进制包 二进制包即提供二进制文件的发行包 安装方法查找二进制包官网 ...
-
vector 用法小例子
1. vector<int> vec; vec.push_back(1); 2. vector<int> vec(10); vec[0] = 1;