Problème export excel et update panel

Signaler
Messages postés
53
Date d'inscription
mercredi 14 septembre 2005
Statut
Membre
Dernière intervention
9 novembre 2007
-
gabiset
Messages postés
53
Date d'inscription
mercredi 14 septembre 2005
Statut
Membre
Dernière intervention
9 novembre 2007
-
Bonjour,

J'ai un gridview que je souhaite exporter sous Excel. Mon code fonctionnait très bien jusqu'à ce que j'ajoute un UpdatePanel autour de mon gridview. Il y a apparemment un problème de compatibilité...



Voici le code de mon export Excel :



    Protected Sub ExportExcel(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)


        Try
            ' On efface les éventuelles données déjà dans la mémoire tampon
            Response.Clear()
            ' On place tout ce qui est destiné au client dans la mémoire tampon
            Response.Buffer = True
            ' On conserve les accents
            Response.ContentEncoding = System.Text.Encoding.UTF7
            ' On définit le type d'informations renvoyée, ici des données au format Excel
            Response.ContentType = "application/vnd.ms-excel"
            ' On efface le jeu de caractères actuellement défini
            Response.Charset = ""
            EnableViewState = False
            ' On instancie deux objets qui vont nous permettre de récupérer les données du DataGrid :
            ' le StringWriter et l'HtmlTextWriter
            Dim monStringWriter As StringWriter = New StringWriter
            Dim monHtmlTextWriter As HtmlTextWriter = New HtmlTextWriter(monStringWriter)
            ' On récupère le titre du tableau
            monStringWriter.Write(LabelTitre.Text.ToString())
            monStringWriter.Write("

")
            ' On extrait le contenu du GridView dans l'HtmlTextWriter
            GridViewResult.RenderControl(monHtmlTextWriter)
            ' On copie le contenu extrait dans la mémoire tampon
            Response.Write(monStringWriter.ToString())
            ' On ferme "le flux" de données et envoie les données au client
            Response.End()
        Catch ex As Exception
        End Try
    End Sub

En fait, j'ai aussi dans mon code :

Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
        ' Needed for Export Excel on GridViewResult.RenderControl(monHtmlTextWriter)
        ' Confirms that an HtmlForm control is rendered for the specified ASP.NET server control at run time
    End Sub

J'ai trouvé cette solution sur les forums sinon j'avais le message d'erreur suivant :
"Control 'GridViewResult' of type 'GridView' must be placed inside a form tag with runat=server."
alors qu'il est bien dans un tag avec runat="server"...



Voici le message d'erreur que j'obtiens lorsque je clique pour obtenir mon export :


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 '2253+AHw-updatePanel'.

et en debug, ça plante sur la ligne GridViewResult.RenderControl(monHtmlTextWriter)
et j'obtiens le message :
"RegisterForEventValidation can only be called during Render();"

Quelqu'un saurait-il comment résoudre ce problème ?

Merci pour votre aide.

Delphine

3 réponses

Messages postés
53
Date d'inscription
mercredi 14 septembre 2005
Statut
Membre
Dernière intervention
9 novembre 2007
1
Bonjour à tous,

Je crois que je vous ai un peu effrayés avec mon post très long ;-)

Il faut finalement retenir que l'erreur que je rencontre quand je fais un Gridview.RenderControl() est la suivnate :
"RegisterForEventValidation can only be called during Render();"

Quelqu'un sait-il comment résoudre cette erreur ? Je ne comprends pas ce qu'elle signifie...

Merci pour votre aide.

Delphine
Messages postés
1
Date d'inscription
jeudi 8 février 2007
Statut
Membre
Dernière intervention
9 novembre 2007

Salut Delphine,

Ajoute ce code:
EnableEventValidation="false"
dans l'entête de ta page aspx, par là :
(<%@ Page Language="VB" MasterPageFile="~/Blabla.master"
AutoEventWireup="false" CodeFile="Blabla.aspx.vb" EnableEventValidation="false"
Inherits="Blabla" title="BLABLA" StylesheetTheme="ControlsTheme" %>)

Ensuite, dans le Page_Init ou Page_Load, enregistre ton bouton qui appele la fonction d'export auprès de ton ScriptManager :

Me.ScriptManager1.RegisterPostBackControl(Me.btnGridExp)

Comme ca, tu peux laisser la propriété EnablePartialRendering de ton ScriptManager à sa valeur par défaut (True)
Messages postés
53
Date d'inscription
mercredi 14 septembre 2005
Statut
Membre
Dernière intervention
9 novembre 2007
1
C'est génial, ça marche !!! Mille mercis !!!

Mais je n'ai pas vraiment compris ce qui le bloquait. Si tu as deux minutes, pourrais-tu éventuellement m'expliquer la solution que tu m'as apportée ?

Merci encore !

Delphine