none
SQL gespeicherte Images in Datagridview skaliert anzeigen RRS feed

  • Frage

  • Hallo zusammen,

    ich versuche Folgendes:
    In einer SQL Table speichere ich als image Fotos, die alle von unterschiedlicher Größe sind.
    Diese Table zeige ich in einem DatagridView an. Dabei wird für die Fotos automazisch eine ImageColumn erzeugt. Dies lege ich in der Breite fest. Hier ein bisschen Code dazu:

    For Each column As DataGridViewImageColumn In dgv.Columns
    	column.Width = 50
    	column.ImageLayout = DataGridViewImageCellLayout.Stretch
    Next
    

    Im Ereignis dgv.DataBindingComplete folgender Code, Festlegung der maximalen Zeilenhöhe:

    For i As Short = 0 To dgv.Rows.Count - 1
    	If Not IsDBNull(dgv.Rows(i).Cells("Foto").Value) _
    		AndAlso dgv.Rows(i).Cells("Foto").Visible Then
    		dgv.Rows(i).Height = dg.Columns("Foto").Width
    	End If
    Next
    

    Diese Vorgehensweise habe ich im Internet gefunden und sie leuchtete mir ein.
    Aber leider funktioniert eben die Darstellung der Fotos mit 'Stretched' nicht so, dass gewissermaßen ein in die Zelle eingepasstes Bild zu sehen ist.

    Wie kann man das anders lösen?

    Grüße-


    Dietrich

    Dienstag, 5. Februar 2019 12:01

Antworten

  • Hallo,

    ich habe es gelöst. Die DataGridViewImageColumndefiniere ich jetzt folgendermaßen:

    Dim column As DataGridViewImageColumn = dgv.Columns("Foto")
    With column
    	.Width = 50
    	.ValuesAreIcons = False
    	.ImageLayout = DataGridViewImageCellLayout.Zoom
    	.DefaultCellStyle.NullValue = Nothing   'vermeiden der Anzeige des red X
    End With

    Den Code für DataBindingComplete habe ich so gelassen, wie im ersten Post gezeigt.

    Grüße-



    Dietrich


    • Als Antwort markiert dherrmann Dienstag, 5. Februar 2019 16:35
    • Bearbeitet dherrmann Dienstag, 5. Februar 2019 16:36
    Dienstag, 5. Februar 2019 16:35

Alle Antworten

  • Was genau funktioniert denn nicht? Du setzt die Höhe der Zeile auf die Breite der Spalte, das würde ein quadratisches Bild ergeben... Kommt sowas raus?
    Dienstag, 5. Februar 2019 13:12
  • Es wird die linke obere Ecke (5x50) jedes Bildes angezeigt.
    Das gleiche kommt auch heraus, wenn ich Imagelayout auf Zoomed stelle.
    Ich habe den Eindruck, dass die Layouteinstellung gar nichts bewirkt.

    Grüße-


    Dietrich

    Dienstag, 5. Februar 2019 13:28
  • Hallo,

    ich habe es gelöst. Die DataGridViewImageColumndefiniere ich jetzt folgendermaßen:

    Dim column As DataGridViewImageColumn = dgv.Columns("Foto")
    With column
    	.Width = 50
    	.ValuesAreIcons = False
    	.ImageLayout = DataGridViewImageCellLayout.Zoom
    	.DefaultCellStyle.NullValue = Nothing   'vermeiden der Anzeige des red X
    End With

    Den Code für DataBindingComplete habe ich so gelassen, wie im ersten Post gezeigt.

    Grüße-



    Dietrich


    • Als Antwort markiert dherrmann Dienstag, 5. Februar 2019 16:35
    • Bearbeitet dherrmann Dienstag, 5. Februar 2019 16:36
    Dienstag, 5. Februar 2019 16:35