Image's und DataTable's
-
Seid mir gegrüßt,
und zwar habe ich folgendes Problem....
Ich habe eine DataTable, dem ich mit
DataTable.Columns.Add("Bild", typeof(Image));
eine zusätzliche Spalte anhänge und dieser Spalte bilder aus eine ImageList zuweise.
Image NewImage = ImageList.Images["delete.png"]; for (int i = 0; i < DataTable.Rows.Count; i++) { DataTable.Rows[i].ItemArray.SetValue(NewImage, 0); }
Syntaktisch ist doch eigentlich alles richtig oder?
Trotzdem werden mir dann zur Laufzeit die ErsatzImages für fehlende Imagequellen angezeigt und die Zellen selber besitzen den Type "DBnull" anstatt "Bitmap", obwohl in meiner ImageListe auch das Bild "delete.png" vorhanden ist.Hat jemand von euch eine Idee warum?
-
Ja und ist die Imagespalte an Position 0 der Datatable?
-
witte schrieb:
Ja und ist die Imagespalte an Position 0 der Datatable?
Ja die Indexe stimmen schon, hier nochmal ein CodeBeispiel:
DataTable TestTable = new DataTable(); TestTable.Columns.Add("ID", typeof(int)); TestTable.Columns.Add("Bild", typeof(Image)); DataRow TestRow = TestTable.NewRow(); for (int i = 0; i < 5; i++) { TestRow["ID"] = i; TestTable.Rows.Add(TestRow); TestRow = TestTable.NewRow(); } for (int i = 0; i < TestTable.Rows.Count; i++) { TestTable.Rows[i].ItemArray.SetValue(imageList1.Images["Info.png"], 1); } dataGridView1.DataSource = TestTable;
Hm scheint so als könnte die Funktion SetValue keine Werte mit dem Typ Image übertragen... Sch*****
Obwohl die Syntax laut der DOkumentation:
public void SetValue(Object value,int index)
Image's zulassen müsste.
-
Also meine mehr oder weniger schöne Lösung.
Ein neues DataTable erzeugen und das Row für Row mit den Werten aus dem altem DataTable füllen und parallel die Image einbinden.
DataTable NewCommentTable = ConstructCommentTable(); for (int i = 0; i < commentTableConstruct.Rows.Count; i++) { DataRow NewRow = NewCommentTable.NewRow(); NewRow["guid"] = commentTableConstruct.Rows[i].ItemArray.GetValue(1).ToString(); NewRow["Title"] = commentTableConstruct.Rows[i].ItemArray.GetValue(2).ToString(); NewRow["By"] = commentTableConstruct.Rows[i].ItemArray.GetValue(3).ToString(); NewRow["At"] = commentTableConstruct.Rows[i].ItemArray.GetValue(4).ToString(); NewRow["Description"] = commentTableConstruct.Rows[i].ItemArray.GetValue(5).ToString(); if (Convert.ToBoolean(commentTableConstruct.Rows[i].ItemArray.GetValue(6).ToString()) == true) { Image NewImage = ImageList.Images["delete.png"]; NewImage.Tag = commentTableConstruct.Rows[i].ItemArray.GetValue(0).ToString(); NewRow["Deleteable"] = NewImage; NewImage = ImageList.Images["edit.png"]; NewImage.Tag = commentTableConstruct.Rows[i].ItemArray.GetValue(0).ToString(); NewRow["Editable"] = NewImage; } else { Image NewImage = ImageList.Images["nothing.png"]; NewImage.Tag = Guid.Empty.ToString(); commentTableConstruct.Rows[i].ItemArray.SetValue(NewImage, 7); commentTableConstruct.Rows[i].ItemArray.SetValue(NewImage, 8); } NewCommentTable.Rows.Add(NewRow); NewRow = NewCommentTable.NewRow(); } commentTableConstruct = NewCommentTable;
-
will jetzt nichts flasches sagen aber er will ja ein "wirklich existierendes" objekt also brauchste NEW ..
haut mich wenn ich grad bull laber
-
PRIEST schrieb:
will jetzt nichts flasches sagen aber er will ja ein "wirklich existierendes" objekt also brauchste NEW ..
haut mich wenn ich grad bull laber
Koerper.Arm.Hau()
Mit ConstructCommentTable wurde bereits eine DataTable mir New und einigen Spalten erzeugt.
-
ich rede vom image objekt