none
Repite en el datagrid

    Pregunta

  • Hola, mi problema es que cuanto leo el producto con el lector de código de barra me agrega el mismo producto varias veces de forma repetida, solo lo leo una vez.

    Esta es la parte del código que se encarga de eso.

    Private Sub txtleerbarra2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtleerbarra2.TextChanged
            Dim Nombre, PrecioUnitario, Cantidad, Total, cantidad2 As String
    
            Nombre = DataGridView1(1, DataGridView1.CurrentRow.Index).Value
            PrecioUnitario = DataGridView1(2, DataGridView1.CurrentRow.Index).Value
    
    
            Dim Result As Integer = 0
            Int32.TryParse(txtcant.Text, Result)
    
            If Result > 0 AndAlso
                Result <= Convert.ToInt32(DataGridView1(3, DataGridView1.CurrentRow.Index).Value) Then
    
                Cantidad = txtcant.Text
                Total = DataGridView1(2, DataGridView1.CurrentRow.Index).Value * Val(txtcant.Text)
                DataGridView2.Rows.Add(Nombre, PrecioUnitario, Cantidad, Total)
                cantidad2 = DataGridView1(3, DataGridView1.CurrentRow.Index).Value - Val(txtcant.Text)
                DataGridView1(3, DataGridView1.CurrentRow.Index).Value = cantidad2
                txtcant.Text = 1
            Else
                MsgBox("No hay suficiente stock o hay valores nulos.", MsgBoxStyle.OkOnly, "ERROR")
                txtcant.Focus()
            End If
    
    
            Dim total2 As Double = 0
            Dim fila As DataGridViewRow = New DataGridViewRow
    
            For Each fila In DataGridView2.Rows
                total2 += Convert.ToDouble(fila.Cells("Column3").Value)
            Next
            txttotal.Text = Convert.ToString(total2)
    
            Dim total3 As Double
            Dim fila2 As DataGridViewRow = New DataGridViewRow
            For Each fila2 In DataGridView2.Rows
                total3 += Convert.ToDouble(fila2.Cells("Column2").Value)
            Next
            Label14.Text = Convert.ToString(total3)
        End Sub

    Desde ya gracias, saludos.

    lunes, 24 de octubre de 2016 17:14

Respuestas

  • Juan259,

    Revisa la documentación del dispositivo para configurar el caracter terminador, es bastante común que luego de leer el código se adicione un caracter TAB o CR. Si demoras en configurar el dispositivo y la longitud de todos los códigos que lees son de 13 caracteres entonces podrías mantener el evento TextChanged y validar por la longitud del texto, algo como:

    Private Sub txtleerbarra2_TextChanged(ByVal sender ...
    	
    	If CType(sender, TextBox).TextLength = 13 Then
                'Instrucciones
    	End If
    
    End Sub 



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 martes, 25 de octubre de 2016 14:26
    lunes, 24 de octubre de 2016 20:17

Todas las respuestas

  • Juan259,

    Podrías usar el evento Leave en tanto el caracter terminador sea TAB o CR, con el evento TextChanged -presumo- se ejecuta el código por cada carácter del código que escribe sobre el control.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 24 de octubre de 2016 18:31
  • No me realiza ninguna acción con el evento leave.

    Si se ejecuta por cada carácter del código ya que me agrega 13 productos, la cantidad de números del código.

    lunes, 24 de octubre de 2016 20:08
  • Juan259,

    Revisa la documentación del dispositivo para configurar el caracter terminador, es bastante común que luego de leer el código se adicione un caracter TAB o CR. Si demoras en configurar el dispositivo y la longitud de todos los códigos que lees son de 13 caracteres entonces podrías mantener el evento TextChanged y validar por la longitud del texto, algo como:

    Private Sub txtleerbarra2_TextChanged(ByVal sender ...
    	
    	If CType(sender, TextBox).TextLength = 13 Then
                'Instrucciones
    	End If
    
    End Sub 



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 martes, 25 de octubre de 2016 14:26
    lunes, 24 de octubre de 2016 20:17
  • Ya me funciona con códigos de 13 números.

    Como puedo hacer con códigos que no sean de 13 números?

    Puede ser agregándole "or 14 or 15 ..."
    lunes, 24 de octubre de 2016 20:26
  • Juan259,

    Ya te había advertido que eso funcionará únicamente si todos los códigos tienen la misma longitud de texto. Te sugiero nuevamente leer el manual del dispositivo para configurar (o verificar) el caracter que se lanza al terminar la lectura del código, que podría ser un salto de línea (CR LF) o TAB. Si te inclinas por usar el evento Leave convendrá que el carácter "terminador" sea TAB para efectos de perder el foco y se ejecute el código.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 24 de octubre de 2016 22:37