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.
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.
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;