Partager via


Comment : ajouter des lignes et des cellules de façon dynamique à un contrôle serveur Web Table

Mise à jour : novembre 2007

Il est courant d'ajouter des lignes et des cellules à un contrôle serveur Web Table au moment de l'exécution. Le contrôle serveur Web Table a été conçu spécifiquement pour cette tâche.

Remarque :

Pour concevoir un tableau visuellement en mode Design, utilisez un contrôle HtmlTable. Si vous devez aussi manipuler par programme le contenu d'un contrôle HtmlTable, convertissez ses lignes et cellules en contrôles HtmlTableRow et HtmlTableCell en attribuant la valeur server à leur attribut runat. Pour plus d'informations, consultez Conversion de contrôles serveur HTML en éléments HTML.

Dans un contrôle serveur Web Table, les lignes sont des objets de type TableRow. La propriété Rows du contrôle Table prend en charge une collection d'objets TableRow. Pour ajouter une ligne à la table, ajoutez un objet TableRow à cette collection.

De la même façon, l'objet TableRow a une propriété Cells qui prend en charge une collection d'objets de type TableCell. Vous pouvez ajouter des cellules à une ligne en manipulant cette collection.

Pour ajouter dynamiquement des lignes et des cellules à une table

  1. Pour ajouter une ligne, créez un nouvel objet de type TableRow :

    Dim tRow As New TableRow()
    Table1.Rows.Add(tRow)
    
    TableRow tRow = new TableRow();
    Table1.Rows.Add(tRow);
    
  2. Pour ajouter des cellules à la ligne, créez un ou plusieurs objets de type TableCell :

    Dim tCell As New TableCell()
    tRow.Cells.Add(tCell)
    
    TableCell tCell = new TableCell();
    tRow.Cells.Add(tCell);
    
  3. Ajoutez un contenu à la nouvelle cellule. Plusieurs possibilités s'offrent à vous, comme l'illustre le tableau suivant.

    Pour ajouter

    Procédez comme suit

    Texte statique

    Définissez la propriété Text de la cellule.

    Contrôles

    Déclarez une instance du contrôle et ajoutez-la à la collection Controls de la cellule.

    Texte et contrôles dans la même cellule

    Déclarez le texte en créant une instance de la classe Literal. Ajoutez-la à la collection Controls de la cellule comme vous le feriez avec d'autres contrôles.

    Remarque :

    Par défaut, les contrôles que vous ajoutez de façon dynamique à une page Web Forms sont ajoutés à l'état d'affichage de la page. Un comportement inattendu peut apparaître lors du traitement de la page si vous recréez des contrôles à chaque aller-retour. L'état d'affichage est en effet restauré avant la recréation des contrôles. Vous pouvez éviter ce problème en affectant à la propriété EnableViewState du contrôle conteneur (par exemple, du contrôle Table) la valeur false. Pour plus d'informations, consultez Ajout de contrôles ASP.NET par programme.

    L'exemple qui suit montre comment ajouter des lignes et des cellules à un contrôle Table. Le nombre de lignes et de cellules est déterminé par les entrées d'utilisateur dans deux zones de texte. Chaque cellule affiche le numéro de cellule et de ligne comme du texte statique.

    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
       ' Total number of rows.
       Dim rowCnt As Integer
       ' Current row count
       Dim rowCtr As Integer
       ' Total number of cells (columns).
       Dim cellCtr As Integer
       ' Current cell counter.
       Dim cellCnt As Integer
    
       rowCnt = CInt(Textbox1.Text)
       cellCnt = CInt(Textbox2.Text)
    
       For rowCtr = 1 To rowCnt
          Dim tRow As New TableRow()
          For cellCtr = 1 To cellCnt
             Dim tCell As New TableCell()
             tCell.Text = "Row " & rowCtr & ", Cell " & cellCtr
             ' Add new TableCell object to row.
             tRow.Cells.Add(tCell)
          Next
          ' Add new row to table.
          Table1.Rows.Add(tRow)
       Next
    
    End Sub
    
    protected void Button1_Click (object sender, System.EventArgs e)
    {
       // Total number of rows.
       int rowCnt;
       // Current row count.
       int rowCtr;
       // Total number of cells per row (columns).
       int cellCtr;
       // Current cell counter
       int cellCnt;
    
       rowCnt = int.Parse(TextBox1.Text);
       cellCnt = int.Parse(TextBox2.Text);
    
       for(rowCtr=1; rowCtr <= rowCnt; rowCtr++) {
          // Create new row and add it to the table.
          TableRow tRow = new TableRow();
          Table1.Rows.Add(tRow);
          for (cellCtr = 1; cellCtr <= cellCnt; cellCtr++) {
             // Create a new cell and add it to the row.
             TableCell tCell = new TableCell();
             tCell.Text = "Row " + rowCtr + ", Cell " + cellCtr;
             tRow.Cells.Add(tCell);
          }
       }
    }
    

    L'exemple de code suivant est semblable au précédent, mais affiche du texte statique et un contrôle HyperLink dans chaque cellule. Le contrôle HyperLink navigue jusqu'à une URL fictive, transmettant une ID de produit fictive elle aussi. Parce que l'exemple mélange texte statique et contrôles, le texte statique est implémenté comme un objet Literal qui est ajouté à la collection Controls de la cellule, tout comme le contrôle HyperLink.

    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
       ' Total number of rows.
       Dim rowCnt As Integer
       ' Current row count
       Dim rowCtr As Integer
       ' Total number of cells (columns).
       Dim cellCtr As Integer
       ' Current cell counter.
       Dim cellCnt As Integer
    
       rowCnt = CInt(TextBox1.Text)
       cellCnt = CInt(TextBox2.Text)
    
       For rowCtr = 1 To rowCnt
          Dim tRow As New TableRow()
          For cellCtr = 1 To cellCnt
             Dim tCell As New TableCell()
             ' Mock up a product ID
             Dim prodID As String
             prodID = rowCtr & "_" & cellCtr
    
             ' Create literal text as control.
             Dim s As New LiteralControl()
             s.Text = "Buy: "
             ' Add to cell.
             tCell.Controls.Add(s)
             ' Create Hyperlink Web Server control and add to cell.
             Dim h As New HyperLink()
             h.Text = rowCtr & ":" & cellCtr
             h.href = "https://www.microsoft.com/net"
             ' Add cell to row.
             tCell.Controls.Add(h)
             ' Add new TableCell object to row.
             tRow.Cells.Add(tCell) 
          Next cellCtr
          ' Add new row to table.
          Table1.Rows.Add(tRow) 
       Next rowCtr
    End Sub
    
    Protected void Button1_Click (object sender, System.EventArgs e)
    {
       // Total number of rows.
       int rowCnt;
       // Current row count.
       int rowCtr;
       // Total number of cells per row (columns).
       int cellCtr;
       // Current cell counter.
       int cellCnt;
    
    
       rowCnt = int.Parse(TextBox1.Text);
       cellCnt = int.Parse(TextBox2.Text);
    
       for(rowCtr=1; rowCtr <= rowCnt; rowCtr++) {
          // Create a new row and add it to the table.
          TableRow tRow = new TableRow();
          Table1.Rows.Add(tRow);
          for (cellCtr = 1; cellCtr <= cellCnt; cellCtr++) {
             // Create a new cell and add it to the row.
             TableCell tCell = new TableCell();
             tRow.Cells.Add(tCell);               
             // Mock up a product ID.
             string prodID = rowCtr + "_" + cellCtr;
    
             // Add a literal text as control.
             tCell.Controls.Add(new LiteralControl("Buy: "));
             // Create a Hyperlink Web server control and add it to the cell.
             System.Web.UI.WebControls.HyperLink h = new HyperLink();
             h.Text = rowCtr + ":" + cellCtr;
             h.href = "https://www.microsoft.com/net";
             tCell.Controls.Add(h);
          }
       }
    }
    

Voir aussi

Référence

Vue d'ensemble des contrôles serveur Web, Table, TableRow et TableCell