none
Como sumar columnas repetidas de un datagrid??? RRS feed

  • Pregunta

  • Primero tengo esta tabla en un datagrid:

    itemID............cantidad

    001.....................10

    002......................5

    003......................2

    001......................4

    003......................2

    Entonces al dar click en un boton quiero "LLENAR OTRO DATAGRID" con las sumas de las columnas repetidas, y q solo aparescan una vez!

    itemID............cantidad

    001.....................14

    002......................5

    003......................4

    Muchas gracias por su ayuda!

    Estoy programando en vb.net 2010

    miércoles, 26 de diciembre de 2012 20:17

Respuestas

  • no te animas a usar linq para agrupar los registros

    Dim result = From row In DataGridView1.Rows.Cast(Of DataGridViewRow) _
                        Group row By Convert.ToString(row.Cells("itemID").Value) Into Group _
                        Select New With { _
                              .itemId = Group.Key, _
                             .cantidad = Group.Sum( Function(x) Convert.ToInt32(x.Cells("cantidad").Value)) _
                       }


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 26 de diciembre de 2012 20:31

Todas las respuestas

  • Primero tengo esta tabla en un datagrid:

    itemID............cantidad

    001.....................10

    002......................5

    003......................2

    001......................4

    003......................2

    Entonces al dar click en un boton quiero "LLENAR OTRO DATAGRID" con las sumas de las columnas repetidas, y q solo aparescan una vez!

    itemID............cantidad

    001.....................14

    002......................5

    003......................4

    Muchas gracias por su ayuda!

    Estoy programando en vb.net 2010




    miércoles, 26 de diciembre de 2012 16:43
  • ¿Son datagrid enlazados a datos? Si es así tendrías que presentar el 2º grid como una consulta de datos agrupados.

    "Select ItemID, Sum(cantidad) As Suma From Tabla Group By ItemID Order By ItemID"


    Saludos, Javier J

    miércoles, 26 de diciembre de 2012 17:02
  • El primer grid, recoge los datos mediante una consulta en sql y originalmente no hay valores repetidos.

    El usuario es quien duplica las lineas en en grid, y asigna la cantidad en el campo "cantidad".

    pero al al hacer un calculo necesito que de nuevo esten las lineas unicas en otro grid y con la cantidad total que se les asigno en diferentes lineas.

    comprendes? Por lo que el segundo data grid tiene q hacer la suma de los valores repetidos "del primer grid" y "no" de una tabla en sql.

    miércoles, 26 de diciembre de 2012 17:08
  • El usuario es quien duplica las lineas en en grid, y asigna la cantidad en el campo "cantidad".

    como es que agregas esa info el usuario al grid ? lo haces en controles por fuera del grid y algun boton de agregar

    lo planteo porque de esa forma seria muy simple podrias validar si existe algun registro y puedas realizar la suma

    si edita directo en el grid eso es mas complicado, porque no solo es validar sino ademas quitar ese registro si es que esta reptido

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 26 de diciembre de 2012 17:22
  • Lo hace "directamente en el grid" en la celda de la columna "cantidad" ellos ingresan la cantidad.

    miércoles, 26 de diciembre de 2012 17:38
  • y no podrias ahcerlo por fuera ? porque seria mucho mas simple de implementar porque antes de volcar los datos lo validas y si existe un registro con el mismo nombre solo suma

    sino existe lo agregas, pero deberia estar por fuer, pondrias dos textbox y un boton para agregar

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 26 de diciembre de 2012 17:53
  • Gracias por la sugerencia, comprendo q seria mas facil por fuera. Pero esta aplicacion q estoy haciendo es una replica de una aplicacion de un RMS de Microsoft, pero q necesito agregarle mas detalles, y el codigo de mi microsoft es cerrado.

    En el campo cantidad se escribe el resultado de un inventario fisico, y es una lista bien grande de productos, por lo q quienes hacen el requerimiento del sistema, necesitan q se agregue ahi mismo en la celda, y no mediante controles externos. Se q es mas facil pero no puedo decidirlo.

    miércoles, 26 de diciembre de 2012 17:59
  • Bueno, entonces podrías usar algo como esto:

    For each Fila1 as DataGridViewRow in DataGridView1.Rows

       Dim Añadir as Boolean = True

       For each Fila2 as DataGridViewRow in DataGridView2.Rows

            If Fila2.Cells("ItemID")=Fila1.Cells("ItemID") then
               Fila2.Cells("cantidad").Value = Fila2.Cells("cantidad").Value + Fila1.Cells("cantidad").Value
               Añadir = False
            EndIf

            If Añadir then
               DataGridView2.Rows.Add (Fila1.Cells("ItemID").Value, Fila1.Cells("cantidad").Value
            End If

        Next

    Next


    Saludos, Javier J

    miércoles, 26 de diciembre de 2012 18:03
  • el codigo de mi microsoft es cerrado

    pero si el codigo es cerrado como piensas modificar la funcionalidad ?


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 26 de diciembre de 2012 18:04
  • Quise decir debido a q el codigo de microsoft es cerrado, no puedo ver como ellos lo hacen. Como mencione estoy haciendo una "replica" del programa.

    El programa es totalmente desarrollado por mi, Solo q tiene q ser igual al q ya se utiliza de microsoft.

    miércoles, 26 de diciembre de 2012 18:13
  • no te animas a usar linq para agrupar los registros

    Dim result = From row In DataGridView1.Rows.Cast(Of DataGridViewRow) _
                        Group row By Convert.ToString(row.Cells("itemID").Value) Into Group _
                        Select New With { _
                              .itemId = Group.Key, _
                             .cantidad = Group.Sum( Function(x) Convert.ToInt32(x.Cells("cantidad").Value)) _
                       }


    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 26 de diciembre de 2012 20:31
  • Hola, si son datos enlazados a una BD, utiliza en la 2da consulta DISTINCT
    miércoles, 26 de diciembre de 2012 22:30