martes, 15 de septiembre de 2015

Eliminar una fila de TableLayoutPanel en Windows Forms C#

Hola muy buenas.

Para aquellos que estén trabajando con TableLayoutPanel de Windows Forms, os traigo un método que nos permite eliminar una fila de la tabla con la que estemos trabajando.

Buscando por Internet, he encontrado muchos ejemplos de los cuales me he basado, pero ninguno de ellos funcionan al 100%. Este es más genérico y lo he utilizado para mi trabajo y creo que puede ser de ayuda para cualquiera.


public static void RemoveRowTableLayout(System.Windows.Forms.TableLayoutPanel tableLayoutPanel, int rowNumber)
{

 var controlesTotal = Enumerable.Range(0, tableLayoutPanel.ColumnCount).Select(x => new Tuple(tableLayoutPanel.GetControlFromPosition(x, rowNumber), x)).ToArray;

 for (index = 0; index <= controlesTotal.Length - 1; index++) {
  dynamic item = controlesTotal(index);

  if ((item.Item1 != null)) {
   tableLayoutPanel.Controls.Remove(item.Item1);
  }
 }

 foreach (Control control in tableLayoutPanel.Controls) {
  int row = tableLayoutPanel.GetRow(control);
  if (row > rowNumber) {
   tableLayoutPanel.SetRow(control, row - 1);
  }
 }

 tableLayoutPanel.RowStyles.RemoveAt(rowNumber);
 tableLayoutPanel.RowCount = tableLayoutPanel.RowCount - 1;

}

Una posible mejora puede ser transformar el método a un método extensor para que pueda ser encapsulado dentro de la misma clase del control tabla.

No hay comentarios:

Publicar un comentario