Domanda

Trovo me stesso avere un controllo ripetitore che viene archiviato in un documento XML. Il mio cliente ora richiede che le caselle di testo che vengono ripetute possano essere sia una casella di testo che una casella di controllo.

Non riesco a trovare un modo semplice per fare essenzialmente quanto segue:

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>

C'è un bel modo in cui posso estendere la mia attuale implementazione senza dover riscrivere la logica. Se potessi iniettare il controllo tramite " OnItemDataBound " anche questo andrebbe bene. Ma non riesco a farlo funzionare

È stato utile?

Soluzione

Che dire di qualcosa di simile a questo nel tuo markup in ciascuno dei controlli della casella di testo e della casella di controllo?

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

Altri suggerimenti

Nel ripetitore, rilascia un pannello, quindi crea un gestore eventi per l'evento di associazione dei dati del ripetitore e crea a livello di codice TextBox o CheckBox e aggiungilo come controllo figlio del pannello. Dovresti essere in grado di ottenere il DataItem dall'argomento arg per ottenere informazioni come il tuo tipo " " attributo o valori per alimentare le proprietà del testo o le informazioni CSS, ecc.

Vorrei andare con la sugestion di mspmsp. Ecco un codice rapido e sporco come esempio:

Inseriscilo nel tuo aspx:

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

E questo nel tuo codice dietro:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top