Измените значение элемента управления с привязкой к базе данных внутри ретрансляторов на C#

StackOverflow https://stackoverflow.com/questions/1201457

Вопрос

У меня есть вложенный элемент управления repeater, который отображает список данных, в моем случае это список часто задаваемых вопросов.вот часть дизайна:

<asp:Repeater ID="lists" runat="server">
    <ItemTemplate>
        <h2 class="sf_listTitle"><asp:Literal ID="listTitle" runat="server"></asp:Literal></h2>

        <p class="sf_controlListItems">
            <a id="expandAll" runat="server">
                <asp:Literal ID="Literal1" runat="server" Text="<%$Resources:ExpandAll %>"></asp:Literal>
            </a>
            <a id="collapseAll" runat="server" style="display:none;">
                <asp:Literal ID="Literal2" runat="server" Text="<%$Resources:CollapseAll %>"></asp:Literal>
            </a>
        </p>

        <ul class="sf_expandableList" id="expandableList" runat="server">
            <asp:Repeater ID="listItems" runat="server">
                <HeaderTemplate>
                </HeaderTemplate>
                <ItemTemplate>
                    <li>
                        <h1 id="headlineContainer" runat="server" class="sf_listItemTitle">
                            <a id="headline" runat="server" title="<%$Resources:ClickToExpand %>"></a>
                        </h1>
                        <div id="contentContainer" runat="server" class="sf_listItemBody" style="display:none;">
                            <asp:Literal ID="content" runat="server"></asp:Literal>
                        </div>
                    </li>
                </ItemTemplate>
                <FooterTemplate>
                </FooterTemplate>
            </asp:Repeater>
        </ul>
    </ItemTemplate>
</asp:Repeater>

Ретранслятор, который меня интересует, - это второй ретранслятор, listItems.В моем коде, я не могу напрямую вызвать listItems и посмотрите на элементы управления внутри него.Я попытался захватить контроль внутри list.DataBinding (может быть, мне нужно использовать другое событие?) метод:

void lists_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    var oRepeater = (Repeater) lists.FindControl("listItems");
}

но это всплывает как null.Кто-нибудь может дать мне несколько советов о том, что мне нужно сделать, чтобы получить доступ к listItems ретранслятор и его дочерние элементы управления?

Спасибо!

Это было полезно?

Решение

lists

принадлежит каждому RepeaterItem, а не непосредственно самому Repeater.

Попробуй :-

void lists_ItemDataBound(object sender, RepeaterItemEventArgs e)
{


    if ( e.Item.ItemType == ListItemType.AlternatingItem 
        || e.Item.ItemType == ListItemType.Item )
    {
       Repeater oRepeater = (Repeater)e.Item.FindControl("listItems");

       // And to get the stuff inside.
       foreach ( RepeaterItem myItem in oRepeater.Items )
       {
          if ( myItem.Item.ItemType == ListItemType.AlternatingItem 
              || myItem.Item.ItemType == ListItemType.Item )  
          {
             Literal myContent = (Literal)myItem.FindControl("content");

             // Do Something Good!
             myContent.Text = "Huzzah!";

          }
       }
    }
}

И ты должен быть хорошим :)

Отредактировано, чтобы включить полезную доработку DavidP.

Другие советы

Вам нужно изменить эту строку на

var oRepeater = (Repeater) e.Item.FindControl("listItems");

Ты близко!Внутри вашего обработчика событий проверьте RepeaterItemEventArgs на предмет того, с какой строкой вы имеете дело.Ваш дочерний повторитель будет доступен только в строках элементов (Alt), а не в верхних или нижних колонтитулах.Я предполагаю, что это происходит из-за заголовка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top