根据以前的值隐藏转发器分隔符项

时间:2016-03-28 15:34:44

标签: c# asp.net webforms repeater

我只想在名为" 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; 
    }
}

2 个答案:

答案 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; 
    }
}