Vivendi Vivendi - 1 month ago 18
ASP.NET (C#) Question

If statement in repeaters ItemTemplate

I'm using an ASP.NET

Repeater
to display the contents of a
<table>
. It looks something like this:

<table cellpadding="0" cellspacing="0">
<asp:Repeater ID="checkboxList" runat="server" OnItemDataBound="OnCheckboxListItemBound">
<ItemTemplate>
<tr id="itemRow" runat="server">
<td>
Some data
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>


It works fine, but i'd like to have an
if()
statement inside the
ItemTemplate
so i can conditionally determine if i want to print out a
<tr>
tag.

So i'd like to have something like this:

<table cellpadding="0" cellspacing="0">
<asp:Repeater ID="checkboxList" runat="server" OnItemDataBound="OnCheckboxListItemBound">
<ItemTemplate>

<% if ( (CurrentItemCount % 2) == 0 ) { %?>
<tr id="itemRow" runat="server">
<% } %>
<td>
Some data
</td>
<% if ( (CurrentItemCount % 2) == 0 ) { %?>
</tr>
<% } %>
</ItemTemplate>
</asp:Repeater>
</table>


Is there some way i can achieve this?

PS. The
CurrentItemCount
is just made up. I also need a way to get the current item count inside that
if()
statement. But i only seem to be able to get it from
<%# Container.ItemIndex; %>
, which can't be used with an
if()
statement?

Answer

I would use codebehind:

protected void OnCheckboxListItemBound(Object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        HtmlTableRow itemRow = (HtmlTableRow) e.Item.FindControl("itemRow");
        itemRow.Visible = e.Item.ItemIndex % 2 == 0;
    }
}