ASP.NET Usare un ripetitore per creare una tabella HTML


Esempio

Quando il Ripetitore è Limitato, per ogni articolo nei dati verrà aggiunta una nuova riga di tabella.

<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>

Il metodo ItemDataBound è facoltativo, ma utile per la formattazione o la compilazione di dati più complicati. In questo esempio, il metodo viene utilizzato per assegnare dinamicamente a ciascun <tr> un ID univoco. Questo ID può quindi essere utilizzato in JavaScript per accedere o modificare una riga specifica. Nota, tr non manterrà il suo valore ID dinamico su PostBack. Anche il testo di <asp:Label> di ogni riga è stato impostato in questo metodo.

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

Se hai intenzione di fare molte comunicazioni con CodeBehind, potresti prendere in considerazione l'idea di utilizzare GridView. I ripetitori, tuttavia, in generale hanno un sovraccarico minore rispetto a GridView e, con la semplice manipolazione dell'ID, possono eseguire le stesse funzioni di GridView.