Frage

Ich habe ein verschachteltes Repeater-Steuerelement, das eine Liste von Daten anzeigt, in meinem Fall ist es eine FAQ-Liste ist. hier ist das Design Teil:

<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>

Der Repeater, dass ich interessiert bin in dem zweiten Repeater, listItems. In meinem Code-behind, kann es nicht direkt listItems anrufen und die Bedienelemente in der es sehen. Ich versuchte, die Kontrolle innerhalb von list.DataBinding zu greifen (vielleicht brauche ich ein anderes Ereignis benutzen?) Methode:

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

aber das kommt als null auf. Kann jemand mir einige Hinweise / Tipps geben, was ich tun muss Zugang zum listItems Repeater zu gewinnen und es ist Kinder Kontrollen?

Danke!

War es hilfreich?

Lösung

lists

gehört zu jedem RepeaterItem, nicht direkt an den Repeater selbst.

Versuchen: -

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!";

          }
       }
    }
}

Und Sie sollten gut sein:)

Edited DavidP die hilfreich Verfeinerung.

einzuarbeiten

Andere Tipps

Sie müssen diese Zeile ändern

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

Sie sind in Ihrer Nähe! In Ihren Event-Handler überprüfen Sie die RepeaterItemEventArgs für welche Art von Zeile mit Ihnen zu tun hat. Ihr Kind Repeater ist nur verfügbar, auf (Alt) Artikelreihe, nicht Kopf- und Fußzeilen. Meine Vermutung ist, dass es auf dem Header Sprengung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top