Ändern Sie den Wert von Databound-Steuerung innerhalb Wiederholer in C #
-
05-07-2019 - |
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!
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.
einzuarbeitenAndere 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.