Search code examples
c#.netloopsrepeaterdatabinder

C# - Looping through a Repeater control and accessing values added via DataBinder.Eval()


I have a Repeater control that adds rows to a table. The data inside each cell comes from a Datatable that is bound to the repeater.

Simplified Example:

<asp:Repeater ID="Repeater1" runat="server">
  <ItemTemplate>
   <tr>
     <td>
        <%# DataBinder.Eval(Container.DataItem, "PartNumber")%>
     </td>
     <td>
         <%# DataBinder.Eval(Container.DataItem, "Quantity")%>
     </td>
   </tr>
</ItemTemplate>

In code behind I would like to be able to loop through each repeater row and get the value for Quantity for that row.

So far all I have is:

foreach (RepeaterItem ri in Repeater1.Items)
{

} 

Solution

  • You could use labels:

    <td>      
        <asp:Label ID="lblPartNumber" runat="server" Text='<%#Eval("PartNumber")%>' />      
    </td>      
    <td>      
        <asp:Label ID="lblQuantity" runat="server" Text='<%#Eval("Quantity")%>' />     
    </td>  
    

    And grab the values of the labels on the repeater OnItemDataBound event.

    protected void repeater_OnItemDataBound(object sender, RepeaterItemEventArgs  e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
        {
            foreach (Control c in e.Item.Controls)
            {
                if (c is Label)
                {
                    // Grab label
                    Label lbl = c as Label;
                    String your_value = lbl.Text;
                }
            }
        }