Search code examples
c#asp.netrepeater

How to retrieve a sibling / neighbour control in a repeater after autopostback


I have a dropdownlist with the SelectedIndexChanged event and autopostback = true. In the aspx on right of this dropdownlist I have a label. But these are inside a repeater. So when the SelectedIndexChanged fires how can I catch the label object in the server-side if the scope of the event is from the DDL and not the repeater.

Aspx

<asp:Repeater ID="repeater1" runat="server" 
   OnItemDataBound="repeater1_ItemDataBound" 
   OnItemCommand="repeater1_ItemCommand">
   <ItemTemplate>
      <asp:DropDownList ID="ddl1" runat="server" 
         OnSelectedIndexChanged="dd1_SelectedIndexChanged" 
         AutoPostBack="true"  /> 
      <asp:Label ID="label1" runat="server" />
   </ItemTemplate>
</asp:Repeater>

Code-behind

protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
{
   //How to get this label1
   //label1.Text = "Message" ;
}

Solution

  • You can use Control.Parent Property.

    protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
    {
        var dropdownlist = sender as DropDownList;
        var label = dropdownlist.Parent.FindControl("label1") as Label;
        label.Text = "Message";
    }
    

    Or Control.NamingContainer Property

    protected void ddl1_SelectedIndexChanged(object sender, EventArgs e)
    {
        var dropdownlist = sender as DropDownList;
        var label = dropdownlist.NamingContainer.FindControl("label1") as Label;
        label.Text = "Message";
    }