Hola a todos!

A pedido del grupo de Facebook .NET en Español PROGRAMADORES, he realizado el ejemplo con Linq y C# para detectar en una colección de elementos si hay datos repetidos y luego colocarlos en una segunda colección identificando los registros y añadiendo la cantidad de veces que se repitieron.

Antes que nada quiero recomendar que cuando se quiera trabajar sobre grillas, y manipular la información que contienen, yo siempre sugiero que se usen Entidades que sean agnósticas del origen de los mismos, vale decir que no importa si los datos provienen de una Base de Datos o si provienen de un array de elementos, de manera que al momento de trabajar con esos datos (filtros, búsquedas, ordenamiento, etc.) no se toquen los controles, porque sería complicado y además que habría que estar “casteando” (conviertiendo de un tipo a otro) lo cual afecta seriamente el rendimiento por si tenemos mucha información. Además que podemos probar este código en proyectos Web, WPF, Windows Phone, etc. y se fomenta la reutilización de código.

Antes que nada para que puedan compilar el proyecto es necesario al menos Visual Studio 2010 con SP1, aunque como ya habrán visto mi post anterior, pueden usar Visual Studio 2015 Community Edition (que además es gratuita) y pueden ver todo el código.

Sin más preámbulos, empecemos por generar dicha información tal como nos la sugiere nuestro colega Chrisitan Von Ravanal:

Muestra de como deberia mostrarse la aplicacion

Para generar los datos de la primera grilla, necesitamos crear una clase llamada ConsultoraPedido con dos propiedades de tipo entero:

Snap13

Para tener los datos de la segunda grilla agregamos otra clase llamada DatoRepetido también con dos propiedades de tipo entero:

Snap14

Una vez realidado esto, compilamos el Proyecto con F6.

Snap1

Si todo compila correctamente, procedemos a ir al menú View -> Other Windows -> Data Sources, o lo que es más práctico, presionar la combinación de teclas Shift + Alt + D.

Snap12

Presionamos el botón Add New Data Source, y en el asistente seleccionamos Object, luego Next, y como nuestro proyecto ya está compilado seleccionamos los objetos que hemos creado, para luego presionar Finish.

Snap2

Se podrá apreciar de que ambos objetos ahora forman parte de nuestra colección de datos con sus respectivas propiedades.

Snap3

Ahora, eliminamos el formulario Form1 y añadimos un formulario Windows llamado MainForm, y en la ventana Data Sources, escogemos el objeto ConsultoraPedido, asegúrense que tenga un icono de DataGridView, y lo arrastramos hacia el diseñador del formulario, esto nos permitirá que el diseñador de Windows Forms, cree la grilla y a su vez un control BindingSource, que creará un enlace entre la colección de objetos y el control DataGridView. De la misma manera repetimos el paso con la clase DatoRepetido para la creación de la segunda grilla.

Snap4

Para el propósito de este ejemplo eliminamos el control BindingNavigator del formulario ya que no es necesario.

Snap5

Aca nos hemos ahorrado mucho trabajo en tener que diseñar las grillas “a mano” y tener que asignar las columnas, puesto que esto ha hecho que los nombres de las columnas se infieran basadas en los nombres de las propiedades de las clases.

Snap6

Una vez hecho esto, en la vista de código (F7) procedemos a poblar las clases con dos variables de lista que contendrán ambos datos, las declaramos a nivel de clase.

Snap7

En el constructor del mismo, creamos una variable de lista que contendrá la lista de esta entidad ConsultoraPedido:

Snap8

Aquí he generado un bucle de mil elementos para poblar la lista con datos de prueba. Ustedes pueden usar cualquier fuente de datos obviamente.

Ahora en el evento Load del formulario, usaré Linq para recorrer la lista de elementos de la primera colección y proceder a crear una segunda colección con los datos que requiero, en este caso buscaremos todos los pedidos que se repiten y colocaremos su respectiva cantidad en la propiedad adecuada.

Snap9

Luego esta segunda colección la añadimos al segundo control BindingSource y de forma automática llenará el control DataGridView.

Presionamos F5 para ejecutar el proyecto y podrán ver que el resultado es interesante.

Snap10

Pueden descargar el código que lo he colocado en mi repositorio GitHub.

ver-github1

Espero que les haya servido.

Comenten y compartan.

Saludos. @ Lima, Perú

Anuncios