Pregunta

Me encuentro a mi mismo teniendo un control de repetidor que se está enlazando a un documento XML. Mi cliente ahora solicita que los cuadros de texto que se están repitiendo puedan ser un cuadro de texto o una casilla de verificación.

Parece que no puedo encontrar una manera fácil de hacer esencialmente lo siguiente:

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 una buena manera de extender mi implementación actual sin tener que volver a escribir la lógica? Si pudiera inyectar el control a través de " OnItemDataBound " eso también estaría bien. Pero parece que no puedo hacer que funcione

¿Fue útil?

Solución

¿Qué pasa con algo similar a esto en su marca en cada uno de los controles de cuadro de texto y casilla de verificación?

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

Otros consejos

En su repetidor, suelte un Panel, luego cree un controlador de eventos para el evento de enlace de datos del repetidor y cree mediante programación el TextBox o el CheckBox y agréguelo como un control secundario del Panel. Debería poder obtener el elemento de datos de los argumentos del evento para obtener información como su " tipo " atributo o valores para alimentar sus propiedades de texto o información de css, etc.

Iría con la sugerencia de mspmsp. Aquí hay un código rápido y sucio como ejemplo:

Coloca esto en tu aspx:

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

Y esto en tu código:

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top