Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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)
{

} 
like image 385
PercivalMcGullicuddy Avatar asked Dec 04 '22 07:12

PercivalMcGullicuddy


2 Answers

I would put the content in Labels, and access the Labels in the code behind:

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

And in the code behind:

foreach (RepeaterItem ri in Repeater1.Items)
{
    Label quantityLabel = (Label)ri.FindControl("lblQuantity");
    Label partNumberLabel = (Label)ri.FindControl("lblPartNumber");

    string quantityText = quantityLabel.Text;
    string partNumberText = partNumberLabel.Text;
}
like image 82
James Johnson Avatar answered Apr 29 '23 03:04

James Johnson


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;
            }
        }
    }    
like image 29
Brissles Avatar answered Apr 29 '23 02:04

Brissles