none
Error al comparar

    Pregunta

  • Hola, me sale este error cuando dejo el textcant sin ningún valor, sin ingreso un valor me anda bien.

    "La conversión de la cadena "" en tipo 'double' no es valida"

    Me lo marca al error en la parte de letras negritas

    If txtcant.Text <= DataGridView1(3, DataGridView1.CurrentRow.Index).Value Or txtcant.Text = "" 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 no se permiten valores nulos", MsgBoxStyle.OkOnly, "ERROR")
                txtcant.Focus()
            End If

    Desde ya gracias, saludos


    viernes, 14 de octubre de 2016 20:51

Respuestas

  • Juan259,

    Comparas una cadena de longitud cero con un tipo Object e incluso permites ingresar al flujo THEN cuando el usuario no ha ingresado un valor en el cuadro de texto, de hecho en las asignaciones y operaciones tendrás el error en mención. Lo que debes controlar es que el valor ingresado sea un valor numérico válido para poder ingresar al bloque de asignaciones:

    Dim Result As Integer = 0
    Int32.TryParse(txtcant.Text, Result)
    
    If Result > 0 AndAlso
    	Result <= Convert.ToInt32(DataGridView1(3, DataGridView1.CurrentRow.Index).Value) Then
    	'Realizar operaciones
    Else
    	'No hay suficiente stock o no se ha ingresado la cantidad
    End If


    De igual manera, controla que la fila actualmente seleccionada no sea Nothing.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 sábado, 15 de octubre de 2016 0:26
    viernes, 14 de octubre de 2016 21:14

Todas las respuestas

  • Juan259,

    Comparas una cadena de longitud cero con un tipo Object e incluso permites ingresar al flujo THEN cuando el usuario no ha ingresado un valor en el cuadro de texto, de hecho en las asignaciones y operaciones tendrás el error en mención. Lo que debes controlar es que el valor ingresado sea un valor numérico válido para poder ingresar al bloque de asignaciones:

    Dim Result As Integer = 0
    Int32.TryParse(txtcant.Text, Result)
    
    If Result > 0 AndAlso
    	Result <= Convert.ToInt32(DataGridView1(3, DataGridView1.CurrentRow.Index).Value) Then
    	'Realizar operaciones
    Else
    	'No hay suficiente stock o no se ha ingresado la cantidad
    End If


    De igual manera, controla que la fila actualmente seleccionada no sea Nothing.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 sábado, 15 de octubre de 2016 0:26
    viernes, 14 de octubre de 2016 21:14
  • Hola Juan259, te sugiero que hagas una validación previa al código que tienes allí, ya que la sintaxis está bien pero podría mejorar con las siguientes opciones:

    1. Usar la propiedad rowenter del datagridview y valida el valor

     Private Sub Grid1_RowEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Grid1.RowEnter
            MIVARIABLE = Grid1.Rows(e.RowIndex).Cells("NOMBRECOLUMNA").Value.ToString

    call VALIDACION()

        End Sub

    2. Validar el textbox antes de hacer la operación:
    private sub VALIDACION

    if textXX.text = trim("") or textXX.text isnull then

    TextXX.text = cint(0)

    else

    textXX.text = Cint(MIVARIABLE) * Cint(MIOTRAVARIABLE)

    End if 

    Como sugerencia te recomiendo aislar primero todo en variables y despues si usar los controles. Es mucho más efectivo, tanto para revisar como para realizar cambios.

    Un saludo cordial. Espero te sirva y haya podido explicarme.


    Jairo Garz&#243;n Forero - MSDN.COM/ES-CO

    viernes, 14 de octubre de 2016 21:37