es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo mostrar una imagen de un DataGridView en otro PictureBox en un nuevo formulario de Windows?

Lo que estoy tratando de hacer es que una vez que haga clic en una fila en mi DataGridView, haga clic en el botón de vista y se abra una nueva ventana que muestre todos los datos del DataGridView en los cuadros de texto. Ya hice la primera parte, pero no sé cómo hacerlo con las imágenes (tengo 2 columnas de imágenes). ¿Alguien puede ayudarme? Estoy empezando, lo siento. Este es mi código para el botón de vista que abre otra ventana. Las casillas de imagen siempre están en blanco.

Private Sub btnView_Click(sender As Object, e As EventArgs) Handles btnView.Click

    If GunaDataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected) > 0 Then
        data.txtID.Text = GunaDataGridView1.CurrentRow.Cells(0).Value.ToString
        data.txtLN.Text = GunaDataGridView1.CurrentRow.Cells(1).Value.ToString
        data.txtFN.Text = GunaDataGridView1.CurrentRow.Cells(2).Value.ToString
        data.txtMN.Text = GunaDataGridView1.CurrentRow.Cells(3).Value.ToString
        data.txtGen.Text = GunaDataGridView1.CurrentRow.Cells(4).Value.ToString
        data.txtNum.Text = GunaDataGridView1.CurrentRow.Cells(5).Value.ToString
        data.txtDOB.Text = GunaDataGridView1.CurrentRow.Cells(6).Value.ToString
        data.txtAddress.Text = GunaDataGridView1.CurrentRow.Cells(7).Value.ToString
        data.txtPlate.Text = GunaDataGridView1.CurrentRow.Cells(8).Value.ToString
        data.txtVT.Text = GunaDataGridView1.CurrentRow.Cells(9).Value.ToString
        data.txtVB.Text = GunaDataGridView1.CurrentRow.Cells(10).Value.ToString
        data.txtVYM.Text = GunaDataGridView1.CurrentRow.Cells(11).Value.ToString
        data.txtSP.Text = GunaDataGridView1.CurrentRow.Cells(12).Value.ToString
        data.ownerPhoto.Image = GunaDataGridView1.CurrentRow.Cells(13).Value
        data.carPhoto.Image = GunaDataGridView1.CurrentRow.Cells(14).Value
        data.ShowDialog()

    End If
End Sub
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar las imágenes del DataGridView en los controles PictureBox en la nueva ventana, es necesario convertir los datos de la imagen de la celda del DataGridView en una imagen real utilizando un objeto MemoryStream. Aquí te mostramos cómo puedes modificar tu código para lograr esto:

    Private Sub btnView_Click(sender As Object, e As EventArgs) Handles btnView.Click
        If GunaDataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected) > 0 Then
            data.txtID.Text = GunaDataGridView1.CurrentRow.Cells(0).Value.ToString
            data.txtLN.Text = GunaDataGridView1.CurrentRow.Cells(1).Value.ToString
            data.txtFN.Text = GunaDataGridView1.CurrentRow.Cells(2).Value.ToString
            data.txtMN.Text = GunaDataGridView1.CurrentRow.Cells(3).Value.ToString
            data.txtGen.Text = GunaDataGridView1.CurrentRow.Cells(4).Value.ToString
            data.txtNum.Text = GunaDataGridView1.CurrentRow.Cells(5).Value.ToString
            data.txtDOB.Text = GunaDataGridView1.CurrentRow.Cells(6).Value.ToString
            data.txtAddress.Text = GunaDataGridView1.CurrentRow.Cells(7).Value.ToString
            data.txtPlate.Text = GunaDataGridView1.CurrentRow.Cells(8).Value.ToString
            data.txtVT.Text = GunaDataGridView1.CurrentRow.Cells(9).Value.ToString
            data.txtVB.Text = GunaDataGridView1.CurrentRow.Cells(10).Value.ToString
            data.txtVYM.Text = GunaDataGridView1.CurrentRow.Cells(11).Value.ToString
            data.txtSP.Text = GunaDataGridView1.CurrentRow.Cells(12).Value.ToString
    
            ' Convertir la foto del propietario desde el valor de la celda a una imagen
            Dim ownerPhotoData As Byte() = DirectCast(GunaDataGridView1.CurrentRow.Cells(13).Value, Byte())
            Using ms As New MemoryStream(ownerPhotoData)
                data.ownerPhoto.Image = Image.FromStream(ms)
            End Using
    
            ' Convertir la foto del automóvil desde el valor de la celda a una imagen
            Dim carPhotoData As Byte() = DirectCast(GunaDataGridView1.CurrentRow.Cells(14).Value, Byte())
            Using ms As New MemoryStream(carPhotoData)
                data.carPhoto.Image = Image.FromStream(ms)
            End Using
    
            data.ShowDialog()
        End If
    End Sub
    

    En este código, primero obtenemos los datos binarios de las columnas de imagen en el DataGridView utilizando la función DirectCast para convertir el valor de la celda en una matriz de bytes. Luego creamos un nuevo objeto MemoryStream y utilizamos su método FromStream para convertir la matriz de bytes en un objeto Image que podemos establecer como la propiedad Image del control PictureBox correspondiente en la nueva ventana. Encerramos el código de conversión en un bloque Using para asegurarnos de que el MemoryStream se elimine correctamente después de su uso.

Comments are closed.