문제

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"를 통해 제어를 주입 할 수 있다면 괜찮을 것입니다. 그러나 나는 그것을 작동시킬 수없는 것 같습니다

도움이 되었습니까?

해결책

각 텍스트 상자 및 확인란 컨트롤에서 마크 업에서 이와 비슷한 점은 어떻습니까?

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

다른 팁

리피터에서 패널을 떨어 뜨린 다음 리피터의 데이터 바인딩 이벤트에 대한 이벤트 핸들러를 만들고 프로그래밍 방식으로 텍스트 상자 또는 확인란을 만들고 패널의 하위 컨트롤로 추가하십시오. 텍스트 속성 또는 CSS 정보 등을 공급하기 위해 "유형"속성 또는 값과 같은 정보를 얻기 위해 이벤트 Args의 데이터 아티템을 얻을 수 있어야합니다.

나는 mspmsp의 sugestion과 함께 갈 것입니다. 다음은 빠르고 더러운 코드입니다.

이것을 ASPX에 배치하십시오 :

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

그리고 이것은 당신의 CodeBehind에서 :

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top