2009-04-03 10 views
0

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?

Répondre

0

J'ai trouvé beaucoup de gens avec des problèmes comme celui-ci, mais très peu de réponses qui pourraient m'aider.

Jusqu'à celui-ci: http://forums.asp.net/p/1229438/2216336.aspx#2216336

Cela peut vraiment résoudre mon problème. J'ai fait quelques tests et ça fonctionne. Il a réussi à enregistrer les champs de modèle dans le cache et les restaurer sur Page_Load. Intelligent.

Si quelqu'un trouve une meilleure solution, veuillez l'afficher ici. Cela peut être très utile pour d'autres développeurs qui se cognent la tête contre le mur.

+0

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