Ich habe eine listbasierte Anwendung, die sehr langsam ausgeführt wird, da jede Zeile in meiner DataGridView manuell als DataGridViewRow erstellt wird. Um Performance-Probleme zu beheben, entschied ich mich stattdessen eine DataSource (DataTable) zu verwenden.DataGridView DataSource // Ganzzahl zu Symbol
Mein Problem:
Eine Spalte ich aus meiner Datenbank bin recieving mit Bild-IDs gefüllt ist. Die Anwendung weiß, welches Bild zu welcher ID gehört. Beim manuellen Erstellen von Gridrows gab es kein Problem beim Konvertieren von int in eine Bitmap und beim Verwenden der Bitmap als Wert für eine Bildspalte. Jetzt kann ich das Datatable stattdessen verwenden, es funktioniert nicht. Für den Test habe ich die folgende Klasse:
Public Class test
Dim img As Bitmap
Public Sub New(image As Bitmap)
InitializeComponent()
Me.img = image
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim dt As New DataTable
dt.Columns.Add("StrCol")
dt.Columns.Add("ImgCol")
Dim row As DataRow = dt.NewRow
row.Item(0) = "Ohne Bild"
row.Item(1) = 0
Dim row2 As DataRow = dt.NewRow
row2.Item(0) = "Mit Bild"
row2.Item(1) = 1
dt.Rows.Add(row)
dt.Rows.Add(row2)
DataGridView1.DataSource = dt
End Sub
Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
If e.ColumnIndex = 1 Then
If e.Value = 0 Then
e.Value = Nothing
Else
e.Value = img
End If
End If
End Sub
End Class
Hinweis:
- "Ohne Bild" übersetzt "Ohne Bild"
- "Mit Bild" übersetzt "Mit Bild"
EDIT
Wegen eines Missverständnis werde ich versuchen, meine Frage zu klären;
Mit listenbasiert meine ich eigentlich nicht das Listenobjekt. Mein schlechtes dort. Mit listenbasiert meine ich eine Anwendung, die den Benutzer Database-Einträge anzeigt, die er gemacht hat. Das grundlegende meiner Anwendung ist einfach: Erlaubt dem Benutzer, Zeilen hinzuzufügen, zu bearbeiten und Zeilen in einer Datagridview zu löschen. Diese Information wird in einer Datenbank gespeichert und bearbeitet. Einige dieser Informationen in den Zeilen (2 Spalten, um genau zu sein) werden als Symbole angezeigt, während die Anwendung einfach eine ID für das Symbol in der Datenbank speichert. Die Anwendung weiß also, welche ID zu welchem Symbol gehört.
Das Beispiel dt in der Frage ist nur etwas zu arbeiten. In der Anwendung werden Daten von einer Datenbank zu einer Datentabelle empfangen.
Eine Bild-ID wird nicht automatisch in ein Bild übersetzt. Wo werden die Bilder gespeichert? – Plutonix
@Plutonix Ich habe nicht versucht, das CellFormatting-Ereignis zum Spaß zu überschreiben :-) Die Bilder/Icons werden, wie Sie sehen können, in einem Instanz-Member gespeichert, das im Konstruktor definiert ist. – Luke