2009-04-03 13 views
0

Ich habe ein GridView, das einige programmatische Template-Felder auf Page_Load und auf jedem PostBack hinzugefügt hat (weil diese Felder aus irgendeinem Grund ihren Wert auf PostBack verlieren).GridView mit ITemplate-Feldern Export nach Excel

Es funktionierte gut, so dass ich nicht mehr über das PostBack Problem nachdachte.

Jetzt versuche ich, diese GridView nach Excel zu exportieren. Ich verwende den folgenden Code:

protected void ExportToExcel_Click(object sender, EventArgs e) 
{ 
    string attachment = "attachment; filename=ExcelFile.xls"; 
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", attachment); 
    Response.ContentType = "application/vnd.xls"; 
    Response.Charset = "utf-8"; 
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1250"); 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 

    // Create a form to contain the grid 
    HtmlForm frm = new HtmlForm(); 
    this.gridValores.Parent.Controls.Add(frm); 
    frm.Attributes["runat"] = "server"; 
    frm.Controls.Add(this.gridView); 
    frm.RenderControl(htw); 
    Response.Write(sw.ToString()); 
    Response.End(); 
} 

Das Problem ist, dass alle Spalten in der Excel-Datei mit Ausnahme der Vorlage Felder wiedergegeben werden, die leer gelassen werden.

Ich denke, dass das Problem damit zusammenhängt, dass die Template-Felder ihre Werte auf jedem PostBack verlieren. Ich habe danach gesucht und festgestellt, dass diese dynamischen Felder auf Page_Init und nicht auf Page_Load hinzugefügt werden sollten. Ich bin mir nicht sicher, ob das stimmt, trotzdem muss ich diese Felder basierend auf Informationen erstellen, die ich durch HttpRequest erhalte, die nicht in Init enthalten sind, wenn ich mich nicht irre.

Kann mir jemand dabei helfen?

Antwort

0

Ich habe viele Leute mit Problemen wie diesem gefunden, aber sehr wenige Antworten, die mir helfen könnten.

Bis diese: http://forums.asp.net/p/1229438/2216336.aspx#2216336

Das ist wirklich mein Problem lösen kann. Ich habe ein paar Tests gemacht und es funktioniert. Es ist ihm gelungen, die Vorlagenfelder im Cache zu speichern und sie auf Page_Load wiederherzustellen. Klug.

Wenn jemand eine bessere Lösung findet, bitte posten Sie es hier. Es kann sehr nützlich für andere Entwickler sein, die ihre Köpfe an die Wand hämmern.

+0

Sie sollten Ihre Vorlage Felder auf Init (Override oder Event) erstellen. Die Anfrage ist an diesem Punkt verfügbar und alle Steuerelemente haben ihren Status beibehalten. Keine Notwendigkeit, etwas zwischenzuspeichern. – Ruslan