ejemplos c# .net tablelayoutpanel

c# - ejemplos - Agregar fila dinĂ¡micamente en TableLayoutPanel



table layout panel c# dynamic (3)

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

Quiero agregar estas entradas dinámicamente fila por fila en TableLayoutPanel en Windows Form en c #

¿Cómo puedo hacer eso?


Sé que esta pregunta es muy antigua, pero alguien podría tomar esto como algo útil.

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 el conjunto de alturas con el editor visual, sin modificar el código, 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 el 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); } }

Puede hacer esto también usando una Colección en lugar de una matriz usando

private void AddRowToPanel(TableLayoutPanel panel, IList<string> rowElements) ...

Espero eso ayude.


en el ejemplo de foreach:

int i=0; foreach (KeyValuePair<string,string> kv in MyCollection) { tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F)); tableLayoutPanel1.Controls.Add(new Label() { Text = kv.Key }, 0, i); i++; }