Repeater控件中获取值和控件

之前发过一篇博文,涉及到了在GRIEVIEW中捕获子控件的方法。 奈何GRIDVIEW过于庞大,在追求效率的今天显得过于笨重。
            正好有在Repeater中捕获子控件的需求,于是在查阅了相关文档和几经失败尝试之后得出了下面的一些经验和收获与大家分享。
首先我们先来了解一下实现以上功能会涉及到的一些知识。以MSND为参考。
  • RepeaterItem对象表示Repeater控件中的项,如标题部分、脚注部分或数据项。
  • Repeater控件的数据项存储在RepeaterItemCollection对象中,通过使用Repeater控件的Items属性可以访问该对象。

  • 可以使用RepeaterItem对象以编程方式访问Repeater控件中某项的属性。

MSDN示例分析 

<%@ Page Language="C#"AutoEventWireup="True"%>
<%@ Import Namespace="System.Data"%>
<html>
<head>
   <script language="C#"runat="server">
     void  Page_Load(Object Sender, EventArgs e)
      {
         if(!IsPostBack)
         {
            ArrayList  values =new  ArrayList();
             values.Add(newPositionData("Item 1","$6.00"));
            values.Add(newPositionData("Item 2","$7.48"));
            values.Add(newPositionData("Item 3","$9.96"));

      //为Repeater准备数据,核心步骤,只有Repeater中已经绑定了数据才

       //可能获取到需要的项和控件
            Repeater1.DataSource = values;
            Repeater1.DataBind();
         }
      }
     void  Button_Click(Object Sender, EventArgs e)
      {       
         Label1.Text ="The Items collection contains: <br>";

        foreach(RepeaterItem  item  in Repeater1.Items)
         { //读取对应项的值      
            Label1.Text += ((DataBoundLiteralControl)item.Controls[0]).Text +
                             "<br>";

           //获取控件

           Label2.Text += ((Label)item.Controls[0].FindControl("lable2")).Text +
                              "<br>";
         }
      }  
      public class  PositionData
      {
        private string item;
        private string price;
         public  PositionData(string  item,string price)
         {
           this.item = item;
           this.price = price;
         }
         public string  Item
         {
           get  { return  item; }
         }
         public string  Price
         {
           getreturn  price; }
         }
      }
   </script>
</head>
<body>
   <form runat=server>
      <h3>Repeater Example</h3>
      <p>   
      <asp:Repeater id="Repeater1"  runat="server">
         <HeaderTemplate>
            <table border=1>
               <tr>
                  <td><b>Item</b></td>
                  <td><b>Price</b></td>

                 <td><b>Label</b></td>
               </tr>
         </HeaderTemplate>
          <ItemTemplate>
            <tr>
               <td> <%# DataBinder.Eval(Container.DataItem,"Item") %> </td>
               <td> <%# DataBinder.Eval(Container.DataItem,"Price") %> </td>

//这里我们添加一个服务器端测试控件

            <td><asp:Label ID="lable2" runat="server" text='<%# DataBinder.Eval(Container.DataItem, "Price") %>'></asp:Label></td>
           

            </tr>
         </ItemTemplate>
         <FooterTemplate>
            </table>
         </FooterTemplate>
      </asp:Repeater>
      <p>
      <asp:Button id=" Button1"Text="Display Items in Repeater"  OnClick="Button_Click"  runat="server"/>
      <br><br>
      <asp:Label id="Label1"  runat="server"/>
   </form>
</body>
</html>

 
总结:
在数据绑定的前提下,获取Repeater的项和子控件才能成为可能
Repeater控件ASP.NET的一个数据绑定控件,用于在页面重复显示数据。想要根据数据库状态不同改变图片,需要在Repeater控件ItemDataBound事件进行判断和操作。 具体步骤如下: 1. 在Repeater控件ItemTemplate添加一个Image控件,用于显示图片。 2. 在Repeater控件ItemDataBound事件中获取当前数据行的状态,可以通过e.Item.DataItem获取。 3. 根据状态不同,设置Image控件的ImageUrl属性为不同的图片路径。 以下是示例代码: ``` <asp:Repeater ID="repeater1" runat="server" OnItemDataBound="repeater1_ItemDataBound"> <ItemTemplate> <asp:Image ID="imgStatus" runat="server" /> </ItemTemplate> </asp:Repeater> protected void repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { // 获取当前数据行的状态 int status = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "Status")); // 根据状态设置图片路径 Image imgStatus = (Image)e.Item.FindControl("imgStatus"); if (status == 1) { imgStatus.ImageUrl = "status1.png"; } else if (status == 2) { imgStatus.ImageUrl = "status2.png"; } else { imgStatus.ImageUrl = "default.png"; } } } ``` 上述代码,根据数据库的Status字段的不同,设置了对应的图片路径。在Repeater控件ItemDataBound事件,通过DataBinder.Eval方法获取当前数据行的状态,并根据其设置Image控件的ImageUrl属性。需要注意的是,在设置Image控件的ImageUrl属性时,需要使用相对路径或绝对路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值