Laden...

[gelöst] Wie Zellen einer Datatable bzw. DataGridView mit Bildern füllen?!?

Erstellt von daSnoop vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.919 Views
D
daSnoop Themenstarter:in
43 Beiträge seit 2010
vor 12 Jahren
[gelöst] Wie Zellen einer Datatable bzw. DataGridView mit Bildern füllen?!?

servus,
also habe folgendes vor:

aus ner sql datenbank links zu bildern abfragen und dann das entsprechende bild innerhalb eines datagridview anzeigen.

dazu hab ich als erstes:

DataColumn dcSwitch = new DataColumn(" ", typeof(bool));
DataColumn dcArNr = new DataColumn("Artikelnummer", typeof(string));
DataColumn dcBild2 = new DataColumn("Bild2", typeof(string));
DataColumn dcBild = new DataColumn("Bild", typeof(PictureBox));
dtListe.Columns.Add(dcSwitch);
dtListe.Columns.Add(dcArNr);
dtListe.Columns.Add(dcBild2);
dtListe.Columns.Add(dcBild);

danach lese ich von der datenbank die artikelnummer und den link zu dem bild ein und speicher sie in die datatable in die felder Artikelnummer und Bild2.

als nächstes wollte ich mit ner schleife die datatable durchgehen und wenn die datei hinter dem link existiert, dieses bild in der picturebox dieser zeile anzeigen.
ungefähr so:

foreach (DataRow row in dtListe.Rows)
            {
                if (System.IO.File.Exists(row["Bild2"].ToString()))
                {
                   row["Bild"].Image = new Bitmap(row["Bild2"].ToString());
                }
            }

das funktioniert so natürlich nicht, schon klar. ich bin ja auch auf der suche nach einer lösung wie es funktioniert 😉

row["Bild"].Image = new Bitmap(row["Bild2"].ToString()); geht halt nicht da es ein object darstellt und dies kein .Image bereitstellt.

hoffe ich konnte ungefähr darstellen was das problem ist und was ich versuche umzusetzen.

wenn noch fragen sind, immer her damit.

F
10.010 Beiträge seit 2004
vor 12 Jahren

Da hast du aber etwas massiv falsch verstanden.
In eine DataTable trägt man kein Control ein, sondern Daten.
Und das gebundene DGV muss dann in der Spalte eben eine DataGridViewImageColumn haben.
Und wie die Daten dann aussehen müssen steht in der Hilfe.

S
166 Beiträge seit 2009
vor 12 Jahren

Du kannst die Datatable mit einem DataColumn vom Datentyp Byte Array erstellen.

Bindest du die Datatable dann an das DataGridView wird dafür automatisch ein entsprechender Column Typ verwendet.


            string picturePath = "bilder/bild.jpg";

            DataTable dataTable = new DataTable();

            DataColumn dcArNr = new DataColumn("Artikelnummer", typeof(string));
            DataColumn dcBild2 = new DataColumn("Bildpfad", typeof(string));
            DataColumn dcBild = new DataColumn("Bild", typeof(Byte[]));

            dataTable.Columns.Add(dcArNr);
            dataTable.Columns.Add(dcBild2);
            dataTable.Columns.Add(dcBild);
                       
            DataRow row = dataTable.NewRow();
            row.SetField<string>(dcArNr, "123456");
            row.SetField<string>(dcBild2, picturePath);

            // in der datatable muss das Bild dann als Byte Array vorliegen
            // z.B. so
            MemoryStream m = new MemoryStream();
            Image.FromFile(picturePath).Save(m, System.Drawing.Imaging.ImageFormat.Jpeg);
            row.SetField<Byte[]>(dcBild, m.ToArray());
  
            dataTable.Rows.Add(row);

            dataGridView.DataSource = dataTable;
D
daSnoop Themenstarter:in
43 Beiträge seit 2010
vor 12 Jahren

FZelle: DataGridViewImageColumn ist super danke!!!