El operador GroupBy nos permite agrupar una secuencia de datos bajo una clave.
Mas información.
group (Cláusula, Referencia de C#)
Group By (Cláusula, Visual Basic)
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.
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.
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; } }
Public Class Persona Public Property Nombre() As String Public Property Edad() As Integer Public Property Pais() As String Public Sub New(ByVal nom As String, ByVal ed As Integer, ByVal pa As String) Nombre = nom Edad = ed Pais = pa End Sub End Class
Es una simple clase que nos servirá para el manejo de nuestros datos.
Ahora creemos una lista de tipo Persona y agreguemos unos registros.
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") };
Dim personas As New List(Of Persona)() From { 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.
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); }
For Each p In personas Dim item As New ListViewItem(p.Pais) item.SubItems.Add(p.Nombre) item.SubItems.Add(p.Edad.ToString()) listView1.Items.Add(item) Next
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.
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); } }
Dim agrupar = personas.GroupBy(Function(persona) persona.Pais) Dim group As String = "" Dim g As New ListViewGroup() listView1.Items.Clear() For Each p In agrupar If p.Key.ToString() <> group Then g = New ListViewGroup(p.Key.ToString()) group = p.Key.ToString() listView1.Groups.Add(g) End If For Each persona In p Dim item As New ListViewItem("") item.SubItems.Add(persona.Nombre) item.SubItems.Add(persona.Edad.ToString()) item.Group = g listView1.Items.Add(item) Next Next
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.
Eso es todo espero les sirva mucho saludos desde El Salvador...
Descargar Proyecto C#
Descargar Proyecto VB.Net
No olvides suscribirte al blog para estar pendientes de mis últimos artÃculos.
Si quieren donarme para una soda lo pueden hacer aqui.
4 Comentarios
Hey Cristian Barbaro sos la hostia hermano y un orgullo para este pais!
ResponderEliminarSegui echandole ganas y echandole ganas a qiuenes lo necesitamos!! (y)
Hola.
EliminarGracias y por supuesto que seguiré aportando artÃculos y ejemplo que puedan ser de ayuda a los demás.
Saludos.
Lo probare!!!...gracias por compartir Cristian :)
ResponderEliminarEsto se puede hacer en un datagridview?
ResponderEliminar