caf20012 Ответов: 1

Вставить изображение в datagridview с помощью байта


Привет,

У меня возникла проблема с вставкой картинки в моем элементе управления datagridview;

Во-Первых, Класс Формы:

Dim imgbyte As Byte() = Nothing


Загрузка Формы:

table.Columns.Add("Image", GetType(Byte()))


Кнопку, чтобы генерировать данные в элементе управления datagridview;

table.Rows.Add(GetType(Byte)


Button2 для добавления изображения в picturebox1 в виде байта;

If OpenFileDialog1.ShowDialog = vbOK Then

        End If

        Dim myimage As Image = Image.FromFile(OpenFileDialog1.FileName)

        Dim imagestream As System.IO.MemoryStream = New System.IO.MemoryStream

        myimage.Save(imagestream, System.Drawing.Imaging.ImageFormat.Jpeg)
        imgbyte = imagestream.GetBuffer

        PictureBox1.Image = Drawing.Image.FromStream(imagestream)




Затем я получаю следующую ошибку:

An unhandled exception of type 'System.ArgumentException' occurred in System.Data.dll

Additional information: Type of value has a mismatch with column typeCouldn't store <System.Byte> in Image Column.  Expected type is Byte[].


Который помечает следующую строку;

table.Rows.Add(GetType(Byte)


Кто-нибудь может посоветовать?

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

Исследование форумов с помощью кнопки поиска.

[no name]

Итак, что же находится в imgbyte и почему вы им не пользуетесь?

caf20012

Что я должен использовать, так как я довольно новичок в Visual Studios. Извините за некомпетентность.

Я не могу использовать picturebox1

ongilito

Откуда ты берешь свой имидж?

1 Ответов

Рейтинг:
2

ongilito

Imports System.IO
Imports System.Drawing.Imaging
Imports System.Drawing

Public Class Form1
    Dim ms As MemoryStream
    Dim imgData() As Byte
    Dim sqlSTR As String

    'This code saves the image in form of byte into SQl Server

    Sub saveImage()
        Dim p As New SqlParameter
        Try
          dim  sqlSTR As String= "UPDATE tableName SET imageField = @imageParameter"
            Using sqlCmmnd As New SqlClient.SqlCommand(sqlSTR, con)
                If Not PictureBox1.Image Is Nothing Then
                    ms = New MemoryStream
                    PictureBox1.Image.Save(ms, ImageFormat.Jpeg)
                    imgData = New Byte(ms.Length) {}
                    ms.Position = 0
                    ms.Read(imgData, 0, imgData.Length)
                    sqlCmmnd.Parameters.AddWithValue("@logo", imgData)
                Else
                    With p
                        .ParameterName = "@imageParameter"
                        .DbType = DbType.Binary
                        .Value = System.DBNull.Value
                    End With
                    sqlCmmnd.Parameters.Add(p)
                End If
                con.Open()
                sqlCmmnd.ExecuteNonQuery()
            End Using
            con.Close()           
        Catch ex As Exception
            MsgBox(ex.Message.ToString, MsgBoxStyle.Exclamation, "Error")
        End Try
    End Sub


   'This sub gets the byte image and converts it then displays on the picturebox, you can also add it to datagriedview

   Sub loadImage()
        Try
            Dim sqlDA As New SqlDataAdapter("SELECT imageField FROM tableName WHERE uniqueField ='" & Replace(TextBox1.Text.Trim, "'", "''") & "'",.con)
            Dim sqlCB As New SqlCommandBuilder(sqlDA)
            sqlDT.Reset()
            sqlDA.Fill(sqlDT)
            If Not IsDBNull(sqlDT.Rows(0)("imageField ")) Then
                imgData = sqlDT.Rows(0)("imageField ")
                Dim ms As MemoryStream = New MemoryStream(imgData)
                PictureBox1.Image = Image.FromStream(ms)
                ' for DataGridview DataGridView1.Rows(index).Add(Image.FromStream(ms))
            Else
                PictureBox1.Image = Nothing
            End If
        Catch ex As Exception
            MsgBox(ex.Message.ToString, MsgBoxStyle.Exclamation, "Error")
        End Try

    End Sub
End Class


caf20012

Я получаю изображение из следующего

 Dim opf As New OpenFileDialog
        opf.Filter = "Choose Image(*.jpg;*.png;*.gif)|*.jpg;*.png;*.gif"

        If opf.ShowDialog = DialogResult.OK Then

        End If
    End Sub

caf20012

Кроме того, я не хочу иметь SQL-сервер, так как все данные вставляются в datagridview, а затем экспортируются в Excel.

Опция SQl server будет заблокирована в моем случае из-за того, что компьютер имеет ограничения брандмауэра

ongilito

Дим ОПФ как новое диалоговое окно openfiledialog
ОПФ.Фильтр = "Выбрать Образ(*.формат JPG;*.формат PNG;*.хиф)|*.формат JPG;*.формат PNG;*.гиф"
'добавить переменную изображения
Dim myImage As Image=ничего
Если ОПФ.Метод Showdialog = Dialogresult Значения.Тогда ладно
"Получить изображение из openFileDialog в переменную
myImage=OpenFileDialog.Изображение
"теперь вставьте изображение в datagridview
DataGridView1. Rows(RowIndex). Add(myImage)
Конец, Если
Конец Подводной Лодки