paginacion - Adición dinámica de controles en el repetidor ASP.NET
repeater asp net ejemplo (3)
Me encuentro teniendo un control de repetidor que está siendo enlazado a un documento xml. Mi cliente ahora está solicitando que los Textbox''s que están siendo repetidores puedan ser un Textbox o un Checkbox.
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>
¿Hay alguna manera agradable 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" también estaría bien. Pero parece que no puedo hacer que funcione
¿Qué pasa con algo similar a esto en su marcado en cada uno de los cuadros de texto y controles de casilla de verificación?
Visible=<%= Eval("type").tostring() == "text") %>
En su repetidor, suelte un Panel, luego cree un controlador de eventos para el evento de enlace de datos del repetidor y cree un TextBox o CheckBox mediante programación y agréguelo como un control secundario del Panel. Debería poder obtener el DataItem de los eventos args para obtener información como su atributo "type" o valores para alimentar sus propiedades de texto o información css, etc.
Me gustaría ir con la sugestión de mspmsp. Aquí hay un código rápido y sucio como un ejemplo de ello:
Coloque esto en su 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 detrás:
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