2016-03-28 6 views
1

Я пытаюсь показать только разделитель ретранслятора, когда столбец с именем «дата» из предыдущего элемента отличается от текущей даты элемента.Скрыть элемент разделителя ретранслятора согласно предыдущему значению

Код, приведенный ниже, предназначен только для облегчения выяснения моих сомнений.

У меня есть ретранслятор, как это:

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

Мне нужно только, чтобы показать разделитель, когда предыдущая дата отличается от текущей.

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

Я пытался что-то вроде этого:

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

Так что же не работает? Логика сравнения даты или скрытие разделителя? –

+1

Хранение сепаратора. Похоже, что логика сравнения в порядке – Marcoscdoni

+0

Похоже, вы пытаетесь сгруппировать элементы с помощью seperator. Поэтому, возможно, вам следует изменить логику и попытаться использовать логику группировки. – oneNiceFriend

ответ

0

Попробуйте связывание видимости сепаратора со значением BOOL. Когда вы заполняете данные для привязки, выполните требуемую логику, чтобы добавить True или False.

0

Скрытие разделителя на самом деле проще, чем вы думаете. Просто установите для видимости элемента значение false. Предполагая, что логика сравнения даты работает правильно, похоже, что у вас есть все, что уже сделано.

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; 
    } 
} 
Смежные вопросы