根据以前的值隐藏中继器分隔符项目



当上一个项目中名为"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; 
    }
}

尝试用布尔值绑定分隔符的可见性。在填充要绑定的数据时,生成所需的逻辑以便添加True或False。

隐藏分隔符实际上比您想象的要容易。只需将项目的可见性设置为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; 
    }
}

最新更新