2009-04-08 5 views
1

Repeater의 ItemTemplate에 대해 여러 템플릿을 정의하고 조건에 따라 전환 할 수 있습니까?런타임시 Repeater의 ItemTemplate 전환

나는 다음 글의 목록을 볼 수 리피터를 사용하지만 이것이 가능하지 않다면

(예를 들어,이 게시물을 삭제하기위한의 LinkButton을 포함) 현재 사용자에 속하는 행에 대해 다른 견해를 갖고 싶어 Repeater의 ItemTemplate 내에서 Multiview 컨트롤을 사용할 수 있습니까?

답변

2

나는 ItemTemplate을 내부에 멀티 뷰 컨트롤을 사용하여 시도하고, 아주 잘 작동이 같은 문제를 가진 사람 도움이되기를 바랍니다 :

<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand"> 
    <ItemTemplate> 
    <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="<%# ((Post)Container.DataItem).Member.ID == CurrentMemberID ? 1 : 0 %>"> 
     <asp:View ID="View1" runat="server"><!-- some links --></asp:View> 
     <asp:View ID="View2" runat="server"><asp:LinkButton CommandName="DeletePost" CommandArgument="<%# ((Post)Container.DataItem).Id %>" ID="LinkButton1" runat="server">Delete Post</asp:LinkButton></asp:View> 
    </asp:MultiView> 
    </ItemTemplate> 
</asp:Repeater> 
0

템플릿 사이를 전환 할 수 있는지는 잘 모르겠지만 개별 중계기 항목의 표시를 수정하는 데 가장 유용한 Repeater.OnItemDataBound 이벤트를 찾았습니다.

예를 들어,

protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    LinkButton = e.Item.FindControl("btnDelete"); 
    LinkButton.Visible = (e.Item.DataItem as DataRow)["CreatedBy"] == getCurrentUser(); 
} 

는 일반적으로 나는 각 중계기 항목에 대한 일관성있는 데이터의 레이아웃을 유지 ... 현재 사용자를 기반으로 링크 버튼을 표시하고 cssStyle : 해당를 변경하여 시각적 모양을 수정하고 템플릿의 컨트롤의 표시 속성입니다. 급격한 레이아웃 변경이있는 경우 각 레이아웃 옵션을 자리 표시 자 안에 넣고 표시 할 자리 표시자를 결정하는 데 논리를 사용합니다.

관련 문제