asp.net
  • data-binding
  • 2009-07-15 6 views 1 likes 
    1

    Wie ich das Header-Template eines Repeaters stoppen Sie von der Anzeige, wenn es keine Elemente in der Datenquelle sindStopp-Header Anzeigen auf asp.net Repeater

      <asp:Repeater ID="TabsRepeater" runat="server" DataSource='<%#Eval("OrderedChildNodes") %>'> 
           <HeaderTemplate> 
            <ul class="child"> 
           </HeaderTemplate> 
           <ItemTemplate> 
    

    der Repeater in einer anderen Repeater Steuer verschachtelt ist, so kann ich‘ t vor der Datenbindung prüfen.

    Antwort

    1

    Sie könnten das Markup auch konditional machen, siehe Beispiel unten (ungetestet).

    <asp:Repeater ID="TabsRepeater" runat="server" DataSource='<%#Eval("OrderedChildNodes") %>'> 
           <HeaderTemplate> 
          <% if ( ((yourType)Eval("OrderedChildNodes")).Count > 0) %> 
            <ul class="child"> 
           </HeaderTemplate> 
           <ItemTemplate> 
    
    +0

    dass war mein erster Gedanke, aber es scheint nicht zu geben, gibt den Fehler: Databinding-Methoden wie Eval(), XPath() und Bind() können nur im Zusammenhang mit einem datengebundenen Steuerelement verwendet werden. –

    +1

    Verwenden Sie zufällig das .NET 3.5-Framework oder höher? Wenn dem so ist, würde ich sehr empfehlen, das Repeater-Steuerelement durch das flexiblere ListView-Steuerelement zu ersetzen, das über das Dienstprogramm verfügt, um mit leeren Daten umzugehen. – James

    1

    Setzen Sie ein leeres Literal-Steuerelement dort und legen Sie seinen Wert in der OnItemDataBound-Funktion (gleich für die Fußzeile).


    Hmm ... oder sogar ein wenig einfacher macht ihm den richtigen Text zunächst aber beginnen mit dem .Visible Eigenschaft wörtlichen auf false gesetzt, damit es nicht machen wird. Dann setze es in OnItemDatabound auf True.

    4

    Direkt nach DataBind() ...

    
    TabsRepeater.Visible = TabsRepeater.Items.Count > 0; 
    

    Das macht den ganzen Repeater unsichtbar, weil ich gehe davon aus, dass eine Vorlage </ul > in der Fußzeile Theres, dass Sie würde nicht wollen, zeige entweder.

    0

    Wie wäre es damit:

    <HeaderTemplate> 
        <ul class="child" visible='<%= (TabsRepeater.Items.Count > 0).ToString() %>'> 
    </HeaderTemplate> 
    
    0

    Dies sollte für IE9 arbeiten +

    ASPX:

    <asp:Repeater runat="server" ID="rpHideHeaderIfNoData"> 
        <HeaderTemplate> 
         <table class="hide-if-no-data"> 
          <tr> 
           <th>ID</th> 
           <th>Name</th> 
          </tr> 
        </HeaderTemplate> 
        <ItemTemplate> 
         <tr> 
          <td><%# ((MyModel)Container.DataItem).ID %></td> 
          <td><%# ((MyModel)Container.DataItem).Name %></td> 
         </tr> 
        </ItemTemplate> 
        <FooterTemplate> 
         </table> 
        </FooterTemplate> 
    </asp:Repeater> 
    

    CSS:

    .hide-if-no-data { 
        tr:only-child { 
         display: none; 
        } 
    } 
    
    Verwandte Themen