Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Sumar registros repetidos de un datagridview en otro

Estas en el tema de Sumar registros repetidos de un datagridview en otro en el foro de .NET en Foros del Web. Hola, gracias de antemano por la ayuda. mi inquietud es la siguiente, quiero sumar los registros repetidos de mi tabla REQUISICION_PRODUCTO para agregarlos a la ...
  #1 (permalink)  
Antiguo 06/08/2013, 11:17
 
Fecha de Ingreso: agosto-2013
Ubicación: Machala, El Oro, Ecuador
Mensajes: 7
Antigüedad: 10 años, 8 meses
Puntos: 0
Sumar registros repetidos de un datagridview en otro

Hola, gracias de antemano por la ayuda.

mi inquietud es la siguiente, quiero sumar los registros repetidos de mi tabla REQUISICION_PRODUCTO para agregarlos a la tabla ORDEN_COMPRA:
--------------------------------------
- REQUISICION_PRODUCTO -
--------------------------------------
Nº ITEM CANT ESTADO
001 005 10 2
002 010 02 2
003 005 01 2
004 007 15 2
005 010 11 2

-------------------------------------------
- ORDEN_COMPRA -
-------------------------------------------
Nº ITEM CANT VALOR U VALOR T
001 005 11 1.5 16.5
002 010 13 2.7 08.1
003 007 15 3.0 45.0

No lo hago directo desde la base de datos porque necesito identificar los registros de la REQUISICION DE PRODUCTO para cambiar su estado a 3, que seria aprobado y no se me listen en una nueva ORDEN DE COMPRA.

Lo he estado intentando sin exito de la siguiente forma, se el bucle se vuelve infinito:
Public Sub cargarDetalleOrdenCompra()
Try
'Aqui cargo el primer DataGridView
dgvDetalleRequisicionPS.DataSource = objetoOrdenCompra.buscarDetalleRequisicionProducto ServicioXIdProveedor(lblIdProveedorGeneral.Text)
'Aqui intento pasar los datos al otro Datagridview
For Each Fila1 As DataGridViewRow In dgvDetalleRequisicionPS.Rows

Dim Añadir As Boolean = True

For Each Fila2 As DataGridViewRow In dgvDetalleOrdenCompra.Rows
If Fila2.Cells("idItem").Value = Fila1.Cells("ID_SECUENCIAL_ITEM").Value.ToString Then
Fila2.Cells("cantidadProductoServicio").Value = CType(Fila2.Cells("cantidadProductoServicio").Valu e, Integer) + CType(Fila1.Cells("CANTIDAD").Value, Integer)
Añadir = False
End If
If Añadir = True Then
'los dos últimos campos los envió como "" porque los valores unitarios se los ingresa manualmente y el valor total se calcula de forma automática dgvDetalleOrdenCompra.Rows.Add(Fila1.Cells("ID_SEC UENCIAL_ITEM").Value.ToString, Fila1.Cells("UMEDIDA_DETALLE_REQUISICION_PS").Valu e.ToString, Fila1.Cells("CANTIDAD").Value.ToString, "", "")
End If
Next
Next
Catch ex As Exception
MsgBox("CARGAR DETALLE ORDEN DE COMPRA." & vbNewLine & ex.Message.ToString, MsgBoxStyle.Critical, "MENSAJE DE EXCEPCIÓN")
End Try
End Sub

Última edición por PatricioGalarzaR; 06/08/2013 a las 11:27
  #2 (permalink)  
Antiguo 07/08/2013, 12:59
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Sumar registros repetidos de un datagridview en otro

Me extraña que se forme un bucle infinito, más bien sería que no hace nada, a no ser que falte algo más en el código.

El problema es que el If de "Añadir" debe estar fuera del segundo For:

Código vb:
Ver original
  1. Public Sub cargarDetalleOrdenCompra()
  2.     Try
  3.         'Aqui cargo el primer DataGridView
  4.         dgvDetalleRequisicionPS.DataSource = objetoOrdenCompra.buscarDetalleRequisicionProducto ServicioXIdProveedor(lblIdProveedorGeneral.Text)
  5.         'Aqui intento pasar los datos al otro Datagridview
  6.         For Each Fila1 As DataGridViewRow In dgvDetalleRequisicionPS.Rows
  7.             Dim Añadir As Boolean = True
  8.             For Each Fila2 As DataGridViewRow In dgvDetalleOrdenCompra.Rows
  9.                 If Fila2.Cells("idItem").Value = Fila1.Cells("ID_SECUENCIAL_ITEM").Value.ToString Then
  10.                     Fila2.Cells("cantidadProductoServicio").Value = CType(Fila2.Cells("cantidadProductoServicio").Valu e, Integer) + CType(Fila1.Cells("CANTIDAD").Value, Integer)
  11.                     Añadir = False
  12.                     Exit For
  13.                 End If             
  14.             Next
  15.            
  16.             If Añadir = True Then
  17.                 dgvDetalleOrdenCompra.Rows.Add(Fila1.Cells("ID_SECUENCIAL_ITEM").Value.ToString, Fila1.Cells("UMEDIDA_DETALLE_REQUISICION_PS").Value.ToString, Fila1.Cells("CANTIDAD").Value.ToString, "", "")
  18.             End If
  19.         Next
  20.     Catch ex As Exception
  21.         MsgBox("CARGAR DETALLE ORDEN DE COMPRA." & vbNewLine & ex.Message.ToString, MsgBoxStyle.Critical, "MENSAJE DE EXCEPCIÓN")
  22.     End Try
  23. End Sub

Si sigue dando problemas, habría que ver que datos hay exactamente.
  #3 (permalink)  
Antiguo 07/08/2013, 14:50
 
Fecha de Ingreso: agosto-2013
Ubicación: Machala, El Oro, Ecuador
Mensajes: 7
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Sumar registros repetidos de un datagridview en otro

Hola gracias por responder, le hice seguimiento al codigo y se hace un blucle infinito que va agregando nuevas filas al datagridview. Y al poner el if añadir donde tu sigieres pasa los campos sin repetir pero no suma las cantidades
  #4 (permalink)  
Antiguo 07/08/2013, 15:33
 
Fecha de Ingreso: agosto-2013
Ubicación: Machala, El Oro, Ecuador
Mensajes: 7
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Sumar registros repetidos de un datagridview en otro

no esta acumulando las cantidades porque se esta generando una excepcion con el siguiente mensaje "la conversión de la cadena "" en el tipo 'Integer' no es valida." creo que hay un problema con el recorrido de los 'for each' pero no lo capto todavía, o existirá otra forma de hacerlo no se si me pudieran ayudar por favor.
  #5 (permalink)  
Antiguo 08/08/2013, 10:01
 
Fecha de Ingreso: agosto-2013
Ubicación: Machala, El Oro, Ecuador
Mensajes: 7
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Sumar registros repetidos de un datagridview en otro

HAS QUE POR FIN, YA FUNCIONO LE HICE UNOS CAMBIOS AL RECORRIDO CAMBIE LOS 'FOR EACH' POR UN 'FOR' NORMAL PARA PODER HACER MEJOR EL SEGUIMIENTO Y ME DI CUENTA QUE AL AGREGAR LA NUEVA FILA AL DGV DE ORDEN DE COMPRA TENIA 6 COLUMNAS Y ESTABA ENVIANDO 5 PARÁMETROS POR ESO NO ACUMULABA PORQUE LA CANTIDAD LA COLUMNA ESTABA VACIA.... COSAS QUE PASAN

AQUÍ PONGO EL CÓDIGO DE COMO ME FUNCIONO:

Código vb:
Ver original
  1. Try
  2.             ' SE CARGA EL PRIMER DATAGRIDVIEW
  3.            dgvDetalleRequisicionPS.DataSource = objetoOrdenCompra.buscarDetalleRequisicionProductoServicioXIdProveedor(lblIdProveedorGeneral.Text)
  4.             'RECORRE EL DATAGRIDVIEW CARGADO ANTERIORMENTE
  5.            For indice = 0 To dgvDetalleRequisicionPS.RowCount - 1
  6.                 Dim Añadir As Boolean = True
  7.                 'RECORRE EL DATAGRIDVIEW QUE SE VA A LLENAR
  8.                For indiceOrden = 0 To dgvDetalleOrdenCompra.RowCount - 2
  9.                     'PREGUNTA SI LOS ITEMS SON IGUALES, PARA VER SI YA HA SIDO AGREGADO
  10.                    If dgvDetalleOrdenCompra.Rows(indiceOrden).Cells("idItem").Value = dgvDetalleRequisicionPS.Rows(indice).Cells("ID_SECUENCIAL_ITEM").Value Then
  11.                     'SI YA HA SIDO AGREGADO ACUMULA LAS CANTIDADES                        
  12. dgvDetalleOrdenCompra.Rows(indiceOrden).Cells("cantidadProductoServicio").Value = CType(dgvDetalleOrdenCompra.Rows(indiceOrden).Cells("cantidadProductoServicio").Value, Integer) + CType(dgvDetalleRequisicionPS.Rows(indice).Cells("CANTIDAD").Value, Integer)
  13.                         'SE CAMBIA EL VALOR DE "AÑADIR" PARA QUE NO AGREGUE NUEVA FILA
  14.                        Añadir = False
  15.                     End If
  16.                 Next
  17.                 'SI "AÑADIR" ES VERDADERO NO HUBO COINCIDENCIAS Y AGREGA NUEVA FILA
  18.                If Añadir = True Then
  19.                     'CREA LA NUEVA FILA
  20.                    dgvDetalleOrdenCompra.Rows.Add()
  21.                     'SE AGREGA VALORES SOLO A LAS COLUMNAS QUE NECESITAMOS DE LA NUEVA FILA
  22.                    dgvDetalleOrdenCompra.Rows(indice).Cells(0).Value = dgvDetalleRequisicionPS.Rows(indice).Cells("ID_SECUENCIAL_ITEM").Value.ToString
  23. 'ESTE PASO ES PROPIO DE LAS NECESIDADES DEL FORMULARIO SE PUEDE ENVIAR UN VALOR DIRECTO PERO QUI SE ENVIA EL VALOR DEL ID_ITEM PAR QUE ME DEVUELVA EL NOMBRE_ITEM
  24.                    objetoSecuencialItem.buscarNombreSecuencialItemXIdSecuencialItem(dgvDetalleOrdenCompra.Rows(indice).Cells(0).Value)
  25.                     dgvDetalleOrdenCompra.Rows(indice).Cells(1).Value = objetoSecuencialItem.nombreSecuencial
  26.                     dgvDetalleOrdenCompra.Rows(indice).Cells(2).Value = dgvDetalleRequisicionPS.Rows(indice).Cells("UMEDIDA_DETALLE_REQUISICION_PS").Value.ToString
  27.                     dgvDetalleOrdenCompra.Rows(indice).Cells(3).Value = dgvDetalleRequisicionPS.Rows(indice).Cells("CANTIDAD").Value
  28.                 End If
  29.             Next
  30.         Catch ex As Exception
  31.             MsgBox("CARGAR DETALLE ORDEN DE COMPRA." & vbNewLine & ex.Message.ToString, MsgBoxStyle.Critical, "MENSAJE DE EXCEPCIÓN")
  32.         End Try
  #6 (permalink)  
Antiguo 08/08/2013, 10:04
 
Fecha de Ingreso: agosto-2013
Ubicación: Machala, El Oro, Ecuador
Mensajes: 7
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Sumar registros repetidos de un datagridview en otro

GRACIAS alexg88 por tu tiempo y tu aporte. Y espero a los que lean este tema que les sirva de ayuda

Etiquetas: datagridview, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:51.