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" />                &nbsp;|&nbsp;<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控件的更多相关文章

  1. asp.net学习之DataList控件

    asp.net学习之DataList控件   DataList控件与Repeater控件一样由模板驱动,与Repeater控件不同的是: DataList控件默认输出是一个HTML表格.DataLis ...

  2. asp.net学习之数据绑定控件、数据源控件概述

    原文:asp.net学习之数据绑定控件.数据源控件概述 1.asp.net数据绑定控件分为三大类,每个类分别进行详细:      ● 列表式数据绑定控件: 列表式数据绑定控件常用来在一个表格内的一个字 ...

  3. asp.net学习之 数据绑定控件--表格绑定控件

    原文:asp.net学习之 数据绑定控件--表格绑定控件     数据绑定 Web 服务器控件是指可绑定到数据源控件,以实现在 Web 应用程序中轻松显示和修改数据的控件.数据绑定 Web 服务器控件 ...

  4. asp.net学习之 数据绑定控件--List数据绑定控件

    原文:asp.net学习之 数据绑定控件--List数据绑定控件 List控件(如 CheckBoxList.DropDownList.ListBox 和 RadioButtonList 类)继承自L ...

  5. asp.net动态网站repeater控件使用及分页操作介绍

    asp.net动态网站repeater控件使用及分页操作介绍 1.简单介绍 Repeater 控件是一个容器控件,可用于从网页的任何可用数据中创建自定义列表.Repeater 控件没有自己内置的呈现功 ...

  6. [ASP.NET]asp.net Repeater控件的使用方法

    asp.net Repeater控件的使用方法 -- : 4770人阅读 评论() 收藏 举报 asp.netserveraspdatasetdeletexhtml 今天学习了,Repeater控件 ...

  7. asp.net中Repeater控件用法笔记

    大家可能都对datagrid比较熟悉,但是如果在数据量大的时候,我们就得考虑使用 repeater作为我们的数据绑定控件了.Repeater控件与DataGrid (以及DataList)控件的主要区 ...

  8. ASP.NET- 查找Repeater控件中嵌套的控件

    如何在Repeater的HeaderTemplate和FooterTemplate模板中寻找控件?在Repeater的ItemTemplate模板中的控件,我们可以用Items属性来遍历行并用Find ...

  9. Asp.net Repeater控件

    Repeater控件和DataList控件,可以用来一次显示一组数据项.比如,可以用它们显示一个数据表中的所有行.     Repeater控件完全由模板驱动,提供了最大的灵活性,可以任意设置它的输出 ...

随机推荐

  1. WebServices CXF开发常见异常及解决方法

    2011-7-14 10:10:59 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass ...

  2. 菜鸟译文(三)——JDK6和JDK7中substring()方法的对比

    substring(int beginIndex, int endIndex)方法在JDK6和JDK7中是不同的.了解他们的区别可以让我们更好的使用这个方法.方便起见,以下用substring() 代 ...

  3. 图像拼接 SIFT资料合集

    转自 http://blog.csdn.net/stellar0/article/details/8741780 分类: 最近也注意一些图像拼接方面的文章,很多很多,尤其是全景图拼接的,实际上类似佳能 ...

  4. 阿里云 Redis 服务遇到的问题

    ERR unknown command eval 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: St ...

  5. 使用SQL Server 2014 In-Memory 内存数据库时需要注意的地方

    转载: http://www.infoq.com/cn/articles/sql-server-2014-memory-database http://www.cnblogs.com/Amaranth ...

  6. Linux下php5.3编译oracle客户端

    因项目需要在linux下进行php5.3的oracle客户端编译,简要介绍一下步骤及走过的弯路. 1.下载Oracle客户端程序包,其中包含OCI.OCCI和JDBC-OCI等相关文件. 1.1下载文 ...

  7. git delete repository

  8. linux下 C++ 读取mat文件 MATLAB extern cyphon scipy 未完待续

    1.使用Matlab的C扩展,需要用户安装matlab. g++ -L/media/exsoftware/MATLAB/R2013b/bin/glnxa64 -Wl,-rpath,/media/exs ...

  9. [转]阎宏博士的JAVA与模式

    阎宏,1964年出生于天津市.1987年毕业于中国科技大学近代物理系,1990年于中科院理论物理所获硕士学位,1992年获博士学位,翌年赴日本京都大学进行博士后研究工作. 作者曾于美国花旗银行(Cit ...

  10. ux.form.field.SearchField 列表、树形菜单查询扩展

    //支持bind绑定store //列表搜索扩展,支持本地查询 //支持树形菜单本地一级菜单查询 Ext.define('ux.form.field.SearchField', { extend: ' ...