Autor Tema: (aporte)Agrupar Datos Linq (GroupBy) C# - VB.Net  (Leído 2607 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cristiantorres

  • Sv Jr.
  • **
  • Mensajes: 76
  • Bendiciones para todos
    • Blog dedicado a la programacion
(aporte)Agrupar Datos Linq (GroupBy) C# - VB.Net
« : septiembre 22, 2012, 09:15:31 pm »
El operador GroupBy nos permite agrupar una secuencia de datos bajo una clave.

En este articulo trataremos los siguientes puntos.
Mostrar datos de una lista en ListView.
Agrupar datos de una lista tipo clase.
Mostrar datos agrupados en ListView.


El ejemplo esta hecho con visual estudio 2010 en c# y vb.net pero lo explicare solo en c# pueden encontrarlo en vb.net como también descargarlo en ambos lenguajes desde mi blog dejare el link al final.


Veamos el diseño que tendrá nuestra aplicacion.


Como pueden observar el form solo cuenta con un listview al cual se le definieron 3 columnas en tiempo de diseño y también se tiene un botón.

Ahora agregamos una clase llamada Persona.
Código: [Seleccionar]
public class Persona
{
   public string Nombre { get; set; }
   public int Edad { get; set; }
   public string Pais { get; set; }
   public Persona(string nom, int ed, string pa)
   {
          Nombre = nom;
          Edad = ed;
          Pais = pa;
   }
}
Es una simple clase que nos servirá para el manejo de nuestros datos.

Ahora creemos una lista de tipo Persona y agreguemos unos registros.
Código: [Seleccionar]
List<persona> personas = new List<persona>
{
   new Persona("Cristian", 21, "El Salvador"),
   new Persona("Fatima", 19, "Argentina"),
   new Persona("Juan", 25, "El Salvador"),
   new Persona("Maria", 18, "España"),
   new Persona("Javier", 40, "Argentina"),
   new Persona("Rosa", 35, "Mexico"),
   new Persona("Josue", 26, "España"),
   new Persona("Karla", 50, "Mexico")
};
En los registros que hemos agregado pueden notar que algunas personas son del mismo país entonces utilizaremos ese dato para agruparlos por país.

Cargar datos en el ListView(cargamos los datos sin agrupar)
Primero cargaremos los datos así como están sin agrupar en listview.
Código: [Seleccionar]
foreach (var p in personas)
{
   ListViewItem item = new ListViewItem(p.Pais);
   item.SubItems.Add(p.Nombre);
   item.SubItems.Add(p.Edad.ToString());
   listView1.Items.Add(item);
}
Recorremos la lista con un ciclo foreach y dentro vamos agregando los datos al listview.

Agrupar los datos y mostrarlos en el ListView.
Agruparemos los datos por país y de una sola vez los mostraremos agrupados dentro del listview.
Código: [Seleccionar]
var agrupar = personas.GroupBy(persona => persona.Pais);
string group = "";
ListViewGroup g = new ListViewGroup();
listView1.Items.Clear();
foreach (var p in agrupar)
{
    if (p.Key.ToString() != group)
    {
         g = new ListViewGroup(p.Key.ToString());
         group = p.Key.ToString();
         listView1.Groups.Add(g);
    }
    foreach (var persona in p)
    {
         ListViewItem item = new ListViewItem("");
         item.SubItems.Add(persona.Nombre);
         item.SubItems.Add(persona.Edad.ToString());
         item.Group = g;
         listView1.Items.Add(item);
    }
}
Lo primero que hacemos es agrupar los datos haciendo uso de linq agrupamos los datos por país, luego declaramos una variable string vacía y también se crea un objeto ListViewGroup esto nos servirá para poder mostrar los datos agrupados en el listview, luego recorremos el resultado de nuestra consulta linq y vamos agregando los datos ya agrupados en el listview.




Pueden descargar el ejemplo en c# y vb.net desde mi blog.
http://cristiantorresalfaro.blogspot.com/2012/08/agrupar-datos-linq-groupby-c-vbnet.html

Saludos  :thumbsup:
Visita mi Blog C#, Asp.Net, Python y mas...
http://cristiantorresalfaro.blogspot.com
http://codemania.tk