2008-09-24 31 views
5

Tôi tìm thấy chính mình có một điều khiển lặp lại đang được databound cho một tài liệu xml. Khách hàng của tôi hiện đang yêu cầu Hộp văn bản đang lặp lại có thể là Hộp văn bản hoặc Hộp kiểm.Tự động thêm các điều khiển trong ASP.NET Repeater

tôi dường như không thể tìm thấy một Easyway để chủ yếu làm như sau:

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> 

Có một cách tốt đẹp tôi có thể mở rộng implementaion hiện tại của tôi mà không cần phải viết lại logic. Nếu tôi có thể tiêm kiểm soát thông qua "OnItemDataBound" mà cũng sẽ được sử dụng tốt. Nhưng tôi dường như không thể làm cho nó hoạt động

Trả lời

3

Điều gì tương tự như thế này trong đánh dấu của bạn trong mỗi hộp kiểm và hộp kiểm điều khiển?

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

Trong lặp lại của bạn, thả một Panel, sau đó tạo ra một event handler cho dữ liệu của repeater ràng buộc sự kiện và lập trình tạo ra các TextBox hoặc CheckBox và thêm nó như một điều khiển con của Panel. Bạn sẽ có thể lấy DataItem từ sự kiện args để lấy thông tin như thuộc tính "type" hoặc các giá trị của bạn để nuôi các thuộc tính Văn bản hoặc thông tin css, v.v.

3

Tôi sẽ đi với sugestion của mspmsp. Dưới đây là một mã nhanh chóng và dơ bẩn như một ví dụ về nó:

Nơi này trong aspx của bạn:

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

Và điều này trong codebehind của bạn:

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 
Các vấn đề liên quan