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.

InformationsquelleAutor CptSupermrkt | 2012-07-04
Schreibe einen Kommentar