none
consulta de novato RRS feed

  • Pregunta

  • Buenas , soy nuevo en el tema de vb.net y estoy aprendiendo a los tumbos , estoy haciendo un programa de tipo pos , y me surgieron 2 dudas , la primera es tengo un textbox donde yo ingreso un codigo de barra y este busca un articulo en la base de datos sql , eso funciona perfecto salvo cuando abro dicho form y sin ingresar ningun dato hago click o paso a cualquier textbox me genera un nullexception ,  si le doy un valor  a ese textbox ovbiamente no recibo la excepcion , pero me gustaria saber si hay  otra manera de evitar esto , y la segunda consulta serie sobre  el mismo textbox me gustaria tener una funcion que asigne un valor a otro textbox , osea yo sobre el textbox que leo el codigo de barra si pongo  3*77774737473 me asigne 3 al textbox txtcant.text ignore el * y busque el articulo 77774737473 en la base como ya esta haciendolo les dejo esa parte del codigo espero que no sea una molestia mi consulta y recuerden que estoy empezando en esto de la programacion.

    Private Sub txtcod_Leave(sender As Object, e As EventArgs) Handles txtcod.Leave
            If txtcod.Text <> "" Then
                consultarplu(Me.txtcod.Text)
                If dr.Read Then
                    Me.txtnombre.Text = dr(0).ToString
                    Me.txtprecio.Text = dr(6).ToString

                    Dim suma As Double

                    suma = Val(txtcant.Text) * Val(txtprecio.Text)
                    txtsub.Text = Val(suma)
                    DataGridView2.Rows.Add(txtcod.Text, txtnombre.Text, txtcant.Text, suma)

                    Dim linea As DataGridViewRow
                    Dim valor As Double

                    For Each linea In DataGridView2.Rows
                        valor = valor + linea.Cells(3).Value

                    Next

                    txttotal.Text = "$ " & FormatNumber(valor, 2)
                Else
                    MsgBox("Articulo no encontrado")
                    txtcant.Focus()

                End If
            Else

            End If
            dr.Close()
        End Sub

    lunes, 3 de junio de 2019 0:39

Respuestas

  • El error te lo dará en valor = valor + linea.Cells(3).Value  si no hay ningún dato en DataGridView2. Eso ocurre porque defines valor pero no le asignas un valor inicial. Para evitarlo haz la definición inicializando esa variable:

    Dim valor As Double = 0

    Ten en cuenta que en .Net no se inicializan las variables al declararlas como podría ocurrir en lenguajes anteriores.

    Veo que recorres el DataGrid sumando el valor de la comuna 3 dando por echo que va a tener un dato numérico. Esto nunca es aconsejable porque puede que el usuario haya introducido un valor no numérico. Para controlar esto puedes usar TryParse de esta forma:

    Dim N as Double
    For Each linea In DataGridView2.Rows

        If Double.TryParse(linea.Cells(3).Value, N)
            valor = valor + N
        End If

    Next

    Para dividir la cadena puedes hacer algo como esto:

    Dim A As String = "3 * 77774737473"
    If A.IndexOf("*") > 0 Then
        MsgBox(A.Substring(0, A.IndexOf("*")))
        MsgBox(A.Substring(A.IndexOf("*") + 1))
    End If


    Saludos, Javier J

    • Marcado como respuesta Pablo G Lopez lunes, 3 de junio de 2019 13:51
    lunes, 3 de junio de 2019 6:54

Todas las respuestas

  • El error te lo dará en valor = valor + linea.Cells(3).Value  si no hay ningún dato en DataGridView2. Eso ocurre porque defines valor pero no le asignas un valor inicial. Para evitarlo haz la definición inicializando esa variable:

    Dim valor As Double = 0

    Ten en cuenta que en .Net no se inicializan las variables al declararlas como podría ocurrir en lenguajes anteriores.

    Veo que recorres el DataGrid sumando el valor de la comuna 3 dando por echo que va a tener un dato numérico. Esto nunca es aconsejable porque puede que el usuario haya introducido un valor no numérico. Para controlar esto puedes usar TryParse de esta forma:

    Dim N as Double
    For Each linea In DataGridView2.Rows

        If Double.TryParse(linea.Cells(3).Value, N)
            valor = valor + N
        End If

    Next

    Para dividir la cadena puedes hacer algo como esto:

    Dim A As String = "3 * 77774737473"
    If A.IndexOf("*") > 0 Then
        MsgBox(A.Substring(0, A.IndexOf("*")))
        MsgBox(A.Substring(A.IndexOf("*") + 1))
    End If


    Saludos, Javier J

    • Marcado como respuesta Pablo G Lopez lunes, 3 de junio de 2019 13:51
    lunes, 3 de junio de 2019 6:54
  • muchas gracias por la ayuda , quedo todo muy claro , saludos
    lunes, 3 de junio de 2019 13:51