Как добавить веб-элементы управления для повторителя - PullRequest
0 голосов
/ 28 октября 2011

Сценарий:

  • UsrControl: пользовательский пользовательский элемент управления, который содержит текстовое поле и кнопку, переопределяется по горизонтали (в одну строку).

  • UsrControlContainer: пользовательский элемент управления, который должен иметь возможность отображать несколько объектов UsrControl (каждый объект в отдельной строке, поэтому шаблон Seperator, вероятно, будет <br />. Этот элемент управления также содержит кнопку, которая добавляет новый UsrControl в коллекцию.

Мой код:

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click"/>
<asp:Repeater ID="rptExample" runat="server">
    <ItemTemplate>

    </ItemTemplate>
    <SeparatorTemplate><br /></SeparatorTemplate>
</asp:Repeater>

И

protected void Button1_Click(object sender, EventArgs e)
{
    rptExample.DataSource = new List<UsrControl> {new UsrControl(), new UsrControl()};
    rptExample.DataBind();
}

Простой вопрос - что я должен вставить в ItemTemplate, чтобы эта работа работала?

Редактировать - я также хочу передать некоторые параметры в UsrControl перед его рендерингом.

Ответы [ 2 ]

2 голосов
/ 28 октября 2011
<asp:Repeater ID="rptExample" runat="server">
     <ItemTemplate>
          <uc:UsrControl runat="server" />
     </ItemTemplate>
     <SeparatorTemplate><br /></SeparatorTemplate>
</asp:Repeater>

protected void Button1_Click(object sender, EventArgs e)
{
    rptExample.DataSource = Enumerable.Range(0, 2);
    rptExample.DataBind();
}
1 голос
/ 19 июля 2013

После вашего вопроса в ответе. Вы можете перехватить каждый объект привязки в событии ItemDataBound. Так, например, как я использовал, установите весь объект как свойство пользовательского элемента управления.

protected void PersonesRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        PersonLine line = (PersonLine)e.Item.FindControl("Person1");
        line.Person = e.Item.DataItem as Osoba;
    }
}

Конечно, вы должны добавить обработчик событий в свой репитер:

<asp:Repeater runat="server" ID="PersonesRepeater" OnItemDataBound="PersonesRepeater_ItemDataBound"><ItemTemplate>
        <my:Person ID="Person1" runat="server" />
    </ItemTemplate>
</asp:Repeater>
...