2008-09-24 17 views
5

Sam znajduję kontrolkę przemiennika, która jest databound do dokumentu xml. Mój klient żąda teraz, aby pola Textbox, które są repetytorami, mogły być polami tekstowymi lub polami wyboru.Dynamiczne dodawanie elementów sterujących w programie ASP.NET Repeater

nie mogę wydawać się znaleźć EasyWay do zasadniczo wykonaj następujące czynności:

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> 

Czy istnieje dobry sposób mogę rozszerzyć obecną implementaion bez musiał przepisać logiki. Jeśli mógłbym wstrzyknąć kontrolę za pomocą "OnItemDataBound", również byłoby w porządku. Ale nie mogę sprawić, żeby to działało.

Odpowiedz

3

Co z czymś podobnym do tego w twoim znaczniku w każdym polu tekstowym i kontrolkami pola wyboru?

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

W swoim peryferyjnym, upuścić panelu, a następnie utworzyć moduł obsługi zdarzeń dla danych repeater za wiążące zdarzenia i programowo utworzyć pole tekstowe lub pole wyboru i dodać go jako Child Control Panelu. Powinieneś być w stanie pobrać DataItem z argumentów zdarzenia, aby uzyskać informacje takie jak twój atrybut "type" lub wartości, aby podać właściwości Text lub informacje o css, itp.

3

Chciałbym pójść z sugestią mspmsp. Oto szybki i brudny kod jako przykład to:

Place to w aspx:

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

i to w swoim kodzie:

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 
Powiązane problemy