none
Cargar Textbox con datos de datagridview con alguno campos vacios desde base de datos RRS feed

  • Pregunta

  • Estimados los saludo nuevamente, tengo una aplicacion en .Net donde estoy cargando valores, ya sea texto o numero en algunos textbox. sucede que hice algunas mejoras en mi aplicacion pero se cae al momento de querer cargar datos desde un datagridview donde el campo no tiene nada ingresado en la base de datos. este es mi codigo, mi pregunta es simplemente como hago para que al cargar estos datos en los textbox, no se caiga con los que estan vacios, este es mi codigo actual.

    Private Sub DGVPRODUCTOS_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DGVPRODUCTOS.CellContentDoubleClick
            If DGVPRODUCTOS.SelectedRows.Count = 0 Then
                MessageBox.Show("Debe seleccionar un Registro de Producto para Editarlo", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                Exit Sub
            End If
    
            Dim intNumFila As Integer = Me.DGVPRODUCTOS.CurrentCell.RowIndex
            Dim strDato As String = Me.DGVPRODUCTOS(1, intNumFila).Value
    
            'Codigo que carga los datos del datagridview a los textbox, dando la posibilidad de cambiar los datos
    
            Dim i As Integer = Me.DGVPRODUCTOS.CurrentRow.Index
            Me.TxtID.Text = Me.DGVPRODUCTOS.Item(0, i).Value 'NOMBRE DEL MOTORISTA
            'Me.TxtCategoria.Text = Me.DGVPRODUCTOS.Item(1, i).Value 'RUT DEL MOTORISTA
            Me.TxtDescripcionCorta.Text = Me.DGVPRODUCTOS.Item(12, i).Value  'CARGO DEL MOTORISTA
            Me.HTMLDescripcion.Text = Me.DGVPRODUCTOS.Item(13, i).Value  'ASIGNACION DEL MOTORISTA
            Me.TxtPROVEEDOR.Text = Me.DGVPRODUCTOS.Item(6, i).Value  'PATENTE DEL MOTORISTA
            Me.TxtNombre.Text = Me.DGVPRODUCTOS.Item(1, i).Value  'SECTOR DE RECORRIDO DEL MOTORISTA
            Me.TxtCostoProductoNeto.Text = Me.DGVPRODUCTOS.Item(2, i).Value 'Valor de Costo Neto
            Me.TxtPARTNUMBER.Text = Me.DGVPRODUCTOS.Item(4, i).Value 'Registro PartNumber
            Me.TxtMARCA.Text = Me.DGVPRODUCTOS.Item(5, i).Value ' Registro de la Marca Producto
            Me.TxtSTOCK.Text = Me.DGVPRODUCTOS.Item(3, i).Value 'Registro de Stock
            'Me.TxtPesoProducto.Text = Me.DGVPRODUCTOS.Item(8, i).Value ' Registro de Peso Producto
            DGVPRODUCTOS.AllowUserToAddRows = False
            banderalink = "EDICION"
            WebBrowser1.DocumentText = HTMLDescripcion.Text
        End Sub
    


    • Editado Miguel Oyarzo viernes, 5 de febrero de 2016 23:45 correcion
    viernes, 5 de febrero de 2016 23:32

Respuestas

  • "Miguel Oyarzo" preguntó:

    > mi pregunta es simplemente como hago para que al cargar estos datos en los
    > textbox, no se caiga con los que estan vacios, este es mi codigo actual.

    Hola, Miguel:

    Para no obtener en tiempo de ejecución (cuando ya no hay solución) el mensaje de error 'La conversión del tipo 'DBNull' en el tipo 'String' no es válida', lo primero que tienes que hacer es activar la instrucción Option Strict, de ésta manera te obligarías a realizar las conversiones de manera explícita en lugar de dejar que Visual Basic haga las conversiones de manera implícita, arriesgándote a obtener errores de conversión de datos como el que estás obteniendo actualmente.

    Posteriormente tienes que verificar si el valor actual de la celda del control DataGridView se puede o no convertir a String, que es el tipo de dato de la propiedad Text de los controles TextBox. Para ello, mira a ver si te sirve la siguiente función:

        ''' <summary>
        ''' Devuelve un valor alfanumérico correspondiente al valor Object
        ''' especificado. Si el valor es Nothing o DBNull.Value, la función
        ''' devolverá una cadena de longitud cero.
        ''' </summary>
        ''' <param name="value">Valor Object que se desea convertir a alfanumérico.</param>
        ''' <returns></returns>
        Public Shared Function GetStringValue(value As Object) As String
    
            If ((value Is Nothing) OrElse (value Is DBNull.Value)) Then
                Return String.Empty
            End If
    
            If ((TypeOf value Is String) AndAlso (value.ToString().Trim().Length = 0)) Then
                Return String.Empty
            End If
    
            Return value.ToString()
    
        End Function
    

    Cuando desees establecer los valores a los diferentes controles TextBox, simplemente ejecutarías:

            Dim i As Integer = Me.DGVPRODUCTOS.CurrentRow.Index
            Me.TxtID.Text = GetStringValue(Me.DGVPRODUCTOS.Item(0, i).Value) 'NOMBRE DEL MOTORISTA
            Me.TxtDescripcionCorta.Text = GetStringValue(Me.DGVPRODUCTOS.Item(1, i).Value) 'CARGO DEL MOTORISTA
            Me.HTMLDescripcion.Text = GetStringValue(Me.DGVPRODUCTOS.Item(2, i).Value)  'ASIGNACION DEL MOTORISTA
            ' ...
            ' ...

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    sábado, 6 de febrero de 2016 8:16
    Moderador