Laden...

Daten aus Datenbank mit Bildern in Listview verknüpfen

Erstellt von thomas_24 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.112 Views
T
thomas_24 Themenstarter:in
1 Beiträge seit 2018
vor 5 Jahren
Daten aus Datenbank mit Bildern in Listview verknüpfen

Hallo zusammen,

ich habe nun zu euch ins Forum gefunden 😃

Ich programmiere gerade ein Programm, in dem ich auf Daten aus einer SQL-Datenbank zugreife und diese Daten in einem Listview anzeigen lasse. Zudem habe ich eine Imagelist, in der alle Bilder, die in einem bestimmten Ordner gespeichert sind, geladen werden. Das klappt auch soweit ganz gut.

Jetzt kommt aber mein eigentlichen Problem:

Wie schaffe ich es, dass jeweils ein Datensatz aus der Datenbank mit dem entsprechenden Bild verknüpft und gemeinsam im Listview angezeigt werden? Für jeden Datensatz ist genau in Bild im Ordner gespeichert. Der Name Bildes entspricht genau der ersten Spalte des Datensatzes, also ist identisch.

Hier rufe ich die Daten aus der Datenbank ab und zeige diese im Listview an


        public void lvSetsGallery_load()
        {
            SqlConnection con = new SqlConnection(connstr);
            SqlDataReader rdr;
            SqlCommand cmd = new SqlCommand();
            con.Open();
            cmd.CommandText = @"Verbindung zu Datenbank";
            cmd.Connection = con;
            rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                ListViewItem lv = new ListViewItem(rdr[0].ToString() + Environment.NewLine + rdr[1].ToString(), 0);
                lv.SubItems.Add(rdr[0].ToString());
                lv.SubItems.Add(rdr[1].ToString());
                lv.SubItems.Add(rdr[11].ToString());
                lv.SubItems.Add(rdr[8].ToString());
                lv.SubItems.Add(rdr[6].ToString());
                lv.SubItems.Add(rdr[2].ToString() + " €");
                lv.SubItems.Add(rdr[3].ToString());
                lv.SubItems.Add(rdr[4].ToString());
                lvSets.Items.Add(lv);
            }
            con.Close();
        }

ich weiß, die "0" in

ListViewItem lv = new ListViewItem(rdr[0].ToString() + Environment.NewLine + rdr[1].ToString(), 0);

ruft immer nur das Bild mit dem Index "0" auf, also aktuelle immer das gleiche. Wie kann ich an dieser Stelle den Datensatz mit dem Namen des Bildes verknüpfen?

Hier lade ich die Bilder in die Imagelist


        private void ilSets_fill()
        {
            paths = Directory.GetFiles("Dateipfad");
            foreach (string path in paths)
            {
                ilSets.Images.Add("", Image.FromFile(path));
            }
        }

Vielen Dank für eure Hilfen 😃

T
2.224 Beiträge seit 2008
vor 5 Jahren

Dein Code macht einiges falsch!
Du disposed deinen DataReader nicht, umbedingt machen(using oder direkten Aufruf von Dispose).
Auch solltest du deinen Datenbank Code dringend aus der UI nehmen, da gehört der nicht hin.
Siehe Drei-Schichten-Modell.

Auch solltest du die Daten im DataReader nicht per Index sondern per Spaltenname auslesen.
Sonst kann keiner wissen welcher Wert aus dem Reader aus dem jeweiligen Index kommt.
Bei Änderungen der Spalten, stimmen dann auch deine Auflistungen nicht mehr!

Zum Verknüpfen musst du eigentlich nur den Namen aus dem aktuellen Datensatz auslesen und das Bild ermitteln.
Eigentlich dürfte dies kaum ein Problem sein, da du ja den Namen hast und eigentlich alles hast um das Bild zu finden.
Wo genau liegt das Problem?

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.