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

VB.NET Discussion :

Export vers Excel -contrôle Gridview


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Par défaut Export vers Excel -contrôle Gridview
    Bonsoir à tous.

    J'essaie d'exporter des données vers excel. Les données d'un gridview qui se trouve bien dans ma page aspx entouré des balises <form></form>.

    Malgré tout j'ai cette erreur qui revient:

    "Le contrôle 'GridView1' de type 'GridView' doit être placé dans une balise form avec runat=server."
    Je ne pense pas que l'erreur vienne du code-behind, mais quelque chose m'échappe tout de même.

    Je précise que je suis en VB.NET

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ben le message d'erreur est clair, il faut que la balise <form> ait un attribut runat="server"...

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Par défaut
    Il me paraît évident que la balise form a cet attribut !!
    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
     
        <form id="form1" runat="server">
        <div>
     
             <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1">
            </asp:GridView>
     
            <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
            </asp:DropDownList>
    &nbsp;<asp:DropDownList ID="DropDownList2" runat="server" style="margin-left: 168px">
            </asp:DropDownList>
     
            <asp:Button ID="btn_export" runat="server" style="margin-left: 465px" 
                Text="Export" />
     
        </div>
        </form>
    Autres pistes?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    fais voir le code d'export qui provoque l'erreur

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2006
    Messages : 103
    Par défaut
    C'est le code du tuto qui se trouve ici
    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
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            ' 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 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 = ""
     
            ' 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 extrait le contenu du DataGrid dans l'HtmlTextWriter
            monDG.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()
     
     
        End Sub

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 14
    Par défaut
    Bonjour, je remonte le sujet car j'ai le même problème et je ne comprends pas le message d'erreur.

    Voici la méthode développée qui est intégrée à un CustomGridView :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    public void ExporterVersExcel(string pNomFichier, bool pPourTelechargement)
    		{
    			StringWriter l_FluxRender = new StringWriter();
    			HtmlTextWriter l_Fluxhtml = new HtmlTextWriter(l_FluxRender);
     
    			//on passe par un gridview intermédiaire pour éviter plantage
    			GridView l_DataGridRetour = new GridView(); 
    			l_DataGridRetour.AutoGenerateColumns = false;
     
    			foreach (DataControlField dcf in this.Columns)
    			{
    				l_DataGridRetour.Columns.Add(dcf);
    			}
    			l_DataGridRetour.DataSourceID = this.DataSourceID;
    			this.Controls.Add(l_DataGridRetour);
    			l_DataGridRetour.DataBind();
     
    			l_DataGridRetour.RenderControl(l_Fluxhtml);
     
    			Context.Response.Clear();
    			Context.Response.Charset = "";
     
    			//reponse de type excel
    			Context.Response.ContentType = "application/vnd.ms-excel";
    			Context.Response.ContentEncoding = System.Text.Encoding.Default;
     
    			if (pPourTelechargement)
    			{
    				Page.Response.AppendHeader("Content-Disposition", "attachment; filename=\""
    						+ pNomFichier + "\"");
    			}
    			else
    			{
    				Page.Response.AppendHeader("Content-Disposition", "inline; filename=\""
    						+ pNomFichier + "\"");
     
    			}
     
    			//le render
    			Context.Response.Write(l_FluxRender.ToString());
    			Context.Response.End();
     
    		}
    Merci

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 14
    Par défaut
    Bon j'ai trouvé une solution !

    j'ai ajouté à behind:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public override void VerifyRenderingInServerForm(Control control)
        {
     
            // Confirms that an HtmlForm control is rendered for the
            specified ASP.NET server control at run time.
     
        }
    Source : http://geekswithblogs.net/azamsharp/.../21/63843.aspx

    Par contre je trouve cette solution étonnante! Si quelqu'un peux m'expliquer à quoi sert cette méthode, je suis preneur.

    L'overrider afin de ne pas executer la base n'a-t-il pas d'autres effets de bord?

    Merci

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par julien29 Voir le message
    Par contre je trouve cette solution étonnante! Si quelqu'un peux m'expliquer à quoi sert cette méthode, je suis preneur.

    L'overrider afin de ne pas executer la base n'a-t-il pas d'autres effets de bord?
    http://msdn.microsoft.com/fr-fr/libr...erverform.aspx

    A mon avis tu devrais overrider le comportement par défaut seulement pour le contrôle qui te pose problème, histoire d'éviter les effets de bord. Pour les autres, appelle l'implémentation de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        public override void VerifyRenderingInServerForm(Control control)
        {
             if (control.Name = "GridView1")
             {
             }
             else
             {
                 base.VerifyRenderingInServerForm(control);
             }
     
        }

  9. #9
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut
    Essaye de mettre la balise form dans le div pour voir

  10. #10
    Membre confirmé
    Femme Profil pro
    Elève Ingénieur à l'ENSIAS
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Elève Ingénieur à l'ENSIAS

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Bonjour,
    Je suis désolée je remonte un sujet apparemment résolu. J'ai bien lu et relu, testé et retenté tout ce qui a été suggéré dans la discussion, mais en vain. j'ai toujours la même erreur du type :

    Le contrôle 'GridView1' de type 'GridView' doit être placé dans une balise form avec runat=server.
    J'ai besoin d'exporter des données d'un GridView vers excel, j'ai essayé avec le code suivant :

    Citation Envoyé par Plexi86 Voir le message
    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
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            ' 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 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 = ""
     
            ' 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 extrait le contenu du DataGrid dans l'HtmlTextWriter
            monDG.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()
     
     
        End Sub
    Mais ça me donne cette erreur

    Le contrôle 'GridView1' de type 'GridView' doit être placé dans une balise form avec runat=server.
    C'est bizarre parce que mon GridView, il se trouve en fait dans une balise form avec runat=server
    Voilà le code de la page .aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <body>
     
        <div>
        <form id="form1" runat="server">
            <asp:GridView ID="GridView1" runat="server">
            </asp:GridView>
         <asp:Button ID="BtnWord" runat="server" Text="Word Export" />
        </form>
        </div>
     
    </body>
    Et lorsque j'ai fait comme cité si-dessus, lorsque j'ajoute ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
     
            ' Ensure that the control is nested in a server form.
            If Not (Page Is Nothing) Then
                Page.VerifyRenderingInServerForm(Me)
            End If
     
            MyBase.Render(writer)
     
        End Sub
    On me donne l'erreur suivante :

    Le contrôle '__Page' de type 'export_aspx' doit être placé dans une balise form avec runat=server.
    Je comprends plus quoi faire :s

    Merci d'avance pour votre aide précieuse

  11. #11
    Membre éclairé Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Par défaut
    Hello,

    A aucun moment tu n'override la fonction VerifyRenderingInServerForm, alors que cela semble être la solution adéquat. Rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public override void VerifyRenderingInServerForm(Control control)
        {
             if (control.Name = "GridView1")
             {
             }
             else
             {
                 base.VerifyRenderingInServerForm(control);
             }
     
        }
    dans ton code VB, ca devrait fonctionner.

    Cordialement.

    DeWaRs

  12. #12
    Membre confirmé
    Femme Profil pro
    Elève Ingénieur à l'ENSIAS
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Elève Ingénieur à l'ENSIAS

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Re,

    Merci Beaucoup DeWars, après avoir rajouté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
     
     
            If (control.ID = "GridView1") Then
     
            Else
     
                MyBase.VerifyRenderingInServerForm(control)
            End If
        End Sub
    ça a fonctionné parfaitement sans erreur

    Sauf que le fichier que j'obtient après l’exécution de ce code, il est en extension .aspx ! cette page s'ouvre par défaut dans visual studio. Comment faire pour obtenir à la fin un fichier dont l'extension est .xls ?

  13. #13
    Membre confirmé
    Femme Profil pro
    Elève Ingénieur à l'ENSIAS
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Elève Ingénieur à l'ENSIAS

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Re,

    Enfin ! maintenant j'obtiens un fichier .xls j'ai seulement ajouté cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Response.AddHeader("content-disposition", "attachment;filename=report.xls")
    Merci à tous

  14. #14
    Membre confirmé
    Femme Profil pro
    Elève Ingénieur à l'ENSIAS
    Inscrit en
    Février 2013
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Elève Ingénieur à l'ENSIAS

    Informations forums :
    Inscription : Février 2013
    Messages : 66
    Par défaut
    Me voilà encore une fois :s
    Cette fois ci l'export vers excel fonctionne parfaitement si le controle est un GridView avec AllowSorting=False
    Maintenant j'ai fait de sorte que le clique sur les colonnes implique le trie du gridView. quand je passe à l'export, voilà la nouvelle erreur quand me donne :

    Le contrôle 'GridView1_ctl01_ctl00' de type 'DataControlLinkButton' doit être placé dans une balise form avec runat=server.
    Déja je comprends pas d'ou ça sort ce suffixe après GridView1,
    'GridView1_ctl01_ctl00'
    Quelqu'un pourrait il m'aider svp ?
    Merci pour votre aide précieuse

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

Discussions similaires

  1. UpdatePanel, GridView et export vers Excel
    Par Devilbilly dans le forum ASP.NET
    Réponses: 6
    Dernier message: 07/02/2008, 12h12
  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