Datagrid Fehler beim Image laden

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

werner_sg

Erfahrenes Mitglied
Hallo ich habe eine Access Datenbank aus welcher die Daten kommen das speichern in diese funktioniert ohne Fehler.
Beim Klick in eine Zelle des Datagrid sollen die entsprechenden Felder gefüllt werden, jedoch hängt sich hier das Programm dann bei dem Image auf, der clou dabei ist ich hatte vorher weniger Datenfelder und das Image war auf 7 da funktionierte es einwandfrei jetzt habe ich es auf 15 verschoben.
Irgendetwas habe ich übersehen und jetzt sehe ich anscheinend den Wald vor lauter Bäumen nicht mehr.

C#:
Imports System.Data.OleDb
Imports System.IO
Public Class customers
    Dim conn As New OleDb.OleDbConnection
    Dim Myconnection As String = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\Carrental.accdb")
    Dim cmd As New OleDb.OleDbCommand
    Dim da As New OleDb.OleDbDataAdapter
    Dim result As Integer
    Dim imgpath As String
    Dim arrImage() As Byte
    Dim sql As String
    Private Sub customers_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Call Btnload_Click(sender, e)
    End Sub

    Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick
        Dim arrimage() As Byte = Nothing

        Me.Text = DataGridView1.CurrentRow.Cells(0).Value.ToString
        TxtKundenname.Text = DataGridView1.CurrentRow.Cells(1).Value.ToString
        TxtKundenvorname.Text = DataGridView1.CurrentRow.Cells(2).Value.ToString
        TxtKundendatum.Text = DataGridView1.CurrentRow.Cells(3).Value.ToString
        Txtnational.Text = DataGridView1.CurrentRow.Cells(4).Value.ToString
        Txtwohnsitz.Text = DataGridView1.CurrentRow.Cells(5).Value.ToString
        txtstreet.Text = DataGridView1.CurrentRow.Cells(6).Value.ToString
        Txttelefon.Text = DataGridView1.CurrentRow.Cells(7).Value.ToString
        txtemail.Text = DataGridView1.CurrentRow.Cells(8).Value.ToString
        Txtdriverlicense.Text = DataGridView1.CurrentRow.Cells(9).Value.ToString
        Txtdriverlicenseort.Text = DataGridView1.CurrentRow.Cells(10).Value.ToString
        txtlicenseclass.Text = DataGridView1.CurrentRow.Cells(11).Value.ToString
        txtFS_Datum.Text = DataGridView1.CurrentRow.Cells(12).Value.ToString
        txtortspanien.Text = DataGridView1.CurrentRow.Cells(13).Value.ToString
        txtstreetspanien.Text = DataGridView1.CurrentRow.Cells(14).Value.ToString

        If Not IsDBNull(arrimage) Then
            arrimage = DataGridView1.CurrentRow.Cells(15).Value
        End If

        Dim mstream As New System.IO.MemoryStream(arrimage)
        PictureBox1.Image = Image.FromStream(mstream)

    End Sub

    Public Sub cleartextfields()
        For Each crt As Control In GroupBox1.Controls
            If crt.GetType Is GetType(TextBox) Then
                crt.Text = Nothing
            End If
        Next

    End Sub

    Private Sub Btnadd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnadd.Click
        cleartextfields()
        PictureBox1.Image = Nothing
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnupload.Click
        Try
            Dim OFD As FileDialog = New OpenFileDialog()

            OFD.Filter = "Image File (*.jpg;*.bmp;*.gif;*.png)| *.jpg;*.bmp;*.gif"

            If OFD.ShowDialog() = DialogResult.OK Then
                imgpath = OFD.FileName
                PictureBox1.ImageLocation = imgpath

            End If

            OFD = Nothing

        Catch ex As Exception
            MsgBox(ex.Message.ToString())

        End Try

    End Sub

    Private Sub Btndelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btndelete.Click
        Try
            sql = "DELETE * FROM tblcustomer  WHERE ID=" & Me.Text
            conn.Open()
            With dbcmd
                .CommandText = sql
                .Connection = conn
            End With

            result = dbcmd.ExecuteNonQuery
            If result > 0 Then
                MsgBox("Kunde wurde gelöscht!")
                conn.Close()
                Call Btnload_Click(sender, e)
                cleartextfields()

            Else
                MsgBox("Kunde wurde nicht gelöscht!")
            End If

        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            conn.Close()


        End Try
    End Sub

    Private Sub btnsave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsave.Click
        If TxtKundenname.Text.Equals(String.Empty) And
            Txtwohnsitz.Text.Equals(String.Empty) And
            Txttelefon.Text.Equals(String.Empty) And
            txtstreet.Text.Equals(String.Empty) Then

            MessageBox.Show("Bitte füllen Sie alle Felder mit * aus", "TIS Car Rental System", MessageBoxButtons.OK, MessageBoxIcon.Warning)

        Else

            Try
                Dim mstream As New System.IO.MemoryStream
                PictureBox1.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg)
                arrImage = mstream.GetBuffer
                Dim filesize As UInt32
                filesize = mstream.Length

                mstream.Close()

                conn.ConnectionString = Myconnection

                conn.Open()

                sql = "INSERT INTO tblcustomer(Kunden_Name,Kunden_Vorname,Geburtsdatum,Nationaltaet,Hauptwohnsitz,Strasse,Kontakt_Nr,Email_Adresse,Fuehrerschein_Nr,Austeller,FS_Klassen,FS_Datum,Wohnsitz_ES,Strasse_ES,FS_Foto) " &
               " VALUES (@NAME, @VORNAME, @Geburtsdatum, @Nationaltaet, @Hauptwohnsitz, @Strasse, @Kontakt_Nr, @Email_Adresse, @Fuehrerschein_Nr, @Austeller, @FS_Klassen, @FS_Datum, @Wohnsitz_ES, @Strasse_ES, @FS_Foto)"

                cmd.Connection = conn
                cmd.CommandText = sql
                cmd.Parameters.AddWithValue("@NAME", TxtKundenname.Text)
                cmd.Parameters.AddWithValue("@VORNAME", TxtKundenvorname.Text)
                cmd.Parameters.AddWithValue("@Geburtsdatum", TxtKundendatum.Text)
                cmd.Parameters.AddWithValue("@Nationaltaet", Txtnational.Text)
                cmd.Parameters.AddWithValue("@Hauptwohnsitz", Txtwohnsitz.Text)
                cmd.Parameters.AddWithValue("@Strasse", txtstreet.Text)
                cmd.Parameters.AddWithValue("@Kontakt_Nr", Txttelefon.Text)
                cmd.Parameters.AddWithValue("@Email_Adresse", txtemail.Text)
                cmd.Parameters.AddWithValue("@Fuehrerschein_Nr", Txtdriverlicense.Text)
                cmd.Parameters.AddWithValue("@Austellerr", Txtdriverlicenseort.Text)
                cmd.Parameters.AddWithValue("@FS_Klassen", txtlicenseclass.Text)
                cmd.Parameters.AddWithValue("@FS_Datum", txtFS_Datum.Text)
                cmd.Parameters.AddWithValue("@Wohnsitz_ES", txtortspanien.Text)
                cmd.Parameters.AddWithValue("@Strasse_ES", txtstreetspanien.Text)
                cmd.Parameters.AddWithValue("@FS_Foto", arrImage)


                Dim r As Integer
                r = cmd.ExecuteNonQuery()
                If r > 0 Then
                    MsgBox("Neuer Kunde wurde gespeichert!")
                    conn.Close()
                    Call Btnload_Click(sender, e)
                    cleartextfields()
                    PictureBox1.Image = Nothing
                Else
                    MsgBox("Neuer Kunde wurde nicht gespeichert!")


                End If
                conn.Close()


            Catch ex As Exception
                If ex.Message = "Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt." Or
                    ex.Message = "Nicht übereinstimmende Datentypen im Kriterienausdruck." Then
                    MessageBox.Show("Bitte füllen Sie alle Felder mit * aus", "TIS Car Rental System", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                Else
                    InputBox("", "", ex.Message)
                End If
            End Try
        End If

    End Sub

    Private Sub Btnupdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnupdate.Click
        If TxtKundenname.Text.Equals(String.Empty) And
            Txtwohnsitz.Text.Equals(String.Empty) And
            Txttelefon.Text.Equals(String.Empty) And
            txtstreet.Text.Equals(String.Empty) Then


            MessageBox.Show("Bitte füllen Sie alle Felder mit * aus", "TIS Car Rental System", MessageBoxButtons.OK, MessageBoxIcon.Warning)

        Else

            Try

                Dim mstream As New System.IO.MemoryStream
                PictureBox1.Image.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg)
                arrImage = mstream.GetBuffer
                Dim filesize As UInt32
                filesize = mstream.Length

                mstream.Close()
                conn.ConnectionString = Myconnection

                conn.Open()

                sql = "UPDATE tblcustomer SET Kunden_Name=@NAME, Kunden_Vorname=@VORNAME, Geburtsdatum=@Geburtsdatum, Nationaltaet=@Nationaltaet, Hauptwohnsitz=@Hauptwohnsitz, Strasse=@Strasse, Kontakt_Nr=@Kontakt_Nr, Email_Adresse=@Email_Adresse, Fuehrerschein_Nr=@Fuehrerschein_Nr, Austeller=@Austellerr, FS_Klassen=@FS_Klassen, FS_Datum=@FS_Datum, Wohnsitz_ES=@Wohnsitz_ES, Strasse_ES=@Strasse_ES, FS_Foto=@FS_Foto WHERE ID=" & Me.Text

                cmd.Connection = conn
                cmd.CommandText = sql
                cmd.Parameters.AddWithValue("@NAME", TxtKundenname.Text)
                cmd.Parameters.AddWithValue("@VORNAME", TxtKundenvorname.Text)
                cmd.Parameters.AddWithValue("@Geburtsdatum", TxtKundendatum.Text)
                cmd.Parameters.AddWithValue("@Nationaltaet", Txtnational.Text)
                cmd.Parameters.AddWithValue("@Hauptwohnsitz", Txtwohnsitz.Text)
                cmd.Parameters.AddWithValue("@Strasse", txtstreet.Text)
                cmd.Parameters.AddWithValue("@Kontakt_Nr", Txttelefon.Text)
                cmd.Parameters.AddWithValue("@Email_Adresse", txtemail.Text)
                cmd.Parameters.AddWithValue("@Fuehrerschein_Nr", Txtdriverlicense.Text)
                cmd.Parameters.AddWithValue("@Austellerr", Txtdriverlicenseort.Text)
                cmd.Parameters.AddWithValue("@FS_Klassen", txtlicenseclass.Text)
                cmd.Parameters.AddWithValue("@FS_Datum", txtFS_Datum.Text)
                cmd.Parameters.AddWithValue("@Wohnsitz_ES", txtortspanien.Text)
                cmd.Parameters.AddWithValue("@Strasse_ES", txtstreetspanien.Text)
                cmd.Parameters.AddWithValue("@FS_Foto", arrImage)

                Dim r As Integer
                r = cmd.ExecuteNonQuery()
                If r > 0 Then
                    MsgBox("Kunde wurde aktualisiert!")
                    conn.Close()
                    Call Btnload_Click(sender, e)
                    cleartextfields()
                    PictureBox1.Image = Nothing
                Else
                    MsgBox("Kunde wurde nicht aktualisiert!")


                End If
                conn.Close()


            Catch ex As Exception
                If ex.Message = "Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt." Or
                    ex.Message = "Nicht übereinstimmende Datentypen im Kriterienausdruck." Then
                    MessageBox.Show("Bitte füllen Sie alle Felder mit * aus", "TIS Car Rental System", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                Else
                    InputBox("", "", ex.Message)
                End If
            End Try
        End If

    End Sub

    Private Sub Txtsearch_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txtsearch.TextChanged
        Try

            conn.Open()
            dbdt = New DataTable

            With dbcmd
                .Connection = conn
                .CommandText = "Select * from tblcustomer where Kunden_Name like '" & Txtsearch.Text & "%'"
            End With

            dbda.SelectCommand = dbcmd
            dbda.Fill(dbdt)

            DataGridView1.DataSource = dbdt

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        dbda.Dispose()

        conn.Close()
    End Sub

    Private Sub Txttelefon_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    End Sub

    Private Sub Btnload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btnload.Click
        dbdt = New DataTable
        Try
            sql = "SELECT * FROM tblcustomer"

            conn.ConnectionString = Myconnection
            conn.Open()
            With dbcmd
                .CommandText = sql
                .Connection = conn
            End With

            dbda.SelectCommand = dbcmd
            dbda.Fill(dbdt)
            DataGridView1.DataSource = dbdt


        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            conn.Close()


        End Try
    End Sub


    Private Sub TxtKundenname_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxtKundenname.TextChanged
        DisallowNumber(TxtKundenname)
    End Sub

    Private Sub Txtdriverlicense_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txtdriverlicense.TextChanged

    End Sub
End Class


er stoppt bei Zeile 37
arrimage = DataGridView1.CurrentRow.Cells(15).Value

Vieleicht fällt euch der Fehler auf

Danke
 

werner_sg

Erfahrenes Mitglied
System.InvalidCastException: "Das Objekt des Typs "System.String" kann nicht in Typ "System.Byte[]" umgewandelt werden."

hier noch die Fehlermeldung
 

werner_sg

Erfahrenes Mitglied
klammere ich folgenden Block aus

C#:
        If Not IsDBNull(arrimage) Then
            'arrimage = DataGridView1.CurrentRow.Cells(15).Value
        End If

        'Dim mstream As New System.IO.MemoryStream(arrimage)
        'PictureBox1.Image = Image.FromStream(mstream)

werden alle Datenfelder ordentlich geladen, ausgenommen des Bildes
 

werner_sg

Erfahrenes Mitglied
morgen Spyke, sagte ja den Wald vor lauter Bäumen, habe mich im Script dumm und dämlich gesucht, auch immer wieder in die Access geschaut aber ist mir dann jetzt erst aufgefallen das ich zwar die Spalte in der normalen Ansicht verschoben hatte aber nicht in der Entwurfsansicht dort Stand sie auf Zeile 13 und Zeile 15 damit selbstverständlich ein String.
Danke für das Anstupsen jetzt läuft es wieder ;-)
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…