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 :

Exporter un gridview en fichier excel


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Par défaut Exporter un gridview en fichier excel
    Bonjour,
    tout d'abord je tiens à préciser que j'ai trouvé des codes en C# et que j'ai réussi à en traduite la quasi totalité...
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    //
    // Code Behind
    //
     
    using System.Data.OleDb;
    using System.IO;
     
    public partial class Forms_WebImportExport : System.Web.UI.Page
    {
        public void fillGrid()
        {
            DataSet ds = new DataSet();
            ds.ReadXml(Server.MapPath("../xmlTest.xml"));
            GridView1.DataSource = ds;
            GridView1.DataBind();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {    
                fillGrid();
            }
        }
        protected void btImport_Click(object sender, EventArgs e)
        {
            string conn = ("Provider=Microsoft.Jet.OLEDB.4.0;" + ("Data Source=C:\\path\\test.xls;" + 
                          "Extended Properties=\"Excel 8.0;\"")); // or use instead of Excel 8.0 - Excel 5.0
            string SSQL = "SELECT name , dept, salary from [sheet1$]";
            OleDbDataAdapter oleDA = new OleDbDataAdapter(SSQL, conn); // here use oleDataReader
            DataSet ds = new DataSet();
            //oleDA.TableMappings.Add("Table","ExcelTest"); // Require
            oleDA.Fill(ds);
            GridView1.DataSource = ds.Tables[0].DefaultView; // or [ ds ]
            GridView1.DataBind();
        }
        protected void btExport_Click(object sender, EventArgs e)
        {
            ExportGridToExcel(GridView1, "myExcel");
        }
        public void ExportGridToExcel(GridView grdGridView, string fileName)
        {
            Response.Clear();
            Response.AddHeader("content-disposition",string.Format("attachment;filename={0}.xls",fileName));
            Response.Charset = "";
            Response.ContentType = "application/vnd.xls";
            StringWriter stringWrite = new StringWriter();
            HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
            GridView1.RenderControl(htmlWrite);
            Response.Write(stringWrite.ToString());
            Response.End();
        }
        public override void VerifyRenderingInServerForm(Control control)
        {
            /* method must be implemented when using RenderControl */
        }
    }
    Après avoir tout transformé en vb.net
    j'obtiens le code ci-après
    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
     
    Imports System.IO.StringWriter
    Imports System.Web.UI.HtmlTextWriter
    Partial Class bonDeCommande
        Inherits System.Web.UI.Page
     
     
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Response.Clear()
            Response.AddHeader("content-disposition", "attachment;filename=FileName.xls")
            Response.Charset = ""
     
     
            Response.ContentType = "application/vnd.xls"
            Dim stringwrite As New System.IO.StringWriter()
            Dim htmlWrite As New HtmlTextWriter(stringwrite)
            GridView1.RenderControl(htmlWrite)
            Response.Write(stringwrite.ToString())
            Response.End()
     
     
        End Sub
        Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
     
     
        End Sub
    End Class
    Le message d'erreur est le suivant : RegisterForEventValidation ne peut être appelé que pendant Render();

    Il semble irrésolvable...
    Merci pour vos réponses.
    Cordialement,
    Tid.

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 84
    Par défaut Aide
    Salut a toi !

    Moi aussi pour une applis, j'ai dû faire de l'export Excel et le code qui suit fonctionne correctement, mais j'utilise une DataGrid :

    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
    Response.Clear()
     
            Response.Buffer = True
     
            Response.ContentType = "application/vnd.ms-excel"
     
            Response.Charset = ""
     
            Dim monStringWriter As StringWriter = New StringWriter
            Dim monHTMLWriter As HtmlTextWriter = New HtmlTextWriter(monStringWriter)
     
            DataGrid1.RenderControl(monHTMLWriter)
     
            Response.Write(convertirEnUTF8(monStringWriter.ToString).ToUpper)
     
            Response.End()
    fonction convertirEnUTF8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim aOctets As Byte() = System.Text.Encoding.GetEncoding(1251).GetBytes(chaine)
            Return System.Text.Encoding.ASCII.GetString(aOctets).ToLowe
    Si ca peut t'aider...

    Tchô !

  3. #3
    Membre éclairé
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Par défaut
    Bonjour, merci pour ta réponse.
    Bon datagrid et gridview, même combat.

    Toujours le même problème après lancement de la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Erreur du serveur dans l'application '/Amicale'.
    --------------------------------------------------------------------------------
     
    RegisterForEventValidation ne peut être appelé que pendant Render();

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 84
    Par défaut
    Je viens de voir sur quelques forums que cette erreur est peut etre dû au fait que dans l'entete de la page *.aspx :
    la variable EnableEventValidation est par défaut a True.

    Essaie de le mettre a False, soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ Page EnableEventValidation="False" %>
    Je suis pas sûr du résultat mais qui ne risque rien, n'a rien.

  5. #5
    Membre éclairé
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Par défaut
    Salut,
    bien vu le message d'erreur Rouge disparait...
    Maintenant j'en ai un autre en Bleu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    La page XML ne peut pas être affichée 
    Impossible d'afficher l'entrée XML en utilisant la feuille de style XSL. Corrigez l'erreur, puis cliquez sur le bouton Actualiser ou réessayez ultérieurement. 
     
     
    --------------------------------------------------------------------------------
     
    Opération réussie. Erreur de traitement de la ressource http://localhost:3432/projet/bonDeCommande.aspx. Ligne 6, Positio...
     
       <TD>CARTE</TD><TD> </TD><TD> </TD><TD>&NBSP;</TD><TD>30,0000<...
    Bon, j'ai posté un peu rapidement...
    Après une petite demi heure de recherche j'ai constaté que ce problème était récurent à cause de l'utilisation de UTF 8 (pb de navigateur ou je ne sais quoi)
    Donc au lieu d'utiliser les fonctions avec les convertions UTF8 de stringman , j'ai repris ma fonction du début et en modifiant l'en-tête de la page !
    Résultat : ça marche!
    Merci à vous pour les réponses,
    @+
    [résolu]

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/04/2007, 18h57
  2. exporter contenu d'un fichier excel vers base mysql ?
    Par ouldfella dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/03/2007, 10h31
  3. Exporter contenu DBgrid vers fichier excel
    Par luluofmars dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/06/2006, 13h21
  4. Exporter données dans un fichier excel
    Par Kasanova75 dans le forum Oracle
    Réponses: 3
    Dernier message: 08/03/2006, 10h09

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