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

Windows Forms Discussion :

Exporter GridView to Excel


Sujet :

Windows Forms

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut Exporter GridView to Excel
    Bonjour à tous,

    J'ai une DataTable dont je prends quelques lignes pour mettre dans un GridView:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            For i = 0 To Me.DsCollaborateurs.dtFormations.Rows.Count - 1
                If Not arrExist.Contains(Me.DsCollaborateurs.dtFormations.Rows(i).Item("id_calendrier") & Me.DsCollaborateurs.dtFormations.Rows(i).Item("mec")) Then
                    Me.gvFormationsFaites.Rows.Add(Me.DsCollaborateurs.dtFormations.Rows(i).Item("theme"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("stage"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("nom"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("duree"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("prix") + Me.DsCollaborateurs.dtFormations.Rows(i).Item("frais"), Format(Me.DsCollaborateurs.dtFormations.Rows(i).Item("date_debut"), "dd/MM/yyyy"))
                    arrExist(p) = Me.DsCollaborateurs.dtFormations.Rows(i).Item("id_calendrier") & Me.DsCollaborateurs.dtFormations.Rows(i).Item("mec")
                    p = p + 1
                End If
            Next
    je ne mets qu'une ligne par formation et donc j'ai plus de lignes dans la DataTable que dans mon GridView.

    Après je fais un export de ces donnés vers un fichier Excel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Me.saveFile.FileName = "Extraction des formations " & Format(Date.Today, "dd-MM-yyyy") & ".xls"
            Me.saveFile.ShowDialog()
            Dim _FileName As String = Me.saveFile.FileName
            Try
                Me.rptFormations1.ExportToDisk(ExportFormatType.ExcelRecord, _FileName)
            Catch ex As Exception
                MsgBox("Erreur d'enregistrement" & vbNewLine & ex.Message)
            End Try
    Mon problème est-ce que la base que j'utilise pour remplir mon report (ce qui je fais l'export) est ma DataTable, et je ne voudrais exporter que les lignes qui sont dans le GridView.

    Est-ce que quelqu'un sait comment faire pour n'exporter que les donnés presents dans le GridView?

    Merci d'avance pour votre aide...

  2. #2
    Membre habitué Avatar de LeCygne
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2010
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2010
    Messages : 91
    Points : 159
    Points
    159
    Par défaut Des precisions s'il vous plait
    Bonjour Marc_27

    J'ai très envie de vous aider, mais j'aimerais avoir quelques précisions.

    Citation Envoyé par Marc_27 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            For i = 0 To Me.DsCollaborateurs.dtFormations.Rows.Count - 1
                If Not arrExist.Contains(Me.DsCollaborateurs.dtFormations.Rows(i).Item("id_calendrier") & Me.DsCollaborateurs.dtFormations.Rows(i).Item("mec")) Then
                    Me.gvFormationsFaites.Rows.Add(Me.DsCollaborateurs.dtFormations.Rows(i).Item("theme"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("stage"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("nom"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("duree"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("prix") + Me.DsCollaborateurs.dtFormations.Rows(i).Item("frais"), Format(Me.DsCollaborateurs.dtFormations.Rows(i).Item("date_debut"), "dd/MM/yyyy"))
                    arrExist(p) = Me.DsCollaborateurs.dtFormations.Rows(i).Item("id_calendrier") & Me.DsCollaborateurs.dtFormations.Rows(i).Item("mec")
                    p = p + 1
                End If
            Next
    Vous parcourez la table "dtFormations" pour alimenter "gvFormationsFaites".

    Citation Envoyé par Marc_27 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Me.saveFile.FileName = "Extraction des formations " & Format(Date.Today, "dd-MM-yyyy") & ".xls"
            Me.saveFile.ShowDialog()
            Dim _FileName As String = Me.saveFile.FileName
            Try
                Me.rptFormations1.ExportToDisk(ExportFormatType.ExcelRecord, _FileName)
            Catch ex As Exception
                MsgBox("Erreur d'enregistrement" & vbNewLine & ex.Message)
            End Try
    Vous faites un export vers le disque au format "ExportFormatType.ExcelRecord" de "rptFormations1".

    1) Je me demande si "gvFormationsFaites" et "rptFormations1" ont quelque chose à voir l'un avec l'autre ?
    2) Quel est le type de exacte des variables "gvFormationsFaites" et "rptFormations1" ? Peut-on avoir leurs lignes de declaration s'il vous plait ?
    3) Quel est le resultat actuel de votre programme ?
    - Est-ce que vous obtenez un fichier ou non ?
    - Si "oui", ne contient-il aucune ligne, ou, au contraire, toutes les lignes de la table ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Bonjour LeCygne, merci de ta réponse.

    Hier soir j'ai reussi à le faire en changeant la requete qui alimente la table dtFormations (c'est qui est plus logique ) à fin de ne plus avoir les lignes qui je ne voudrais pas, et donc le tableau arrExist n'est plus necessaire et tous les donnés de la table doivent être exportés.

    Pour repondre à tes questions (tout en poseant une nouvelle )

    L'application marche correctement, j'arrive à faire l'export vers le fichier Excel.
    Le "gvFormationsFaites" est un DataGridView qui sert à voir les formations suivis par chaque fonctionaire: comme il y a plusieurs dates pour quelques formations, je ne prends que la première (je fais le controle avec le tableau arrExist). Il n'a aucunne Data Source.

    Cette à dire qui j'ai moins de donnés dans mon GridView que dans ma table dtFormations.

    Le rptFormations1 est un Crystal Reports qu'est actuelement alimenté par la même table dtFormations, et donc lorsque je fais l'export il prend tous les donnés presents, même ces qui ne sont pas dans le GridView.

    J'ai essayé d'effacer les lignes non utilisées dans le GridView:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Me.gvFormationsFaites.Rows.Clear()
    For i = 0 To Me.DsCollaborateurs.dtFormations.Rows.Count - 1
        If Not arrExist.Contains(Me.DsCollaborateurs.dtFormations.Rows(i).Item("id_calendrier") & Me.DsCollaborateurs.dtFormations.Rows(i).Item("mec")) Then
            Me.gvFormationsFaites.Rows.Add(Me.DsCollaborateurs.dtFormations.Rows(i).Item("theme"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("stage"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("nom"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("duree"), Me.DsCollaborateurs.dtFormations.Rows(i).Item("prix") + Me.DsCollaborateurs.dtFormations.Rows(i).Item("frais"), Format(Me.DsCollaborateurs.dtFormations.Rows(i).Item("date_debut"), "dd/MM/yyyy"))
            arrExist(p) = Me.DsCollaborateurs.dtFormations.Rows(i).Item("id_calendrier") & Me.DsCollaborateurs.dtFormations.Rows(i).Item("mec")
            p = p + 1
        Else
            Me.DsCollaborateurs.dtFormations.Rows.RemoveAt(i)
        End If
    Next
    Mais comme je fais une diminuition dans le nombre de lignes il BUG lorsque la boucle FOR arrive aux dernières lignes (qu'ont été effacées...)

    J'aimerais quand même savoir si c'est possible de faire cette dernière boucle FOR NEXT en effaceant quelques donnés, car je pense qui cette technique peut être utile...

    Merci encore une fois et bonné journée!

  4. #4
    Membre habitué Avatar de LeCygne
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2010
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2010
    Messages : 91
    Points : 159
    Points
    159
    Par défaut Mauvais acces a "arrExist"
    Effectivement, cette boucle plante, mais ce n'est pas pour les dernieres lignes, c'est des la première !
    En faite, c'est cette ligne la qui provoque l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    arrExist(p) = Me.DsCollaborateurs.dtFormations.Rows(i).Item("id_calendrier") & Me.DsCollaborateurs.dtFormations.Rows(i).Item("mec")
    Si j'ai bien compris, "arrExist" est un ArrayList qui vous sert à repertorier les lignes a afficher. Ce tableau est vide lors de l'entrée dans la boucle. Vous tentez d'acceder à une de ces lignes, qui n'existe pas. ("arrExist(0)" n'existe pas) et le programme plante. Il faut utiliser l'instruction "Add" à la place. Et vous n'avez même plus besoin de "p" finalement:

    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
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Dim dtFormations As DataTable = Me.DsCollaborateurs.dtFormations
            Dim drLigne As System.Data.DataRow
            ''//Dim p As Integer = 0
            Dim arrExist As ArrayList = New ArrayList()
            For i = 0 To dtFormations.Rows.Count - 1
                drLigne = dtFormations.Rows(i)
     
                If Not arrExist.Contains(drLigne.Item("id_calendrier") & drLigne.Item("mec")) Then
                    Me.gvFormationsFaites.Rows.Add(drLigne.Item("theme"), drLigne.Item("stage"), drLigne.Item("nom"), drLigne.Item("duree"), drLigne.Item("prix") + drLigne.Item("frais"), Format(drLigne.Item("date_debut"), "dd/MM/yyyy"))
                    arrExist.Add(dtFormations.Rows(i).Item("id_calendrier") & dtFormations.Rows(i).Item("mec"))
                    ''//arrExist(p) = dtFormations.Rows(i).Item("id_calendrier") & dtFormations.Rows(i).Item("mec")
                    ''//p = p + 1
                Else
                    dtFormations.Rows.RemoveAt(i)
                End If
     
            Next
     
        End Sub

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Effectivement l'add c'est meilleur, il evite la variable "p".

    Le tableau sert à controler si la formation été déjà dans le GridView.
    Mais le BUG c'est bien aux dernières lignes, le message dit index hors limite (je me rappele plus le message), et lorsque je mets le mouse sur la variable i (en debogage) il indique bien i=440, par exemple.

    C'est-à-dire que la boucle tourne bien jusqu'à la fin non?

    L'erreur est produit à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not arrExist.Contains(Me.DsCollaborateurs.dtFormations.Rows(i).Item("id_calendrier") & Me.DsCollaborateurs.dtFormations.Rows(i).Item("mec")) Then
    Je n'ai pas mis, mais je declare le tableau avant, avec la même quantité d'elements que ma table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim arrExist(Me.DsCollaborateurs.dtFormations.Rows.Count - 1) As String

  6. #6
    Membre habitué Avatar de LeCygne
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2010
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2010
    Messages : 91
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par Marc_27 Voir le message
    Effectivement l'add c'est meilleur, il evite la variable "p".
    Je ne comprends pas comment vous pouvez utiliser "Add", car cela ne fonctionne pas avec:

    Citation Envoyé par Marc_27 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim arrExist(Me.DsCollaborateurs.dtFormations.Rows.Count - 1) As String
    Je vous recommande plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim arrExist As ArrayList = New ArrayList()

    Citation Envoyé par Marc_27 Voir le message
    C'est-à-dire que la boucle tourne bien jusqu'à la fin non?
    Je ne sais pas, combien y a t-il de ligne dans votre table ?

    Citation Envoyé par Marc_27 Voir le message
    L'erreur est produit à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not arrExist.Contains(Me.DsCollaborateurs.dtFormations.Rows(i).Item("id_calendrier") & Me.DsCollaborateurs.dtFormations.Rows(i).Item("mec")) Then
    Effectivement, le seul index etant "i"...
    Mais la borne finale de votre compeur etant dynamique, cela vous mets justement à l'abri des indexes hors limites...

    Je ne vois pas.

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

Discussions similaires

  1. [Mise en page] Export Gridview vers Excel
    Par dai.kaioh dans le forum ASP.NET
    Réponses: 9
    Dernier message: 15/03/2008, 12h41
  2. Exporter gridview vers excel avec combobox
    Par Pedro Varela dans le forum ASP.NET
    Réponses: 3
    Dernier message: 07/03/2008, 17h49
  3. exporte gridview vers excel
    Par faysalm2000 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 21/02/2008, 12h17
  4. Long numérique et export Gridview en Excel
    Par pitbulle dans le forum ASP.NET
    Réponses: 4
    Dernier message: 17/09/2007, 19h37
  5. Export Gridview vers Excel
    Par dai.kaioh dans le forum ASP.NET
    Réponses: 5
    Dernier message: 29/11/2006, 17h09

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