zoukankan      html  css  js  c++  java
  • Asp.net 通过Repeater循环添加对应的一组控件

    Asp.net 通过Repeater循环添加对应的一组控件,主要用于后台向前台 动态的 重复的post数据时,能够很好的将前台代码的重复部分 归一,并且能够通过后台添加任意数量的重复模块。在实际项目中经常会用到这样的处理方法。此文主要简单的介绍一下Repeater的结构与使用方法。

    例如我们想要实现如下截图的样式,当然了,数据是从后台获取到,数据的行数是不定的。

    首先定义数据结构:(定义的数据结构尽量要包含前台显示的结构)

        public class Evaluation
        {
    
            private string productid;
            private string rating;
    
            public Evaluation(string productid, string rating)
            {
                this.productid = productid;
                this.rating = rating;
            }
    
            public string ProductID
            {
                get
                {
                    return productid;
                }
            }
    
            public string Rating
            {
                get
                {
                    return rating;
                }
            }
        }

    之后处理后台方法:

        public partial class TestRepeatorControl : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    ArrayList values = new ArrayList();
    
                    values.Add(new Evaluation("Razor Wiper Blades", "Good"));
                    values.Add(new Evaluation("Shoe-So-Soft Softening Polish", "Poor"));
                    values.Add(new Evaluation("DynaSmile Dental Fixative", "Fair"));
    
                    Repeater1.DataSource = values;
                    Repeater1.DataBind();
                }
    
            }
    
            protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                // This event is raised for the header, the footer, separators, and items.
    
                // Execute the following logic for Items and Alternating Items.
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
    
                    if (((Evaluation)e.Item.DataItem).Rating == "Good")
                    {
                        ((Label)e.Item.FindControl("RatingLabel")).Text = "<b>***Good***</b>";
                    }
                }
    
            }
        }

    这里可以看出 repeater 的数据源需要一个实现了 IEnumerable 接口的对象实例,例如此处用的是 ArrayList 的对象实例。

    而Repeater1_ItemDataBound方法,则可以对循环的Item进行特殊处理。

    最后来看前台代码实现:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestRepeatorControl.aspx.cs" Inherits="EricSunWebAppProject.TestRepeatorControl" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
                    
                    <HeaderTemplate>
                        <table border="1">
                            <tr>
                                <td><b>Product</b></td>
                                <td><b>Consumer Rating</b></td>
                            </tr>
                    </HeaderTemplate>
    
                    <ItemTemplate>
                            <tr>
                                <td> <asp:Label ID="Label1" Text='<%# DataBinder.Eval(Container.DataItem, "ProductID") %>' Runat="server"/> </td>
                                <td> <asp:Label id="RatingLabel" Text='<%# DataBinder.Eval(Container.DataItem, "Rating") %>' Runat="server"/> </td>
                            </tr>
                    </ItemTemplate>
    
                    <FooterTemplate>
                        </table>
                    </FooterTemplate>
    
                </asp:Repeater>
            </div>
        </form>
    </body>
    </html>

     这里可以清晰的看到repeater有三段结构:HeaderTemplate、ItemTemplate 和 FooterTemplate。

     那么在进行数据源遍历显示的时候,重复的部分只是ItemTemplate所包含的部分。 HeaderTemplate 和 FooterTemplate 所包含的部分只显示一份。这样就很好的能够处理:“首、尾 特殊,内容重复” 的情形。

    这里循环处理的是tr,td,如果我们想要循环处理自己定义的控件,或者比较复杂的控件(比如 TreeView 等),那么可以将我们需要重复的控件放在ItemTemplate 中来替换此处的tr,td。

    附加msdn相关文章: 

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx

  • 相关阅读:
    openmp 循环并行化循环嵌套内部无法并行
    c++:strcat潜在的错误不报告
    script php / phpfpm /
    webserver waf / WAF 2.0 / ASERVER/1.2.9
    web test LoadRunner FTP / vsftpd / vsftp / WebUploader 0.1.5 / shangchuan
    my ReadTravel_Singapore / singapore / xinjiapo / lvyou / travel
    OS Security var_log_secure / services / port
    EF操作数据库的步骤和一些简单操作语句
    (大快人心,必须转啊)中国体操男队完美逆转卫冕 日本申诉成功获银牌
    [置顶] 【C/C++学习】之一、指针和引用的区别
  • 原文地址:https://www.cnblogs.com/mingmingruyuedlut/p/2987096.html
Copyright © 2011-2022 走看看