Bilder in Datagridview hinzufügen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Bilder in Datagridview hinzufügen

    Hallo liebe Gemeinde,

    bisher bin ich mit der Einarbeitung von Items von Datagridview vertraut und wollte mit Bildern experimentieren.
    Ich nutze ganz gewöhnliche Datatables, die an eine DGB gebindet werden:

    VB.NET-Quellcode

    1. With lister
    2. .Columns.Add("Index", GetType(System.Int32))
    3. .Columns.Add("A", GetType(System.String))
    4. .Columns.Add("B", GetType(System.String))
    5. End
    6. ...
    7. Datagridview1.DataSource = lister


    Mittels eines Buttons füge ich Rows zur Datatable hinzu. Die ersten beiden Textboxen besitzen einen Stringinhalt.

    Ich habe bisher mit folgendem Ansatz versucht, Bilder hinzuzufügen:

    VB.NET-Quellcode

    1. Dim imgcol As DataGridViewImageColumn = New DataGridViewImageColumn()
    2. Dim counter as integer = 1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. Dim tClient As WebClient = New WebClient
    5. Dim tImage As Bitmap = Bitmap.FromStream(New MemoryStream(tClient.DownloadData(serverlist+ counter )))
    6. Dim a As Image = New Bitmap(tImage)
    7. imgcol.image = a
    8. imgcol.HeaderText = "Image"
    9. imgcol.Name = "Image"
    10. DataGridView1.Columns.Add(imgcol)
    11. lister.rows.add(counter, textbox1.text, textbox2.text, imgcol)
    12. counter +=1



    Dies führt zu einer Fehlermeldung. Die Datagridview wird somit gar nicht gefüllt.

    Ich bedanke mich recht herzlich im voraus und verbleibe mit freundlichen Grüßen
    Du mußt die entsprechende Column als DataGridViewImageColumn deklarieren.
    msdn.microsoft.com/de-de/libra…magecolumn(v=vs.110).aspx
    msdn.microsoft.com/de-de/libra…lumn.image(v=vs.110).aspx

    Ach Quatsch, ich habe mich verguckt, du hast ja korrekt deklariert. :whistling:

    Mir ist nicht ganz klar, wie du das DataGridView befüllst, ist es nun gebunden, oder befüllst du es anderweitig ?
    Bist du dir sicher, daß die Bilddateien aus dem Netz, auch in der Variable ankommen ?

    Arrrgg, ich sehe den Wald vor lauter Bäumen nicht (Ganze Methoden wären übersichtlicher!).

    lister.Rows.Add(imgcol) Einer Zeile, ein Spalte hinzufügen kann aber schon mal nicht gehen, zumal imgcol vom Typ DataGridViewImageColumn ist und lister vom Typ DataTable.

    edit5:
    Habe mir nen Kaffe in Kopp gekippt, nun arbeitet das Hirn wieder einigermaßen. :D

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim lister As New DataTable
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. With lister
    5. .Columns.Add("Index", GetType(System.Int32))
    6. .Columns.Add("A", GetType(System.String))
    7. .Columns.Add("B", GetType(System.String))
    8. .Columns.Add("Image", GetType(System.Drawing.Bitmap)) ' <---- !!!
    9. End With
    10. DataGridView1.DataSource = lister
    11. End Sub
    12. Dim counter As Integer = 1
    13. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    14. Dim tImage As Bitmap = CType(Image.FromFile("C:\...\...\test.png", True), Bitmap)
    15. Dim a As Image = New Bitmap(tImage)
    16. lister.Rows.Add(counter, "bla", "blub", a)
    17. counter += 1
    18. End Sub
    19. End Class

    Damit solltest du was anfangen können.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Pasta“ ()

    @Pasta Jou. Und nun mit DataTable:
    .@Semiconductor Es geht auch mit Image. Form mit Button umd leerem DGV, alle PNG-Dateien im Pfad c:\Temp werden angezeigt:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim table As New System.Data.DataTable()
    3. table.Columns.Add("Icon", GetType(Image))
    4. table.Columns.Add("Path", GetType(String))
    5. Dim fis() = New IO.DirectoryInfo("c:\temp\").GetFiles("*.png", IO.SearchOption.TopDirectoryOnly)
    6. For Each fi In fis
    7. table.Rows.Add(New Bitmap(fi.FullName), fi.FullName)
    8. Next
    9. With Me.DataGridView1.RowTemplate
    10. .DefaultCellStyle.BackColor = Color.Bisque
    11. .Height = 100
    12. .MinimumHeight = 20
    13. End With
    14. Me.DataGridView1.DataSource = table
    15. Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
    16. DataGridViewCellStyle1.Font = New System.Drawing.Font("Microsoft Sans Serif", 20.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
    17. Me.DataGridView1.DefaultCellStyle = DataGridViewCellStyle1
    18. Me.DataGridView1.Columns(0).Width = 200
    19. Me.DataGridView1.Columns(1).Width = 300
    20. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!