2008-09-24 174 views
5

我發現我的自己有一箇中繼器控件,它正在將數據綁定到一個xml文檔。我的客戶現在正在請求正在轉發的文本框可以是文本框或複選框。在ASP.NET Repeater中動態添加控件

我似乎無法找到一個鬆槽基本上做到以下幾點:

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> 

有沒有一個很好的辦法,我可以延長我目前沒有implementaion必須重寫邏輯。如果我可以通過「OnItemDataBound」注入控件,那也可以。但我似乎無法使其工作

回答

3

在你的標記在每個文本框和複選框控件的東西類似於什麼?

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

在你的中繼,落個小組,然後創建該轉發器的數據的事件處理程序綁定事件和編程創建文本框或複選框,並將其添加爲面板的子控件。您應該能夠從事件參數中獲取DataItem,以獲取諸如「type」屬性或值的信息,以提供您的Text屬性或CSS信息等。

3

我會去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