Доступ к элементу управления в репитере - PullRequest
0 голосов
/ 20 января 2012

Допустим, у меня есть следующее:

<asp:Repeater ID="repSubItems" runat="server" DataSource="<%# SubItems %>" >
    <ItemTemplate>
        <sc:FieldRenderer ID="FieldRenderer1" 
            FieldName="BlurbSpot_Content_SubHeading" 
            runat="server" 
            Item="<%# Container.DataItem as Sitecore.Data.Items.Item %>" />  
    </ItemTemplate>
</asp:Repeater>

Я хочу, чтобы в коде можно было сделать:

FieldRenderer1.Style["Width"] = MyCoolWidth;

Но внутри Repeater я не могу получить доступ к элементу управления FieldRenderer1.

Ответы [ 2 ]

6 голосов
/ 20 января 2012

Вам потребуется обработать событие ItemDataBound ретранслятора repSubItems. Пример:

protected void repSubItems_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var fieldRenderer1 = e.Item.FindControl("FieldRenderer1") as Sitecore.Web.UI.WebControls.FieldRenderer;
        if (fieldRenderer1 != null)
        {
            fieldRenderer1.Style["Width"] = MyCoolWidth;
        }

    }
}
1 голос
/ 20 января 2012

Вам нужно найти строку, которую вы ищете специально в Repeater, а затем найти элемент управления. Вот пример, который может сделать это для всех элементов в вашем Repeater:

// repeater item
foreach (Control cr in repSubItems.Controls)
{
    // assuming this is your templated control name and not the final output name
    FieldRenderer founcControl = cr.FindControl("FieldRenderer1") as FieldRenderer;

    founcControl .Style["Width"] = MyCoolWidth;
}

Лучший способ сделать это - реализовать OnDataBinding для вашего элемента управления, потому что тогда у вас нет поиска:

<sc:FieldRenderer ID="FieldRenderer1" FieldName="BlurbSpot_Content_SubHeading"
    runat="server" Item="<%# Container.DataItem as Sitecore.Data.Items.Item %>"
     OnDataBinding="FieldRenderer1_DataBinding" />

protected void FieldRenderer1_DataBinding(object sender, System.EventArgs e)
{
    FieldRenderer rend = (FieldRenderer)(sender);

    // you can do whatever you want to rend at this point and it is scoped to ONLY
    // the control so you never have to search for it.
    rend.Style["Width"] = MyCoolWidth;  
}
...