J'ai un GridView qui a des champs de Template par programme ajoutés sur Page_Load et sur chaque PostBack (parce que, pour une raison quelconque, ces champs perdent leur valeur sur PostBack).GridView avec des champs ITemplate exporter vers Excel
Cela a bien fonctionné, donc je n'ai plus pensé au problème de PostBack.
Maintenant, j'essaie d'exporter ce GridView vers Excel. J'utilise le code suivant:
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();
}
Le problème est que toutes les colonnes sont rendus dans le fichier Excel à l'exception des champs de modèles, qui sont laissés en blanc.
Je pense que le problème est lié au fait que les champs Template perdent leurs valeurs sur chaque PostBack. J'ai recherché à ce sujet et trouvé des gens disant que ces champs dynamiques devraient être ajoutés sur Page_Init, pas sur Page_Load. Je ne suis pas sûr que ce soit vrai, néanmoins j'ai besoin de créer ces champs basés sur les informations que je reçois à travers HttpRequest, qui n'est pas là sur Init, si je ne me trompe pas.
Quelqu'un peut-il m'aider dans ce domaine?
Vous devez créer vos champs de modèle sur Init (override ou event). La demande est disponible à ce moment et tous les contrôles auront leur état préservé. Pas besoin de mettre en cache quoi que ce soit. – Ruslan