2009-04-08 3 views
1

Можно ли определить несколько шаблонов для ItemTemplate Repeater и переключиться между ними в соответствии с некоторым условием?Переключение ItemTemplate ретранслятора во время выполнения

Я использую повторитель для просмотра списка сообщений, но хочу иметь различный вид для строк, которые принадлежат к текущему пользователю (например, содержит LinkButton для удаления поста)

Если это не представляется возможным, то можно ли использовать элемент управления Multiview внутри ItemTemplate Repeater?

ответ

2

Я пытался использовать элемент управления MultiView внутри 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 и Видимые свойства элементов управления в шаблоне. Если будут более радикальные изменения макета, я поставлю каждый вариант макета внутри заполнителя и использую логику, чтобы определить, какой образец заполнить для показа.