2016-03-28 7 views
1

Ich versuche nur das Repeater Trennzeichen anzuzeigen, wenn die Spalte "Datum" vom vorherigen Element vom aktuellen Element Datum abweicht.Repeater Trennelement nach vorherigem Wert ausblenden

Code unten dient nur zur Klärung meiner Zweifel.

Ich habe einen Repeater wie folgt aus:

<asp:Repeater ID="tbData" runat="server"> 
    <HeaderTemplate> 
     <table class="table table-striped"> 
      <thead> 
       <tr> 
        <th>Date</th> 
        <th>Description</th> 
       </tr> 
      </thead> 
      <tbody> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr> 
      <td><%# DataBinder.Eval(Container.DataItem, "Date") %></td> 
      <td><%# DataBinder.Eval(Container.DataItem, "Description") %></td> 
     </tr> 
    </ItemTemplate> 
    <SeparatorTemplate>  
     <tr id="rowSeparator" runat="server" visible="false"> 
      <td></td> 
      <td></td> 
     </tr>  
    </SeparatorTemplate> 
    <FooterTemplate> 
     </tbody> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 

ich nur noch Separator zu zeigen, wenn früheren Zeitpunkt von der aktuellen unterscheidet.

Date   Description 
28/03/2016  Sample  
28/03/2016  Sample 
         => Here separator is showed. 
29/03/2016  Sample 

Ich habe so etwas wie dies versucht:

private DateTime? lastShowedDate = null; 
public bool isOtherDate; 

... 

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Separator) 
    { 
     //Compare last and current date      
     isOtherDate = ((MyType)e.Item.DataItem).MyDate.Date != lastShowedDate.Value.Date; 

     //Save current date for next item comparison 
     lastShowedDate = ((MyType)e.Item.DataItem).MyDate; 

     //Find and set control visibility 
     Control separator = (Control)e.Item.FindControl("rowSeparator"); 

     separator.Visible = isOtherDate; 
    } 
} 
+0

Also was funktioniert nicht? Die Datumsvergleichslogik oder das Ausblenden des Trennzeichens? –

+1

Hidding Separator. Es scheint, als wäre die Vergleichslogik in Ordnung – Marcoscdoni

+0

Es sieht so aus, als ob Sie versuchen, Elemente mit einem Trennzeichen zu gruppieren. Vielleicht sollten Sie die Logik ändern und versuchen, Gruppierungslogik zu verwenden. – oneNiceFriend

Antwort

0

Versuchen mit einem Bool Wert der Sichtbarkeit des Separators bindend. Wenn Sie die zu bindenden Daten füllen, müssen Sie die erforderliche Logik erstellen, um ein Wahr oder Falsch hinzuzufügen.

0

Das Ausblenden des Separators ist tatsächlich einfacher als Sie vielleicht denken. Setzen Sie einfach die Sichtbarkeit des Elements auf false. Unter der Annahme, dass die Datumsvergleichslogik korrekt funktioniert, sieht es so aus, als hätten Sie alles andere bereits getan.

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Separator) 
    { 
     //Compare last and current date      
     isOtherDate = ((MyType)e.Item.DataItem).MyDate.Date != lastShowedDate.Value.Date; 

     //Save current date for next item comparison 
     lastShowedDate = ((MyType)e.Item.DataItem).MyDate; 

     e.Item.Visible = isOtherDate; 
    } 
} 
Verwandte Themen