我只想在名为" date"的列时显示转发器分隔符。来自上一个项目与当前项目日期不同。
以下代码只是为了澄清我的疑问。
我有一个这样的转发器:
<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 :(得分:0)
尝试使用bool值绑定分隔符的可见性。当您填充要绑定的数据时,请创建所需的逻辑以添加True或False。
答案 1 :(得分: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;
}
}