Question

J'ai une liste déroulante sur un contrôle de répéteur, ainsi qu'un bouton.

Le bouton est désactivé jusqu'à ce qu'un élément valide soit sélectionné dans DropDownList, lorsque je souhaite l'activer. Malheureusement, je n'arrive pas à y arriver.

Trouvé le répéteur par: (La méthode .As () est une méthode d'extension pour (objet en tant que T), cela facilite le casting>)

sender.As<Control>().NamingContainer.Parent.As<Repeater>()

Cependant, le répéteur que je récupère ne m'aide pas car la fonction FindControl (nom de chaîne) ne renvoie rien - et n'affiche rien d'utile dans la fenêtre de surveillance.

Alors, comment puis-je obtenir un contrôle frère (un ImageButton dans ce cas) sur un répéteur à partir d'un événement d'un autre élément du répéteur (DropDown_SelectedIndexChanged dans ce cas)?

MODIFIER

J'ai finalement travaillé

sender.As<ImageButton>().NamingContainer.As<RepeaterItem>().FindControl("ControlName")
Était-ce utile?

La solution

Je pense avoir la réponse à votre question:

1. -Je crée un répéteur avec la liste déroulante et le bouton pour effectuer les tests:

 <asp:Repeater ID="rp" runat="server">
   <ItemTemplate>
        <asp:DropDownList ID="DropDownList1" AutoPostBack="true" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
        <asp:ListItem>1</asp:ListItem>
        <asp:ListItem>2</asp:ListItem>
        <asp:ListItem>3</asp:ListItem>
        <asp:ListItem>4</asp:ListItem>
        <asp:ListItem>5</asp:ListItem>
        <asp:ListItem>6</asp:ListItem>

        </asp:DropDownList>
        <asp:ImageButton ID="Button1" runat="server" Enabled="False" />
        </ItemTemplate>
        </asp:Repeater>

Je repère le répéteur.

2.-Je crée la méthode DropDownList1_SelectedIndexChanged:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        DropDownList control = (DropDownList)sender;

        RepeaterItem rpItem = control.NamingContainer as RepeaterItem;
        if (rpItem != null)
        {
            ImageButton btn = ((ImageButton)rpItem.FindControl("Button1"));
            btn.Enabled = true;

        }

    }

La façon de le faire est de demander au contrôle, qui est son parent, c'est-à-dire le RepeaterItem, ou vous pouvez utiliser NamingContainer (comme je l'ai écrit finalement) et vous pouvez demander à propos de tout contrôle qui est à l'intérieur .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top