Pergunta

Acho que tenho um controle de repetidor que está sendo bancoso de dados para um documento XML. Meu cliente agora está solicitando que as caixas de texto que estão sendo repetidores possam ser uma caixa de texto ou uma caixa de seleção.

Não consigo encontrar uma Easyway para fazer o seguinte:

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 uma boa maneira de estender minha implementação atual sem ter que reescrever a lógica. Se eu pudesse injetar o controle via "oniTemdatabound", isso também ficaria bem. Mas não consigo fazer funcionar

Foi útil?

Solução

Que tal algo semelhante a isso em sua marcação em cada uma caixa de texto e controles de caixa de seleção?

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

Outras dicas

No seu repetidor, solte um painel, crie um manipulador de eventos para o evento de ligação de dados do repetidor e crie programaticamente a caixa de texto ou a caixa de seleção e adicione -a como um controle filho do painel. Você poderá obter o Dataitem do evento Args para obter informações como o atributo "Type" ou valores para alimentar suas propriedades de texto ou informações de CSS, etc.

Eu iria com a sugestão do MSPMSP. Aqui está um código rápido e sujo como um exemplo disso:

Coloque isso em seu ASPX:

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

E isso no seu código de 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top