Bonjour à tous,
J'ai actuellement un problème avec l'export d'un gridview vers Excel
Je crois avoir plus ou moins cerné le problème mais je n'arrive pas à trouver un moyen de le régler....
Je suis actuellement sur un projet ou je dois permettre l'attribution de matériel (PC, PDA, Carte SIM, Divers) à des employés.
Dans un premier temps je laisse à l'utilisateur le soin de retrouver l'employé à qui il veut attribué un ou plusieurs matériels puis une fois cela fait, j'affiche 3 Gridview avec le matériel en stock.
Je souhaiterai permettre à l'utilisateur d'exporter le contenu de chaque gridview vers Excel et c'est là que ça se complique....
J'utilise
Sur ma page, j'ai un bouton sur lequel l'utilisateur peut cliqué et qui renvoi vers la fonction d'export vers Excel mais dès que l'on clique dessus, j'ai le message d'erreur suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 string Filename = "Matériel.xls"; Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=" + Filename); Response.Charset = ""; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "application/vnd.xls"; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); this.GridView1.RenderControl(htmlWrite); Response.Write("<strong>Liste des PC et PDA actuellement disponibles</strong><br/><br/>"); Response.Write(stringWrite.ToString()); Response.End();
"Sys.WebForms.PageRequestManagerParserErrorException: The Message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.
Details: Error parsing near '<strong> Liste de tou'."
J'ai fouillé un peu le problème qu'il peut y avoir avec les UpdatePanel et les Response.Write() et il semble que mon problème vienne de là.
D'après ce que j'ai pu comprendre, lors du PostBack (à l'appuie sur le bouton d'export) les données du Response.Write interfèree avec le reste du PostBack du UpdatePanel et ça bloque tous et visiblement, j'ai pas trouvé quelqu'un ayant une technique pour contourner le problème.
Dans mon cas je ne vois pas comment l'utilisation d'unpourrait me sortir de là donc j'ai pensé utilisé un popup dans lequel je lance le télchargement du fichier Excel directement dans le Page_Load mais là, nouveau problème, le popup s'ouvre, le téléchargement commence et le popup se referme aussi sec avant que mon code n'est eu le temps de faire son boulot....
Code : Sélectionner tout - Visualiser dans une fenêtre à part ScriptManager.RegisterStartupScript(....)
Le message d'alerte qui s'affiche est :
"Internet Explorer ne peut pas télécharger essaipop.aspx de localhost.
Internet Explorer n'a pas pu ouvrir ce site internet. Le site requis n'est pas disponible ou n'a pas pu être trouvé. Réessayer Ultérieurement"
Bon, déjà le fait qu'il essai de me faire télécharger essaipop.aspx au lieu de mon_fichier.xls c'est qu'il zappe un truc mais je comprends vraiment pas quoi....
Le code-behind de mon popup donne ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 public partial class essaipop : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { to_xls(); } public override void VerifyRenderingInServerForm(Control control) { // Confirms that an HtmlForm control is rendered for the specified ASP.NET server control at run time. } protected void to_xls() { GridView GridView1 = ((GridView)Session["mon_gridview"]); string Filename = "PC Actuellement Dispo.xls"; Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=" + Filename); Response.Charset = ""; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "application/vnd.xls"; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); GridView1.RenderControl(htmlWrite); Response.Write("<strong>Liste de tous les PC actuellement disponibles</strong><br/><br/>"); Response.Write(stringWrite.ToString()); Response.End(); } }
Des idées ? Merci d'avance pour l'aide qui pourrait m'être apportée
Partager