If statement in repeaters ItemTemplate

前端 未结 5 715
眼角桃花
眼角桃花 2021-01-02 04:26

I\'m using an ASP.NET Repeater to display the contents of a

. It looks something like this:

相关标签:
5条回答
  • 2021-01-02 05:00

    I have 2 examples, for the examples i will bind the repeater to a array of strings (demonstration purposes only)

    void BindCheckboxList()
    {
     checkboxList.DataSource = new string[] { "RowA", "RowB", "RowC", "RowD", "RowE", "RowF", "RowG" };
     checkboxList.DataBind();
    }
    

    Example 1: Create a methode in de codebehind casting the bound elements back en evaluate what ever value you'd like.

    Create Methode in CodeBehind (example 1):

    protected string StringDataEndsWith(object dataElement, string endsWith, string  returnValue)
    {
    // for now an object of the type string, can be anything.
    string elem = dataElement as string;
        if (elem.EndsWith(endsWith))
        {
         return returnValue; 
        }
         else
        {
         return ""; 
        }
    }
    

    In the .aspx file (example 1):

    <asp:Repeater ID="checkboxList" runat="server">
    <HeaderTemplate> 
        <table style="padding:0px;margin:0px;">
    </HeaderTemplate> 
    <ItemTemplate>
        <%# StringDataEndsWith(Container.DataItem,"A","<tr id=\"itemRow\" runat=\"server\">")  %>
        <td>
            <%# Container.DataItem  %>
        </td>
        <%# StringDataEndsWith(Container.DataItem,"G","</tr>")  %>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
    </asp:Repeater>
    

    Example 2: You could use a direct cast in the .aspx file

    DirectCast example (no code behind):

    <asp:Repeater ID="checkboxList" runat="server">
    <HeaderTemplate> 
        <table style="padding:0px;margin:0px;">
    </HeaderTemplate> 
    <ItemTemplate>
        <%# Convert.ToString(Container.DataItem).EndsWith("A") ? "<tr id=\"itemRow\" runat=\"server\">" : ""  %>
        <td>
            <%# Container.DataItem  %>
        </td>
        <%# Convert.ToString(Container.DataItem).EndsWith("G") ? "</tr>" : ""  %>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
    </asp:Repeater>
    

    I hope this is what you're looking for. Regards.

    0 讨论(0)
  • 2021-01-02 05:00

    If you're wanting to do something on every other item, use the alternating item template. http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.alternatingitemtemplate.aspx

    0 讨论(0)
  • 2021-01-02 05:12

    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;
        }
    }
    
    0 讨论(0)
  • 2021-01-02 05:16

    If you're trying yo make a 2 columns table this could do the trick

    <%# Container.ItemIndex % 2 == 0 ? "<tr class='itemRow'>" : "" %>
        <td>
           Some data
        </td>
    <%# Container.ItemIndex % 2 != 0 ? "</tr> : "" %>
    

    Changed a couple of things: id="itemRow" for all rows would cause repeated ids what is not allowed.

    Removed runat="server" since doesn't make sense on this context.

    0 讨论(0)
  • 2021-01-02 05:20

    Another way of doing this (if performance is not a problem):

    <ItemTemplate>
      <!-- "If"  -->
      <asp:PlaceHolder runat="server" Visible="<%# MyCondition %>">
        <tr><td></td></tr>
      </asp:PlaceHolder>  
      <!-- "Else" -->
      <asp:PlaceHolder runat="server" Visible="<%# !MyCondition %>">
        <tr><td></td></tr>
      </asp:PlaceHolder>
    </ItemTemplate>
    
    0 讨论(0)
提交回复
热议问题