ASP.NET Usando un repetidor para crear una tabla HTML


Ejemplo

Cuando el repetidor está enlazado, para cada elemento de los datos, se agregará una nueva fila de la tabla.

<asp:Repeater ID="repeaterID" runat="server" OnItemDataBound="repeaterID_ItemDataBound">
    <HeaderTemplate>
        <table>
            <thead>
                <tr>
                    <th style="width: 10%">Column 1 Header</th>
                    <th style="width: 30%">Column 2 Header</th>
                    <th style="width: 30%">Column 3 Header</th>
                    <th style="width: 30%">Column 4 Header</th>
                </tr>
            </thead>
    </HeaderTemplate>
    <ItemTemplate>
        <tr runat="server" id="rowID">
            <td>
                <asp:Label runat="server" ID="mylabel">You can add ASP labels if you want</asp:Label>
            </td>
            <td>
                <label>Or you can add HTML labels.</label>
            </td>
            <td>
                You can also just type plain text like this.
            </td>
            <td>
                <button type="button">You can even add a button to the table if you want!</button>
            </td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

El método ItemDataBound es opcional, pero útil para formatear o ItemDataBound datos más complicados. En este ejemplo, el método se utiliza para dar dinámicamente a cada <tr> una ID única. Esta ID se puede usar en JavaScript para acceder o modificar una fila específica. Tenga en cuenta que el tr no mantendrá su valor de ID dinámico en PostBack. El texto de cada fila <asp:Label> también se estableció en este método.

protected void repeaterID_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        MyItem item = (MyItem)e.Item.DataItem;

        var row = e.Item.FindControl("rowID");
        row.ClientIDMode = ClientIDMode.Static;
        row.ID = "rowID" + item.ID;

        Label mylabel = (Label)e.Item.FindControl("mylabel");
        mylabel.Text = "The item ID is: " + item.ID;
    }
}

Si planeas hacer mucha comunicación con el CodeBehind, deberías considerar usar GridView. Sin embargo, los repetidores, en general, tienen menos sobrecarga que GridView y, con la manipulación de ID básica, pueden realizar las mismas funciones que GridView.