none
Datos repetidos en Datagridview

    Pregunta

  • Hola, mi consulta es la siguiente tengo 4 textbox que son código,producto,cantidad y precio, al ingresar un código los texbox de producto y precio se llenan automáticamente y cantidad me marca 1, hasta ahi todo bien, luego esos datos los agrego a un Datagridview, ahora ejemplo agredo un nuevo código y se realiza el mismo proceso quedando así:

    CODIGO       PRODUCTOS        CANTIDAD      PRECIO

    1001           PRODUCTO A               1             500

    1002           PRODUCTO B               1             700

    ahora mi duda es si vuelvo a ingresar el código 1001 quiero que me lo sume a la cantidad que ya hay y quede asi

    CODIGO       PRODUCTOS        CANTIDAD      PRECIO

    1001           PRODUCTO A               2             500

    1002           PRODUCTO B               1             700

    en vez de asi 

    CODIGO       PRODUCTOS        CANTIDAD      PRECIO

    1001           PRODUCTO A               1             500

    1002           PRODUCTO B               1             700

    1001           PRODUCTO A               1             500

    Como puedo hacer eso?

    soy nuevo en esto de programar y estaría muy agradecido 






    • Editado El_vena domingo, 2 de octubre de 2016 20:40
    domingo, 2 de octubre de 2016 20:34

Respuestas

  • me da este error No se controlo NullReferenceException "Referencia a objeto no establecida como instancia de un objeto."

    El error se produce porque al no encontrar un valor coincidente se evalúa hasta la última fila (fila que permite la propiedad AllowUserToAddRows). Se podría evitar el error utilizando el método ToString() sobre el valor de la celda:

    Dim row = DataGridView1.Rows.Cast(Of DataGridViewRow)().
    		Where(Function(x) Convert.ToString(x.Cells(0).Value) = txtCodigo.Text).FirstOrDefault()


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 2 de octubre de 2016 21:51
  • pero como puedo hacer eso con un boton agregar, quiero decir ejemplo escribo 1001 y se llenan las cajas de texto apreto el boton y se agrega al datagridview, escribo 1002 se llenan las cajas de texto apreto agregar y se agregan, ahora vuelvo a escribir 1001 y que al apretar agregar el boton haga eso de si se repite el codigo la cantidad aumente en 1, no se si se entiende lo que quiero lograr 

    Hola El_vena,

    Puedes hacer :

    Private Sub BtnAgregar_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
      For Each fila As DataGridViewRow In DataGridView1.Rows
        If CStr(fila.Cells("CODIGO").Value) = txtCodigo.Text Then
           fila.Cells("CANTIDAD").Value = CInt(fila.Cells("CANTIDAD").Value) + CInt(txtCantidad.Text)
          Exit Sub 'Actualiza la fila y sale del evento
        End If
      Next
    
      'Si no encuentra agrega la fila
      DataGridView1.Rows.Add(txtCodigo.Text, txtProducto,
                             txtCantidad.Text, CDbl(txtPrecio.Text))
    
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    domingo, 2 de octubre de 2016 21:27

Todas las respuestas

  • Hola El_vena,

    Tendrías que recorrer las filas del DataGridView y verificar si existe el código, si existe cambiarle el valor.

     Dim cod As Integer = 1001
     Dim cant As Integer = 10
    
     For Each fila As DataGridViewRow In DataGridView1.Rows
         If CInt(fila.Cells("CODIGO").Value) = cod Then
            'Encontró, cambia el valor por le que estaba + el nuevo
            fila.Cells("CANTIDAD").Value = CInt(fila.Cells("CANTIDAD").Value) + cant
            Exit For 'Salimos del loop
         End If
     Next

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI


    domingo, 2 de octubre de 2016 20:41
  • pero como puedo hacer eso con un boton agregar, quiero decir ejemplo escribo 1001 y se llenan las cajas de texto apreto el boton y se agrega al datagridview, escribo 1002 se llenan las cajas de texto apreto agregar y se agregan, ahora vuelvo a escribir 1001 y que al apretar agregar el boton haga eso de si se repite el codigo la cantidad aumente en 1, no se si se entiende lo que quiero lograr 
    domingo, 2 de octubre de 2016 21:10
  • El_vena,

    Puedes buscar la coincidencia recorriendo las filas del objeto de tipo DataGridView y según el resultado agregarás una nueva fila o actualizarás una fila existente:

    Private Sub btnAgregar_Click(sender As Object, e As EventArgs) Handles btnAgregar.Click
    	Dim row = DataGridView1.Rows.Cast(Of DataGridViewRow)().
    		Where(Function(x) x.Cells(0).Value.ToString() = txtCodigo.Text).FirstOrDefault()
    
    	If row IsNot Nothing Then 'El código existe, acumular cantidad
    		row.Cells(2).Value += Convert.ToDecimal(txtCantidad.Text)
    	Else 'El código no existe, agregar fila
    		Dim index As Integer = DataGridView1.Rows.Add()
    
    		DataGridView1(0, index).Value = txtCodigo.Text
    		DataGridView1(1, index).Value = txtProducto.Text
    		DataGridView1(2, index).Value = Convert.ToDecimal(txtCantidad.Text)
    		DataGridView1(3, index).Value = Convert.ToDecimal(txtPrecio.Text)
    	End If
    End Sub
    
    



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 2 de octubre de 2016 21:14
  • me da este error No se controlo NullReferenceException "Referencia a objeto no establecida como instancia de un objeto."
    • Editado El_vena domingo, 2 de octubre de 2016 21:22
    domingo, 2 de octubre de 2016 21:21
  • pero como puedo hacer eso con un boton agregar, quiero decir ejemplo escribo 1001 y se llenan las cajas de texto apreto el boton y se agrega al datagridview, escribo 1002 se llenan las cajas de texto apreto agregar y se agregan, ahora vuelvo a escribir 1001 y que al apretar agregar el boton haga eso de si se repite el codigo la cantidad aumente en 1, no se si se entiende lo que quiero lograr 

    Hola El_vena,

    Puedes hacer :

    Private Sub BtnAgregar_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
      For Each fila As DataGridViewRow In DataGridView1.Rows
        If CStr(fila.Cells("CODIGO").Value) = txtCodigo.Text Then
           fila.Cells("CANTIDAD").Value = CInt(fila.Cells("CANTIDAD").Value) + CInt(txtCantidad.Text)
          Exit Sub 'Actualiza la fila y sale del evento
        End If
      Next
    
      'Si no encuentra agrega la fila
      DataGridView1.Rows.Add(txtCodigo.Text, txtProducto,
                             txtCantidad.Text, CDbl(txtPrecio.Text))
    
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    domingo, 2 de octubre de 2016 21:27
  • me da este error No se controlo NullReferenceException "Referencia a objeto no establecida como instancia de un objeto."

    El error se produce porque al no encontrar un valor coincidente se evalúa hasta la última fila (fila que permite la propiedad AllowUserToAddRows). Se podría evitar el error utilizando el método ToString() sobre el valor de la celda:

    Dim row = DataGridView1.Rows.Cast(Of DataGridViewRow)().
    		Where(Function(x) Convert.ToString(x.Cells(0).Value) = txtCodigo.Text).FirstOrDefault()


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    domingo, 2 de octubre de 2016 21:51
  • Muchas gracias era lo que quería, me sirvió de mucho su ayuda
    domingo, 2 de octubre de 2016 22:04