Saltar al contenido

Agregar fila dinámicamente en TableLayoutPanel

Después de consultar con especialistas en el tema, programadores de varias áreas y profesores dimos con la solución al dilema y la plasmamos en esta publicación.

Solución:

Pruebe el siguiente código,

// TableLayoutPanel Initialization
TableLayoutPanel panel = new TableLayoutPanel();
panel.ColumnCount = 3;
panel.RowCount = 1;
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F));
panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 30F));
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
panel.Controls.Add(new Label()  Text = "Address" , 1, 0);
panel.Controls.Add(new Label()  Text = "Contact No" , 2, 0);
panel.Controls.Add(new Label()  Text = "Email ID" , 3, 0);

// For Add New Row (Loop this code for add multiple rows)
panel.RowCount = panel.RowCount + 1;
panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
panel.Controls.Add(new Label()  Text = "Street, City, State" , 1, panel.RowCount-1);
panel.Controls.Add(new Label()  Text = "888888888888" , 2, panel.RowCount-1);
panel.Controls.Add(new Label()  Text = "[email protected]" , 3, panel.RowCount-1);

Sé que esta pregunta es muy antigua, pero alguien podría encontrar útil lo siguiente:

En primer lugar, tenga en cuenta que la respuesta de petchirajan es buena, pero si tiene al menos una fila existente (títulos, por ejemplo) y desea continuar la lista usando la altura establecida usando el editor visual, y sin tener que modificar el código, usted puede usar esto:

private void AddItem(string address, string contactNum, string email )
    
        //get a reference to the previous existent 
        RowStyle temp = panel.RowStyles[panel.RowCount - 1];
        //increase panel rows count by one
        panel.RowCount++;
        //add a new RowStyle as a copy of the previous one
        panel.RowStyles.Add(new RowStyle(temp.SizeType, temp.Height));
        //add your three controls
        panel.Controls.Add(new Label() Text = address, 0, panel.RowCount - 1);
        panel.Controls.Add(new Label()  Text = contactNum , 1, panel.RowCount - 1);
        panel.Controls.Add(new Label()  Text = email , 2, panel.RowCount - 1);
    

Si prefiere un método genérico para una tabla genérica:

private void AddRowToPanel(TableLayoutPanel panel, string[] rowElements)
    
        if (panel.ColumnCount != rowElements.Length)
            throw new Exception("Elements number doesn't match!");
        //get a reference to the previous existent row
        RowStyle temp = panel.RowStyles[panel.RowCount - 1];
        //increase panel rows count by one
        panel.RowCount++;
        //add a new RowStyle as a copy of the previous one
        panel.RowStyles.Add(new RowStyle(temp.SizeType, temp.Height));
        //add the control
        for (int i = 0; i < rowElements.Length; i++)
        
            panel.Controls.Add(new Label()  Text = rowElements[i] , i, panel.RowCount - 1);
        
    

También puede hacer esto usando una Colección en lugar de una array usando:

 private void AddRowToPanel(TableLayoutPanel panel, IList rowElements)
    ...

Espero que esto ayude.

en cada ejemplo:

int i=0;
foreach (KeyValuePair kv in MyCollection)

    tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
    tableLayoutPanel1.Controls.Add(new Label()  Text = kv.Key , 0, i);
    i++;

Acuérdate de que te permitimos aclarar tu experiencia si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *