Bilder in DGV einfügen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von mrMo.

    Bilder in DGV einfügen

    Sorry Leute. Zu diesem Thema finde ich hunderte Erklärungen. Aber ich raffe es einfach nicht.

    Ich habe ein DGV mit 3 Spalten.
    Spalte 1 enthält den deutschen Namen eines Fisches, Spalte 2 den lateinischen. Spalte 1 und 2 sind an ein DGV gebunden.
    Nun möchte ich zu jedem Fisch ein Bild daneben haben. Also Spalte 3 (ungebunden) als ImageColumn eingefügt.

    Nun möchte ich das DGV mit einer Schleife durchlaufen. Der Bildpfad ergibt sich dann aus dem deutschen Namen des Fisches.
    Also (Schleife und Fehlerbehanldung, wenns Bild nicht gibt, habe ich mir zum einfacheren Verständnis mal gespart und beschränke es auf die erste Zeile)

    VB.NET-Quellcode

    1. Dim Nameger = DTAnimalsDataGridView.Item(0, 0).Value.ToString
    2. Dim PictureFile As New FileInfo(My.Application.Info.DirectoryPath & "\Bilder\" & Nameger & ".jpg")
    3. Dim FishImage = Image.FromFile(PictureFile.FullName)

    Wie bekomme ich aber nun mein FishImage in die DGV Zelle (0,2)?
    Nicht über die Codekomplexität erschrecken ;)

    VB.NET-Quellcode

    1. DeinDGV.Item(2, 0).Value = FishImage
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das DataGridView kann so vieles von alleine. Man braucht einfach nur nen richtiges Datenmodell. Aber hier frickeln alle nur mit Columns und Rows rum, was unfassbar fummelig ist und unkomfortabel.

    In diesem Fall eine Klasse „Fisch“ mit den Eigenschaften Deutsch (String), Latein (String) und Bild (Image). Diese nimmt man nun her und packt für jeden Fisch eine Instanz dieser Klasse in eine List( Of Fisch). Diese Liste wiederum hängt man als DataSource an das Grid. Der Trick ist nun, dass man das Bild nur einmalig im Getter der Property läd und dann dort „behält“. Dieses Vorgehen könnte man als „lazy loading“ bezeichnen.

    Das Grid zeigt so ganz automatisch das Bildchen und die anderen Werte an. Jetzt kann man sogar die SelectedRow als „Fisch“ casten und schick weiter verarbeiten.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen