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?
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