[How To] Rellenar un ListView con un DataTable

Introducción

Hace algún tiempo publique en mi antiguo Blog donde explicaba como rellenar un ListView usando Visual Basic.

Es un tema bastante recurrente en los foros MSDN, y aun hoy, recibo bastantes visitas a dicho post, por lo que he decidido, publicarlo nuevamente pero en este caso en C#.

En el ejemplo voy a utilizar Visual Studio 2010.

Código

Existe varías formas de realizarlo:

– Crear un control propio que herede de ListView.

– Definir un método en una clase que reciba como parámetros el ListView a rellenar,  y un DataTable con los datos a rellenar.

– Un método Extensor que extienda la funcionalidad de ListView. (No válido en VS 2003 ni VS2005)

 

En este caso, me he decantado por hacerlo de la última forma que indicaba, es decir, con un método Extensor.

Para ello, será necesario que creemos una nueva clase estática en nuestro proyecto, y definamos el método encargado de rellenar el ListView.

   1: public static class ListViewExtensions

   2:     {

   3:         public static void Fill(this ListView listView, DataTable data)

   4:         {

   5:             if (data == null) throw new ArgumentNullException("Es necesario enviar una tabla.");

   6:             if (data.Columns.Count == 0) return;

   7:             if (data.Rows.Count == 0) return;

   8:             data.Columns.Cast<DataColumn>().ToList().ForEach(column => listView.Columns.Add(column.Caption));

   9:             

  10:             data.AsEnumerable().ToList().ForEach(row=>

  11:                 {

  12:                     ListViewItem item = new ListViewItem(Convert.ToString(row[0]));

  13:                     row.ItemArray.ToList().Skip(1).ToList().ForEach(value =>

  14:                         item.SubItems.Add(Convert.ToString(value)));

  15:                     listView.Items.Add(item);

  16:                 });

  17:         }

  18:     }

El método va a recibir como parámetros el objeto que extiende (gracias a la palabra this), y el objeto DataTable que queremos visualizar.

En primer instancia vamos a realizar algunas validaciones para evitar posibles errores.

Después rellenaremos los nombres de las cabeceras de las columnas del ListView con las columnas de la Tabla, y a continuación rellenaremos los elementos del ListView con las filas de la tabla.

Para que funcione correctamente será necesario establecer la propiedad “View.Details” del ListView al valor: “View.Details”.

¿Cómo invocamos a este método?

   1: Datatable dtbDatos=new DataTable();

   2: ...

   3: myListView.Fill(dtbDatos);

Cuando estemos escribiendo el intellisense de VS nos mostrará las opciones disponibles y veremos el método Fill con el icono extensor .

 

Espero que os sea de utilidad.

 

Saludos!

Deja un comentario

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