2017-07-22 4 views
0

Mein Code ist, den Bilddateipfad in jeder Zeile zu lesen und in der Spalte "Image" von datagridview anzuzeigen.datagridview Image Anzeige vb.net MS Access

.....

Was ist das Problem mit meinem Code? Bitte hilf mir, das zu beheben.

UPDATE

dies ist der aktualisierte Code, aber es zeigt nichts.

Dim dbdataset As New DataTable 
     Try 
      con.Open() 
      query = "Select * FROM [svfmemberlist]" 
      cmd = New OleDbCommand(query, con) 
      da.SelectCommand = cmd 
      da.Fill(dbdataset) 
      dgvSearch.RowTemplate.Height = 150 
      source.DataSource = dbdataset 
      dgvSearch.DataSource = source 

      Dim img As New DataGridViewImageColumn() 
      dgvSearch.Columns.Add(img) 
      img.HeaderText = "Image" 
      img.Name = "img" 
      img.ImageLayout = DataGridViewImageCellLayout.Zoom 
      dgvSearch.Columns("img").DataGridView.AutoGenerateColumns = False 
      dgvSearch.Columns("Name").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill 
      dgvSearch.Columns("img").Width = 150 
      For Each row As DataGridViewRow In dgvSearch.Rows 
       If Not row.Cells("imgPath").FormattedValue.ToString = Nothing Then 
        Dim str As String = row.Cells("imgPath").FormattedValue.ToString 
        Dim inImg As Image = Image.FromFile(str) 
        row.Cells("img").Value = inImg 
       Else 
        img.Image = Nothing 
       End If 
      Next 
      con.Close() 
     Catch ex As Exception 
      MessageBox.Show(ex.Message) 
     End Try 

enter image description here

+0

Nun, weil Sie *** eine neue Spalte jedes Mal hinzufügen *** ... – Codexer

+0

ich habe es früher mit dem Hinzufügen von Zeilen ändern. aber das Bild wurde nicht angezeigt. – Hemerson

Antwort

1

Das folgende Beispiel entspricht nicht, wie Sie Daten laden und Bilder, aber mit ein wenig Aufwand wird im aktuellen Code arbeiten.

Ich habe zwei Spalten in der DataGridView über die IDE, ein Text und ein Image DataGridViewColumn erstellt.

Die erste Zeile im Formular lädt setzt ImageLayout, die zweite Zeile des Codes setzt die Ausrichtung nach oben links für die Darstellung. Als nächstes setze ich den automatischen Größenmodus für alle Spalten, gefolgt von der Einstellung der Zeilenhöhe für jede Zeile.

Als nächstes (diese Zeilen laden Bilder aus einem Ordner eine Ebene unterhalb des App-Ordners).

Legen Sie den Pfad zu den Bildern fest. Fügen Sie Bilder mithilfe der Funktion "FileImageBytes" hinzu (die ich in ein separates Klassen- oder Codemodul einfügen würde, aber in Ihrem Formular problemlos funktioniert).

Ja, alles ist fest verdrahtet, so dass man leicht sehen kann, wie alles funktioniert.

Public Class Form1 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     CType(DataGridView1.Columns("PictureColumn"), DataGridViewImageColumn).ImageLayout = DataGridViewImageCellLayout.Normal 
     DataGridView1.Columns.Cast(Of DataGridViewColumn).Select(Function(col) col).ToList _ 
      .ForEach(Sub(col) col.CellTemplate.Style.Alignment = DataGridViewContentAlignment.TopLeft) 
     DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells 
     DataGridView1.RowTemplate.Height = 222 
     Dim imagePath As String = IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Images") 
     DataGridView1.Rows.Add(New Object() {"Car1", FileImageBytes(IO.Path.Combine(imagePath, "Car1.bmp"))}) 
     DataGridView1.Rows.Add(New Object() {"Car2", FileImageBytes(IO.Path.Combine(imagePath, "Car2.jpg"))}) 
    End Sub 
    Public Function FileImageBytes(ByVal FileName As String) As Byte() 
     Dim fileStream As IO.FileStream = New IO.FileStream(FileName, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read) 
     Dim byteArray(CInt(fileStream.Length - 1)) As Byte 
     fileStream.Read(byteArray, 0, CInt(fileStream.Length)) 
     Return byteArray 
    End Function 
End Class