Question

Je me trouve moi-même avec un contrôle de répéteur lié à un document XML. Mon client demande maintenant que les zones de texte en cours de répétition puissent être soit une zone de texte, soit une case à cocher.

Je n'arrive pas à trouver un moyen facile de faire essentiellement ce qui suit:

if ((System.Xml.XmlNode)e.Item.DataItem.Attributes["type"] == "text")
<asp:TextBox runat="server" ID="txtField" Text='<%#((System.Xml.XmlNode)Container.DataItem).InnerText %>' CssClass="std"></asp:TextBox>
else
<asp:CheckBox runat="server" ID="txtField" Text='<%#((System.Xml.XmlNode)Container.DataItem).InnerText %>' CssClass="std"></asp:TextBox>

Existe-t-il un moyen agréable d’étendre ma mise en oeuvre actuelle sans avoir à réécrire la logique. Si je pouvais injecter le contrôle via "OnItemDataBound" ce serait aussi bien. Mais je n'arrive pas à le faire fonctionner

Était-ce utile?

La solution

Qu'en est-il de quelque chose de similaire à ceci dans votre balisage dans chacun des contrôles de zone de texte et de case à cocher?

Visible=<%= Eval("type").tostring() == "text") %>

Autres conseils

Dans votre répéteur, supprimez un panneau, puis créez un gestionnaire d'événements pour l'événement de liaison de données du répéteur, créez par programme la zone de texte ou la case à cocher et ajoutez-le en tant que contrôle enfant du panneau. Vous devriez pouvoir obtenir le DataItem à partir des arguments de l'événement pour obtenir des informations telles que votre "type". attribut ou valeurs pour alimenter vos propriétés de texte ou vos informations CSS, etc.

Je voudrais aller avec la suggestion de mspmsp. Voici un exemple de code rapide et incorrect:

Placez ceci dans votre aspx:

<asp:Repeater ID="myRepeater" runat="server" OnItemCreated="myRepeater_ItemCreated">
    <ItemTemplate>
        <asp:PlaceHolder ID="myPlaceHolder1" runat="server"></asp:PlaceHolder>
        <br />
    </ItemTemplate>
</asp:Repeater>

Et ceci dans votre code ci-dessous:

dim plh as placeholder
dim uc as usercontrol
protected sub myRepeater_ItemCreated(object sender, RepeaterItemEventArgs e)
    if TypeOf e Is ListItemType.Item Or TypeOf e Is ListItemType.AlternatingItem Then
        plh = ctype(e.item.findcontrol("myPlaceHolder1"), Placeholder)
        uc = Page.LoadControl("~/usercontrols/myUserControl.ascx")
        plh.controls.add(uc)
    end if
end sub
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top