Hinzufügen eines Bildes zu einer DataTable
Erstelle ich eine DataTable zur Laufzeit. Mein Ziel ist es, ein Bild einfügen in die Datentabelle, um letztlich in einem GridView angezeigt. Die Antwort HIER sah vielversprechend aus, aber ich kopieren und klebte es in VS und es funktioniert einfach nicht. Von "funktioniert nicht" meine ich, dass, wenn ich gehen, um die Anzeige der DataTable in eine GridView, in der Zelle, sollte das Bild enthalten enthält einfach die Zeichenfolge "System.Byte[]"
Hier ist eine sehr verkürzte version der Bau und die Bevölkerung des DataTable:
DataTable dt = new DataTable();
DataColumn imagecol = new DataColumn();
dt.Columns.Add(imagecol);
DataRow newrow;
for (int x = 0, x < 10; x++)
{
newrow = dt.NewRow();
newrow[imagecol] = *********
dt.Add(newrow);
}
Den * Teil ist, wo ich versagt.
Ich nie verwenden .aspx Felder des GridView-Steuerelements (ImageField, TemplateField, etc.), also ich bin auf der Suche nach Lösungen, die erfordern nicht Bearbeiten die .aspx-code oder "Vorbereitung" des GridView-Steuerelements für eine DataTable mit bestimmten Spalten. Lassen Sie mich die Antwort, bevor jemand fragt. Meine Gründe dafür sind:
A) ich immer nur gelernt, wie man ein GridView aus programmatisch erstellten DataTable.
B) ich mag es nicht, dass, wenn ich ändern möchten, meine Felder, irgendwann muss ich machen das Bearbeiten an ZWEI stellen anstatt nur einer.
C) Alle anderen Seiten der Anwendung verwenden Sie diesen Stil, so dass ich es behalten wollen konsistente.
So was hab ich versucht?
DataColumn imagecol = new DataColumn();
imagecol.DataType = System.Type.GetType("System.Byte[]");
//...
newrow[amountcol] = ReadImage(Server.MapPath("~/images/dashboard/myvacstatus-ampm.png"), new string[] { ".png" });
(die ReadImage Funktion konvertiert ein Bild in ein byte-array)
ERGEBNIS: das Feld, in das GridView-Steuerelement zeigt den text "System.Byte[]".
DataColumn imagecol = new DataColumn();
//...
newrow[amountcol] = ResolveUrl("~/images/dashboard/myvacstatus-ampm.png");
ERGEBNIS: das Feld, in das GridView-Steuerelement zeigt den text "/images/dashboard/myvacstatus-ampm.png"
DataColumn imagecol = new DataColumn();
//...
Image timeImg = new Image();
timeImg.ImageUrl = "/images/dashboard/myvacstatus-ampm.png"
newrow[amountcol] = timeImg;
ERGEBNIS: das Feld, in das GridView-Steuerelement zeigt den text "System.Web.UI.WebControls.Bild"
Meine Letzte Voraussetzung ist, dass das Feld dies geht, muss die Flexibilität haben, ein Bild sein, ODER ein string. Um dies in Perspektive/sehen, was ich versuche zu tun, das ist für ein Ferien-management-system. Ferien sind in der Regel im halb-Tag oder ganze Tage. Wir haben Symbole für beide. Aber bei Gelegenheit einen Urlaub kann letzten X Anzahl der Stunden. Also in dem Fall, dass es genau einen halben Tag, diese Zeile muss das Bild für einen halben Tag. Wenn es ein voller Tag, dass diese Zeile muss das Bild für volle Tage. Wenn die Zeit ist weder genau die Hälfte noch voll, an Stelle des Bildes, die wir benötigen, um die Anzahl der Stunden als text.
Eine mögliche Lösung, die ich denken, arbeiten, ist das setzen der Stunden von einem Urlaub in einer versteckten Spalte, dann auf dem RowDataBound-Ereignis, verwenden Sie den verborgenen Wert von Stunden erstellen die notwendigen Bild oder text, und dann sagen, wie:
e.Row.Cells[3].Controls.Add(myImage);
Ich weiß nicht, wie diese, weil es spaltet, meinen code wieder, ich muss immer nur wissen, was die Zellen-index, etc. Ich wirklich nur wollen, zu halten, alles enthielt mein BuildDataTable Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeiten: Komplette rewite der Antwort nach re-Lektüre die Frage stellen.
Stand:
Wenn Sie möchten, verwenden Sie nur
AutoGenerateColumns="false"
dann denke ich nicht, dass Sie werde in der Lage sein zu zeigen Sie ein Bild in die GridView.Um zu zeigen, ein Bild, das gerendert wird die Seite für ein Bild-tag. Kein Weg, um zu bekommen, es sei denn, Sie starten hantieren mit CSS data-urls.
Für Ihre Anforderungen das klingt schrecklich kompliziert und es funktioniert nicht in allen Browsern sowieso.
Bild zu zeigen, ich denke, Sie müssen manuell setup die
GridView
. Hier ist ein komplettes Beispiel, dass Sie als Ausgangspunkt verwenden (müssen Sie passen Sie die Bild-urls für Ihr Projekt):In der aspx-Datei:
Code-behind-Datei: