DataGridView mit Bildern füllen

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von MAF1981.

    DataGridView mit Bildern füllen

    Hallo Zusammen,

    ich bekomme es irgendwie nicht hin, Bilder in verschiedenen Spalten eines DataGridView anzuzeigen.
    Was ich mache: Ich erzeuge eine DataTable, die ich mit Daten einer Datenbank füttere. Nachdem das geschehen ist, binde ich die DataTable als DataSource beim FormLoad an das DataGridView. Ich vermute, mein Problem liegt an der Spaltendefinition der DataTable, denn die Fehlermeldung ist folgende:

    {"Column requires a valid DataType."}

    Und zwar in der Spalte, wo ich das erste Mal die Image Spalte definiere. Das mach ich so hier:

    VB.NET-Quellcode

    1. dt.Columns(sSpalteQ1).DataType = System.Type.GetType("System.Drawing.Bitmap")

    aber auch mit

    VB.NET-Quellcode

    1. dt.Columns(sSpalteQ1).DataType = System.Type.GetType("System.Byte[]")

    funktioniert es nicht.

    Falls es nötig ist, zeig ich euch hier mal, was ich so alles mache... :rolleyes:
    Das Programm an sich funktioniert, wenn ich anstatt der Bilder nur "Ja" / "Nein" zurückgebe, wird alles richtig angezeigt.

    Der Eintiegspunkt, die Zuweisung der DataTable als DataSource des DGV:

    VB.NET-Quellcode

    1. Public Sub initDataGridViewMitglieder(ByRef dgv As DataGridView)
    2. 'Funktion siehe unten...
    3. dgv.DataSource = getMitgliederListe()
    4. 'Spalte mit Namen größer
    5. dgv.Columns(0).Width = 110
    6. dgv.Columns(1).Width = 70
    7. dgv.Columns(2).Width = 70
    8. dgv.Columns(3).Width = 70
    9. dgv.Columns(4).Width = 70
    10. 'loadListViewMitgliderDaten(dgv)
    11. 'dgv.AutoResizeColumns()
    12. End Sub


    Funktion getMitgliederListe() die oben aufgerufen wird:

    VB.NET-Quellcode

    1. Public Function getMitgliederListe() As DataTable
    2. ...
    3. ' Funktion CreateImportDataTable siehe unten...
    4. GridViewDataTable = CreateImportDataTable(sNameDATASET_Mitglieder)
    5. For j = 0 To localDataset.Tables(sNameDATASET_Mitglieder).Rows.Count - 1
    6. dr = GridViewDataTable.NewRow()
    7. Dim sCurrentSMECID As String = localDataset.Tables(sNameDATASET_Mitglieder).Rows(j).Item(konstanten.MITGLIEDER_SMEC_ID)
    8. dr(sSpalteName) = sCurrentSMECID & " - " & localDataset.Tables(sNameDATASET_Mitglieder).Rows(j).Item(konstanten.MITGLIEDER_NAME) & " " & localDataset.Tables(sNameDATASET_Mitglieder).Rows(j).Item(konstanten.MITGLIEDER_VORNAME)
    9. 'Prüfe ob Mitglied bereits für Q1,Q2,Q3,Q4 bezahlt hat
    10. 'Funktion getMitgliedHatBezahltFuerQuartale siehe unten...
    11. Dim dtBezahlt As DataTable = getMitgliedHatBezahltFuerQuartale(localDataset.Tables(sNameDATASET_Beitraege), sCurrentSMECID)
    12. dr(sSpalteQ1) = dtBezahlt.Rows(0).Item(sSpalteQ1)
    13. dr(sSpalteQ2) = dtBezahlt.Rows(0).Item(sSpalteQ2)
    14. dr(sSpalteQ3) = dtBezahlt.Rows(0).Item(sSpalteQ3)
    15. dr(sSpalteQ4) = dtBezahlt.Rows(0).Item(sSpalteQ4)
    16. GridViewDataTable.Rows.Add(dr)
    17. Next
    18. ...


    Funktion CreateImportDataTable() die oben verwendet wird:

    VB.NET-Quellcode

    1. '
    2. ' DataTable erzeugen, die temporär alle Eingaben speichert
    3. '
    4. Private Function CreateImportDataTable(ByVal dt_Name As String) As DataTable
    5. Dim dt As New DataTable
    6. Dim Schlüssel(0) As DataColumn
    7. dt.TableName = dt_Name
    8. dt.Columns.Add(sSpalteName)
    9. dt.Columns(sSpalteName).DataType = System.Type.GetType("System.String")
    10. dt.Columns.Add(sSpalteQ1)
    11. 'dt.Columns(sSpalteQ1).DataType = System.Type.GetType("System.Byte[]")
    12. ' !!!!!!!! In folgender Zeile bricht das Programm mit dem oben genannten Fehler an:
    13. dt.Columns(sSpalteQ1).DataType = System.Type.GetType("System.Drawing.Bitmap")
    14. dt.Columns.Add(sSpalteQ2)
    15. dt.Columns(sSpalteQ2).DataType = System.Type.GetType("System.Drawing.Bitmap")
    16. dt.Columns.Add(sSpalteQ3)
    17. dt.Columns(sSpalteQ3).DataType = System.Type.GetType("System.Drawing.Bitmap")
    18. dt.Columns.Add(sSpalteQ4)
    19. dt.Columns(sSpalteQ4).DataType = System.Type.GetType("System.Drawing.Bitmap")
    20. CreateImportDataTable = dt
    21. End Function


    Funktion getMitgliedHatBezahltFuerQuartale() die zwei Code-Blöcke drüber aufgerufen wird:

    VB.NET-Quellcode

    1. '
    2. ' Ermittelt, ob das Mitglied für ein bestimmtes Quartal bezahlt hat
    3. '
    4. Public Function getMitgliedHatBezahltFuerQuartale(ByRef dataTable As DataTable, ByVal sSMECID As String) As DataTable
    5. ...
    6. Dim dt As New DataTable
    7. Dim dr As DataRow = Nothing
    8. Dim IcoBezahlt As Image = Image.FromFile("images\20x20_false.bmp")
    9. Dim IcoNichtBezahlt As Image = Image.FromFile("images\20x20_true.bmp")
    10. Dim IcoBefreit As Image = Image.FromFile("images\20x20_neutral.bmp")
    11. dt.TableName = sNameDATASET_Beitraege
    12. dt.Columns.Add(sSpalteQ1)
    13. dt.Columns(sSpalteQ1).DataType = System.Type.GetType("System.Drawing.Bitmap")
    14. dt.Columns.Add(sSpalteQ2)
    15. dt.Columns(sSpalteQ2).DataType = System.Type.GetType("System.Drawing.Bitmap")
    16. dt.Columns.Add(sSpalteQ3)
    17. dt.Columns(sSpalteQ3).DataType = System.Type.GetType("System.Drawing.Bitmap")
    18. dt.Columns.Add(sSpalteQ4)
    19. dt.Columns(sSpalteQ4).DataType = System.Type.GetType("System.Drawing.Bitmap")
    20. ...


    Ich hoffe das war verständlich und ihr wisst, was ich meine.

    Gruß aus München.