none
tengo una duda grande RRS feed

  • Pregunta

  • buenas muchacho de nuevo jeje disculpenla moestia, tengo una formulario donde tengo un datagridview que se activa y me muestra la informacio seleccionada de la tabla me lo muestra bien y todo,  ahora hay una columna que quiero agarrar su monto que el nombre de la columna es CANTIDAD, ese monto lo voy a multiplicar con el monto que coloque en la caja de texto. y el resultado me coloque en la COLumna SUBTOTAL. eso es todo. me entendieron

    tengo este codigo pero no me funciona:

        Private Sub multiplicartabla()
            Dim subtotal As Decimal
            Dim row As Integer = DTGWFactura.CurrentCell.RowIndex
            tbprecio.Focus()

            subtotal = DTGWFactura.Rows(row).Cells(4).Value * Convert.ToInt64(tbprecio.Text)

            DTGWFactura.Rows(row).Cells(6).Value = subtotal

        End Sub

    Private Sub tbprecio_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles tbprecio.KeyDown
            If e.KeyCode = Keys.Enter Then
                tbprecio.Clear()

                multiplicartabla()

            End If
        End Sub


    Oswal

    lunes, 11 de junio de 2018 5:02

Respuestas

  • Ah, pues con eso ya está claro. El error se debe a que estás intentando convertir en número entero algo que no se puede convertir en número entero. Concretamente, el tbprecio.Text contiene un texto que no puede ser reconocido como numérico. Por ejemplo, si el textbox está vacío o tiene un espacio en blanco, la función Convert.ToInt64 da un error porque el "vacío" o el espacio en blanco no los considera números válidos. Igualmente fallará también si en el textbox tecleas algo que tenga letras, o que tenga un punto decimal, o cualquier otra cosa que no sea un número.

    Si quieres que en lugar de dar un error te devuelva un cero cuando el texto no sea válido, puedes usar la función TryParse:

    Dim n as Int64
    If Not Int64.TryParse(tbPrecio.Text, n) Then n = 0
    subtotal = DTGWFactura.Rows(row).Cells(4).Value * n

    martes, 12 de junio de 2018 6:31
  • Ese error indica que el valor de "row" esta fuera de rango, es decir, estas intentando acceder a una fila que no existe. Y preguntarás ¿cómo puede ser que no exista, si "row" lo acabo de sacar del CurrentCell? Pues no, si lees la documentación de RowIndex:

    https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcell.rowindex(v=vs.110).aspx

    verás que dice que puede devolver -1 cuando no hay ninguna celda seleccionada. Y, claro, -1 no es un valor válido para pasarlo a la colección de Rows.

    Tendrás que revisar la lógica de tu programa e investigar por qué estás tratando de hacer el cálculo del subtotal de la fila seleccionada cuando no hay ninguna fila seleccionada.

    martes, 12 de junio de 2018 10:24

Todas las respuestas

  • tengo este codigo pero no me funciona:

    Así a ojo tiene buen aspecto, no se ve una razón obvia para que no funcione.

    Vas a tener que dar más datos. Cuando preguntes en los foros, acostúmbrate a no decir nunca "no funciona". Hay que explicar cuál es la forma en la que no funciona. Si da un error de compilación, hay que copiar el error completo, exacto y detallado y señalar la línea en la que ocurre. Si da un error en tiempo de ejecución, hay que copiar la excepción completa, exacta y detallada, señalando la línea de código en la que ocurre. Si no da error, sino que simplemente los resultados no son los esperados, hay que explicar qué es lo que se esperaba y qué es lo que se observó. Evidentemente, esto último con cierto detalle, es decir no basta con decir que lo que se observó es que no salió el valor en la pantalla, hay que seguir el código con el debugger ejecutándolo paso a paso y comparar los valores en todas las líneas hasta ver en cuál de ellas exactamente difirió el comportamiento de lo esperado.

    lunes, 11 de junio de 2018 5:59
  • okey hermano si disculpa aceptare los consejos 

    y este es el error que me da cuando le doy enter en la caja de texto 


    Oswal

    lunes, 11 de junio de 2018 22:44
  • Ah, pues con eso ya está claro. El error se debe a que estás intentando convertir en número entero algo que no se puede convertir en número entero. Concretamente, el tbprecio.Text contiene un texto que no puede ser reconocido como numérico. Por ejemplo, si el textbox está vacío o tiene un espacio en blanco, la función Convert.ToInt64 da un error porque el "vacío" o el espacio en blanco no los considera números válidos. Igualmente fallará también si en el textbox tecleas algo que tenga letras, o que tenga un punto decimal, o cualquier otra cosa que no sea un número.

    Si quieres que en lugar de dar un error te devuelva un cero cuando el texto no sea válido, puedes usar la función TryParse:

    Dim n as Int64
    If Not Int64.TryParse(tbPrecio.Text, n) Then n = 0
    subtotal = DTGWFactura.Rows(row).Cells(4).Value * n

    martes, 12 de junio de 2018 6:31
  • hermano ahora me da esto que se puede hacer en ese caso

    Oswal

    martes, 12 de junio de 2018 8:04
  • Ese error indica que el valor de "row" esta fuera de rango, es decir, estas intentando acceder a una fila que no existe. Y preguntarás ¿cómo puede ser que no exista, si "row" lo acabo de sacar del CurrentCell? Pues no, si lees la documentación de RowIndex:

    https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcell.rowindex(v=vs.110).aspx

    verás que dice que puede devolver -1 cuando no hay ninguna celda seleccionada. Y, claro, -1 no es un valor válido para pasarlo a la colección de Rows.

    Tendrás que revisar la lógica de tu programa e investigar por qué estás tratando de hacer el cálculo del subtotal de la fila seleccionada cuando no hay ninguna fila seleccionada.

    martes, 12 de junio de 2018 10:24