Principales respuestas
Actulizar fila Datagridview

Pregunta
-
Tengo el siguiente formulario el cual al ingresar el código cualquiera ejemplo 12345 en el textbox trae una y la de datos que se muestran en la imagen, si vuelvo a ingresar el mismo codigo, se deberia actualizar la cantidad y nada mas, ya que los datos se estarían repitiendo, pero se estan volviendo a agregar los datos, lo cual no consigo lograr, adjunto el codigo que estoy utilizando y las imagenes mas abajo, de antemano gracias.
Dim func As New L_Ventas Dim dt As New DataTable dt = func.obtenener_producto(codigo_barras.Text) If dt.Rows.Count > 0 Then For Each row As DataRow In dt.Rows For Each fila As DataGridViewRow In Listado_Ventas.Rows If fila.Cells("COD_BARRAS").Value = row("COD BARRAS").ToString Then fila.Cells("CANTIDAD").Value = CInt(fila.Cells("CANTIDAD").Value) + 1 End If Next Next For Each row As DataRow In dt.Rows Listado_Ventas.Rows.Add(row("COD BARRAS").ToString, row("DESCRIPCION").ToString, 1) Next
Respuestas
-
Vale, creo que ahora entiendo lo que quieres hacer. El problema lo tienes en que pase lo que pase estás añadiendo todos los registros con esas 3 últimas líneas del For ... Next
Tienes que modificar ese código para añadir solo en el caso de que no existan previamente:
Dim func As New L_Ventas
Dim dt As New DataTable
Dim Existe as Boolean
dt = func.obtenener_producto(codigo_barras.Text)
If dt.Rows.Count > 0 Then
For Each row As DataRow In dt.Rows
Existe = False
For Each fila As DataGridViewRow In Listado_Ventas.Rows
If fila.Cells("COD_BARRAS").Value = row("COD BARRAS").ToString Then
fila.Cells("CANTIDAD").Value = CInt(fila.Cells("CANTIDAD").Value) + 1
Existe = True
End If
Next
If Not Existe then
' El producto no existía en el grid. Lo añado con cantidad = 1
Listado_Ventas.Rows.Add(row("COD BARRAS").ToString, row("DESCRIPCION").ToString, 1)
End If
Next
End IfSaludos, Javier J
- Marcado como respuesta El_vena martes, 19 de marzo de 2019 19:24
Todas las respuestas
-
El problema lo tienes en el datatable que te devuelve la función func.obtenener_producto. Te está devolviendo productos que no tiene el código de barras buscado "12345". Eso por una parte, y por otra estás haciendo que si el datatable devuelto tiene filas se les sume una unidad a la cantidad pero luego ejecutas
For Each row As DataRow In dt.Rows
Listado_Ventas.Rows.Add(row("COD BARRAS").ToString, row("DESCRIPCION").ToString, 1)
Nextque lo que hace es añadir esas filas con una cantidad 1 y por eso te las repite.
Saludos, Javier J
- Propuesto como respuesta Pedro AlfaroModerator lunes, 4 de marzo de 2019 15:59
-
Creo que no me explique bien, trataré de explicarlo lo mejor posible, tengo una tabla con los siguientes campos:
Cod Barras - Descripción - Cod Asociado
12345 Coca cola 2 litros retornable 12345
1001 Tapas para café 12345
1002 Revolvedor 12345
Y así con más datos, pero que tienen otro Cod Asociado, entonces tengo un select * from Productos Where Cod Asociado = @codigo
Entonces cuando ingreso un Cod Asociado en el textbox, me trae todos los campos que tengan como Cod asociado el que se a Ingresado(como se ve en la primera imagen) quedando la cantidad en 1 porque es la priemra ves que se digita el código, si vuelvo a ingresar el mismo codigo, debería la cantidad aumentar a 2 de este modo evitar que allan tantos datos en el datagrid, luego si ingreso un Cod Asociado que no se encuentra en el datagrid, me anexe las nuevas filas, entonces eso es lo que no puedo conseguir ya que si logro aumentar la cantidad, pero nuevamente me vuelve a anexar las filas siendo que estas ya existen
-
Vale, creo que ahora entiendo lo que quieres hacer. El problema lo tienes en que pase lo que pase estás añadiendo todos los registros con esas 3 últimas líneas del For ... Next
Tienes que modificar ese código para añadir solo en el caso de que no existan previamente:
Dim func As New L_Ventas
Dim dt As New DataTable
Dim Existe as Boolean
dt = func.obtenener_producto(codigo_barras.Text)
If dt.Rows.Count > 0 Then
For Each row As DataRow In dt.Rows
Existe = False
For Each fila As DataGridViewRow In Listado_Ventas.Rows
If fila.Cells("COD_BARRAS").Value = row("COD BARRAS").ToString Then
fila.Cells("CANTIDAD").Value = CInt(fila.Cells("CANTIDAD").Value) + 1
Existe = True
End If
Next
If Not Existe then
' El producto no existía en el grid. Lo añado con cantidad = 1
Listado_Ventas.Rows.Add(row("COD BARRAS").ToString, row("DESCRIPCION").ToString, 1)
End If
Next
End IfSaludos, Javier J
- Marcado como respuesta El_vena martes, 19 de marzo de 2019 19:24
-