none
Actulizar fila Datagridview RRS feed

  • 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

    lunes, 4 de marzo de 2019 1:45

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 If


    Saludos, Javier J

    • Marcado como respuesta El_vena martes, 19 de marzo de 2019 19:24
    lunes, 4 de marzo de 2019 17:47

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)
    Next

    que lo que hace es añadir esas filas con una cantidad 1 y por eso te las repite. 


    Saludos, Javier J

    lunes, 4 de marzo de 2019 8:15
  • 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 

    lunes, 4 de marzo de 2019 17:21
  • 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 If


    Saludos, Javier J

    • Marcado como respuesta El_vena martes, 19 de marzo de 2019 19:24
    lunes, 4 de marzo de 2019 17:47
  • Muchas gracias estimado, era lo que necesitaba, se lo agradezco mucho. 
    martes, 19 de marzo de 2019 19:25