Динамическое добавление элементов управления в ASP.NET Repeater - PullRequest
5 голосов
/ 24 сентября 2008

Я обнаружил, что у меня есть элемент управления повторителем, привязанный к документу XML. Мой клиент теперь запрашивает, чтобы текстовое поле, являющееся ретранслятором, могло быть либо текстовым, либо флажком.

Кажется, я не могу найти простой способ сделать следующее:

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>

Есть ли хороший способ расширить текущую реализацию без необходимости переписывать логику. Если бы я мог ввести элемент управления через «OnItemDataBound», это также было бы хорошо. Но я не могу заставить его работать

Ответы [ 3 ]

5 голосов
/ 24 сентября 2008

В репитере перетащите Panel, затем создайте обработчик события для события привязки данных репитера и программно создайте TextBox или CheckBox и добавьте его в качестве дочернего элемента управления Panel. Вы должны быть в состоянии получить DataItem из аргументов события, чтобы получить информацию, такую ​​как ваш атрибут "type" или значения для подачи ваших свойств Text или информации css и т. Д.

3 голосов
/ 14 октября 2008

Я бы пошел с предложением mspmsp. Вот быстрый и грязный код в качестве примера:

Поместите это в ваш aspx:

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

И это в вашем коде:

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
3 голосов
/ 24 сентября 2008

Как насчет чего-то подобного в вашей разметке в каждом элементе управления текстового поля и флажка?

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