IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

UpdatePanel, GridView et export vers Excel


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut UpdatePanel, GridView et export vers Excel
    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
    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();
    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 :
    "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'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ScriptManager.RegisterStartupScript(....)
    pourrait 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....
    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

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Aucune idée ou je suis pas assez clair dans mes explications ?

  3. #3
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Par défaut
    Bonjour,
    Je ne sais pas si cela pourra vous aider mais voici ce que je fais pour afficher des données sous Excel (par contre, j'utilise un datagrid qui se nomme dgTraduc):

    private void Page_Load(object sender, System.EventArgs e)
    {
    string sSql = "nom select";
    DataSet dSet = Maclasse(sSql,maconnexion);
    dgTraduc.DataSource = dSet;
    dgTraduc.DataKeyField = "nom champ clef";
    dgTraduc.DataBind();

    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "application/vnd.ms-excel";
    Response.Charset = "";
    this.EnableViewState = false;
    StringWriter oSW = new StringWriter();
    HtmlTextWriter oHTW = new HtmlTextWriter(oSW);
    dgTraduc.RenderControl(oHTW);
    Response.Write(oSW.ToString());
    Response.End();
    }

    Cordialement.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Merci de ta réponse, ça ne résoud pas réellement mon problème puisqu'il est lié en fait à l'utilisation d'un UpdatePanel qui vient mettre le bordel dans les Response.Write....
    En fait sans le update panel ça fonctionne impec mais ça me recharge toute la page bien entendu... Finalement j'ai changé d'approche, je demande à l'utilisateur de remplir à formulaire avec ses différents critéres puis j'ouvre un popup avec le résultat et l'export sous Excel comme ça dans le popup pas de Update Panel pour m'ennuyer pis ça reste clean
    Par contre je suis vraiment curieux de savoir si on ne peut réellement pas utiliser de Response.Write dans un UpdatePanel sans passer par un ScriptManager.Register...

    Merci pour ta réponse

    J'ai trouvé la solution qui est d'ailleur assez bête, il suffit juste de placer le bouton qui appele la fonction d'export du gridview vers Excel en dehors du UpdatePanel.....

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 88
    Par défaut Bouton AutopostBack
    Bonjour,
    Ton bouton export est il dans la balise de l'UpdatePanel?

    si oui as tu essayé de le sortir

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 88
    Par défaut
    Desole pour le double post

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 12
    Par défaut
    Citation Envoyé par Devilbilly Voir le message
    J'ai trouvé la solution qui est d'ailleur assez bête, il suffit juste de placer le bouton qui appele la fonction d'export du gridview vers Excel en dehors du UpdatePanel.....
    Le problème est réglé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Export vers Excel -contrôle Gridview
    Par Plexi86 dans le forum VB.NET
    Réponses: 13
    Dernier message: 05/09/2013, 20h35
  2. Réponses: 1
    Dernier message: 22/09/2006, 11h19
  3. Export vers Excel et saut de ligne dans cellule
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h53
  4. [CR] Exportation vers Excel
    Par djamel64 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 01/12/2003, 14h52
  5. exportation vers excel
    Par Pm dans le forum XMLRAD
    Réponses: 3
    Dernier message: 24/01/2003, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo