2009-04-08 11 views
1

リピータのItemTemplateに複数のテンプレートを定義して、それらの間を何らかの条件で切り替えることはできますか?実行時にリピータのItemTemplateを切り替える

は、私はその後、記事の一覧を表示するリピータを使用しますが、これが不可能な場合

(例えばポストを削除するためのLinkBut​​tonコントロールが含まれている)、現在のユーザーに属する行の別のビューを持ちたいですリピーターのItemTemplate内でマルチビューコントロールを使用することは可能ですか?

答えて

2

私はItemTemplateに内部でMultiViewコントロールを使用しようと、それは非常によく働いていた、これは同じ問題を持つ人が役に立てば幸い:

<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を変えることによって、視覚的外観を変更してテンプレート内のコントロールの表示プロパティ。根本的なレイアウト変更がある場合は、各レイアウトオプションをプレースホルダ内に配置し、ロジックを使用して表示するプレースホルダを決定します。

関連する問題