Member 13513923 Ответов: 1

Как я могу отобразить изображения из столбцов datagridview, чтобы в элемент управления PictureBox?


У меня сейчас голова болит о том, как вывести изображение с элементом управления datagridview (dgvMembers) в элемент управления PictureBox (pbMyImage). Мне удалось сохранить детали, которые включают в себя и изображение, но не на моем событии щелчка я хочу, чтобы изображение, которое я сохранил ранее, отображалось на поле изображения, когда я остановился.

вот код для сохранения данных в базе данных access:

<pre> Try
            OpenConnection()
            Dim ms As New MemoryStream()
            Dim bmpImage As New Bitmap(pbMyImage.Image)
            bmpImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg)
            Dim data As Byte() = ms.GetBuffer()
            Dim p As New OleDbParameter("@photo", OleDbType.VarBinary)
            p.Value = data
            Dim cb As String = "insert into Members(TBSNum,PassNum,Firstname,Lastname,DOB,DOJ,Status,Designation,Gender,ResAddress,Contact1,Contact2,EmailID,City,Photo)" &
                "VALUES(@tbsnum,@passnum,@fname,@lname,@dob,@doj,@status,@design,@gender,@resaddress,@contact1,@contact2,@email,@city,@photo)"
            cmd = New OleDbCommand(cb)
            cmd.Connection = con
            cmd.Parameters.AddWithValue("@tbsnum", txtTBSNum.Text)
            cmd.Parameters.AddWithValue("@passnum", txtPassport.Text)
            cmd.Parameters.AddWithValue("@fname", txtName.Text)
            cmd.Parameters.AddWithValue("@lastname", txtSurname.Text)
            cmd.Parameters.AddWithValue("@dob", dtDOB.MaxDate)
            cmd.Parameters.AddWithValue("@doj", System.DateTime.Now.Date)
            cmd.Parameters.AddWithValue("@status", cbStatus.SelectedItem)
            cmd.Parameters.AddWithValue("@design", cbDesig.SelectedItem)
            cmd.Parameters.AddWithValue("@gender", cbGender.SelectedItem)
            cmd.Parameters.AddWithValue("@resaddress", txtAddress.Text)
            cmd.Parameters.AddWithValue("@contact1", txtPhone1.Text)
            cmd.Parameters.AddWithValue("@contact2", txtPhone2.Text)
            cmd.Parameters.AddWithValue("@email", txtEmail.Text)
            cmd.Parameters.AddWithValue("@city", txtCity.Text)
            cmd.Parameters.AddWithValue("@photo", data)
            cmd.ExecuteNonQuery()
            CloseConnection()
            Reset()
            Getdata()
            MessageBox.Show("Successfully saved", " TKBS Member Record", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try


Что я уже пробовал:

А вот код для события click, которое я пробовал:

Private Sub dgvMembers_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvMembers.CellContentClick
        txtTBSNum.Text = dgvMembers.Rows(e.RowIndex).Cells("TBSNum").Value.ToString
        txtPassport.Text = dgvMembers.Rows(e.RowIndex).Cells("PassNum").Value.ToString
        txtName.Text = dgvMembers.Rows(e.RowIndex).Cells("Fname").Value.ToString
        txtSurname.Text = dgvMembers.Rows(e.RowIndex).Cells("Surname").Value.ToString
        dtDOB.Text = dgvMembers.Rows(e.RowIndex).Cells("DOB").Value.ToString
        dtDOJ.Text = dgvMembers.Rows(e.RowIndex).Cells("DOJ").Value.ToString
        cbStatus.Text = dgvMembers.Rows(e.RowIndex).Cells("Status").Value.ToString
        cbDesig.Text = dgvMembers.Rows(e.RowIndex).Cells("Design").Value.ToString
        cbGender.Text = dgvMembers.Rows(e.RowIndex).Cells("Gender").Value.ToString
        txtAddress.Text = dgvMembers.Rows(e.RowIndex).Cells("ResAdd").Value.ToString
        txtPhone1.Text = dgvMembers.Rows(e.RowIndex).Cells("Phone1").Value.ToString
        txtPhone2.Text = dgvMembers.Rows(e.RowIndex).Cells("Phone2").Value.ToString
        txtCity.Text = dgvMembers.Rows(e.RowIndex).Cells("City").Value.ToString
        txtEmail.Text = dgvMembers.Rows(e.RowIndex).Cells("EmailID").Value.ToString
        txtCity.Text = dgvMembers.Rows(e.RowIndex).Cells("City").Value.ToString
        'pbMyImage.Image = dgvMembers.Rows(e.RowIndex).Cells("Photo").Value
    End Sub


Комментируемая строка здесь-это та, которая, как я подозреваю, имеет проблему. Я не получаю и ошибки, но изображение не отображается. Это меня беспокоит. Пожалуйста помочь.

A_Griffin

Из вашего кода я предполагаю, что изображение хранится в базе данных? Вы пробовали погуглить это? Попробуйте это для начала:
https://stackoverflow.com/questions/6350516/how-to-add-image-from-database-to-picturebox

Member 13513923

@A_Griffin, мое изображение уже было сохранено в базе данных, и я могу видеть, как оно загружается в мой datagridview из базы данных при загрузке формы. Проблема заключается в следующем: получить его из datagridview в столбце image и отобразить его на поле picture в той же форме.

Member 13513923

@A_Griffin, я уже пробовал:

MemoryStream ms = Новый Поток памяти(байт);
Image returnImage = изображение.FromStream(МС);

и я получаю ошибку:

Необработанное исключение типа 'System.ArgumentException' произошло в системе.Drawing.dll

Дополнительная информация: параметр недопустим.

1 Ответов

Рейтинг:
0

OriginalGriff

Просто прочитать значение из ячейки DGV, бросил его на byte[], и преобразуйте байты в изображение:

MemoryStream ms = new MemoryStream(bytes);
Image returnImage = Image.FromStream(ms);
Затем вы можете назначить изображение PictureBox.Свойство изображения.


Member 13513923

@OriginalGriff, я пробовал это, но получаю ошибку: я не уверен, что у меня есть doe правильная вещь. Я все еще в тупике.

Дим рис байт()
пос = dgvMembers.Строк(электронная.Параметр rowindex).Клетки("Фото").Ценность
Dim ms как Новый Поток памяти(рис)
pbMyImage.Изображение = Изображение.FromStream(МС)

OriginalGriff

Используйте отладчик и посмотрите, что именно у вас есть в данных на каждом шаге.
На первый взгляд - и дайте отсутствие информации, которую вы мне дали, это все, что может быть - данные изображения не являются действительными, но вам нужно проверить их, чтобы точно узнать, что вы получили.