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 :

Création de reports


Sujet :

VB.NET

  1. #1
    Membre averti
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Par défaut Création de reports
    Bonjour

    J'ai un site internet en asp.net VB qui me permet de générer un report à partir d'une liste dans une gridview.
    Je souhaite pouvoir générer automatiquement tous les rapports en cliquant sur un bouton.

    J'ai fait u bout de code, mais il ne m'affiche que le dernier rapport.

    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
     
    Protected Sub BtCR_Click(sender As Object, e As EventArgs) Handles BtCR.Click
            Dim paramiduser As Integer
            Dim paramidmad As Integer = 0
            Dim rrrr As Integer
            rrrr = GridView1.Rows.Count()
     
            For rrrr = 0 To rrrr - 1
                paramidmad = GridView1.DataKeys(rrrr).Values(0)
                paramiduser = Convert.ToInt32(GridView1.Rows(0).Cells(6).Text)
                Dim Param1 As New ReportParameter
                Dim Param2 As New ReportParameter
                Param1.Name = "idmad"
                Param2.Name = "iduser"
                Param1.Values.Add(paramidmad)
                Param2.Values.Add(paramiduser)
                ReportViewer1.LocalReport.SetParameters(New ReportParameter() {Param1})
                ReportViewer1.LocalReport.SetParameters(New ReportParameter() {Param2})
                ReportViewer1.DataBind()
                ReportViewer1.LocalReport.Refresh()
            Next
        End Sub
    Si vous avez une idée de ce qui ne va pas...
    Merci

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Pas très beau tout ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim rrrr As Integer
            rrrr = GridView1.Rows.Count()
     
            For rrrr = 0 To rrrr - 1

    tu mets le rows.count, puis 0 dans rrrr... pas trop de sens
    De plus tu utilises rrrr comme compteur ET comme borne...

    Il faudrait plutôt un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim MaxIndex As Integer = GridView1.Rows.Count() -1
           Dim Index as Integer
     
            For Index = 0 To MaxIndex

    Ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Index as Integer = 0 To GridView1.Rows.Count()- 1

  3. #3
    Membre averti
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Par défaut
    Merci pour le commentaire, je débute alors je sais que mon code est un peu olé olé.
    De toute façon, je prend note et je corrige.

    Par contre, aurais-tu une suggestion pour le soucis qui n'affiche que le dernier report?
    On dirait que l'affichage ne se fait que lorsqu'il a terminé la "fonction".

    Merci beaucoup

  4. #4
    Membre expérimenté
    Homme Profil pro
    Developpeur
    Inscrit en
    Février 2013
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Février 2013
    Messages : 180
    Par défaut
    quand tu clique sur ton bouton, tu attribut des paramètres à UN objet report donc évidement si tu change ce même report il sera écrasé
    la solution est de crée un objet report pour chaque graphique que tu veux afficher, ainsi en changeant les paramètres du deuxième tu ne changera pas le premier

    tu es bien avec VS Professionnel ?

    et petit conseil regarde les convention de nommage pour tes variables
    même si tu n'en voit pas l'utilité maintenant, plus tard ça t'évitera de mettre à la poubelle t'es bout de code

    Cordialement,

  5. #5
    Membre averti
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Par défaut
    Bonjour

    Je vais faire un effort pour mieux nommer mes variables.

    Est ce que tu peux me dire comment je peux faire pour créer chaque report dans un objet différent?

    Merci

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2012
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 80
    Par défaut
    Tu fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim myReport as new ReportViewer
    à chaque tour de boucle.



    Par contre, tu a besoin de revoir un peu de POO (pour ton cas, création d'instance de class)

  7. #7
    Membre averti
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Par défaut
    Bonjour

    Je suis désolé mais je n'y arrive pas. c'est toujours le dernier report qui s'affiche.
    Mon but est que entre chaque rapport l'utilisateur clic pour passer au suivant.
    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
    Protected Sub BtCR_Click(sender As Object, e As EventArgs) Handles BtCR.Click
            Dim ParamIduser As Integer
            Dim ParamIdmad As Integer = 0
            Dim NbLigne As Integer = GridView1.Rows.Count()
            Dim Ligne As Integer
     
            For Ligne = 0 To NbLigne - 1
     
                ParamIdmad = GridView1.DataKeys(NbLigne).Values(0)
                ParamIduser = Convert.ToInt32(GridView1.Rows(0).Cells(6).Text)
                Dim Param1 As New ReportParameter
                Dim Param2 As New ReportParameter
                Param1.Name = "idmad"
                Param2.Name = "iduser"
                Param1.Values.Add(ParamIdmad)
                Param2.Values.Add(ParamIduser)
                ReportViewer1.LocalReport.SetParameters(New ReportParameter() {Param1})
                ReportViewer1.LocalReport.SetParameters(New ReportParameter() {Param2})
                ReportViewer1.DataBind()
                ReportViewer1.LocalReport.Refresh()
     
                Dim message As String = "Report suivant?"
                Dim sb As New System.Text.StringBuilder()
                sb.Append("return confirm('")
                sb.Append(message)
                sb.Append("');")
                ClientScript.RegisterOnSubmitStatement(Me.GetType(), "alert", sb.ToString())
            Next
        End Sub

  8. #8
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Reprends ton algorithme sur papier et regarde ce que tu fais...
    Avoir la réponse ne te servirai à rien si ce n'est avancer jusqu'au prochain point où tu buteras forcement si tu n'as pas réussi à faire ça.

    Si on lit ton algo :

    1) Quand l'utilisateur clique (évènement), tu fais une boucle de la première à la dernière ligne,
    2) A chaque fois que tu fais un tour de boucle, tu écrases ton report avec celui de la ligne suivante
    3) Et à la fin, il termine forcement par le dernier, puisque tu boucles jusqu'à la dernière ligne

    Ou vois tu ici, le fait que tu passes d'une ligne à la suivante ? Nul part, tu boucles sur la totalité... tu te rends bien compte qu'il y a un problème ?
    Donc c'est pas ça du tout...

    Quand l'utilisateur clique, il faut :

    1) sélectionner la ligne suivante de ton GridView
    2) récupérer les identifiant de la ligne sélectionnée (donc cherche comment savoir sur quelle ligne tu te trouves)
    3) avec ces identifiant tu peux enfin générer 1 report

  9. #9
    Membre averti
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Par défaut
    Je suis d'accord avec toi, et c'est le raisonnement que j'ai essayé d'avoir.
    Je me disait, il faut qu’après le:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReportViewer1.LocalReport.Refresh()
    je sorte de la boucle pour que le report s'affiche dans le reportviewer, mais après comment je retourne dans la boucle?

    Mais je n'y suis pas arrivé, mais bon je recommence et je te tiens au courant.

    @ bientôt.

  10. #10
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Alors :

    1) Il faut que quand tu cliques tu sélectionnes la lignes suivante, fait déjà ça. (cherche comment sélectionner un élément d'un GridView)

    2) il faut rajouter un IF, pour savoir si tu es sur l'éléments que tu souhaites.
    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      If me.GridView(Ligne).selected = True Then
    3) la, dans le IF, tu mets ton code qui génère ton reports
    3) toujours dans le if, tu peux faire un

    et voilà ! Tu affiches ce que tu veux.

    Et tu retourneras dans la boucle, Seulement quand l'utilisateur cliquera de nouveau sur le bouton.
    Essai de modifier ton code pour coller avec ça et on continue

  11. #11
    Membre averti
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Par défaut
    Je viens juste de voir ton post et pendant ce temps j'ai fait ç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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    'Déclaration des variables
        Dim ParamIdmad As Integer = 0
        Dim ParamIduser As Integer = 0
        Dim Ligne As Integer = 0
        Dim NbLigne As Integer = 0
     
    'Action sur le bouton qui va démarrer la generation du premier report
    Protected Sub BtCR_Click(sender As Object, e As EventArgs) Handles BtCR.Click
            NbLigne = GridView1.Rows.Count()
            If NbLigne > 1 Then
                BtCR.Visible = False
                BtSuivant.Visible = True
            Else
            End If
            GetParamReport(Ligne)
            GenererRapport(ParamIdmad, ParamIduser)
        End Sub
     
    ' Permet d'obtenir les valeurs de mes 2 parametres à partir du gridview
        Protected Sub GetParamReport(Ligne As Integer)
            ParamIdmad = GridView1.DataKeys(Ligne).Values(0)
            ParamIduser = Convert.ToInt32(GridView1.Rows(Ligne).Cells(6).Text)
        End Sub
     
    'Action sur le deuxieme bouton qui permet de passer au rapport suivant (remplace le premier bouton tant qu'il reste des rapports à générer)
        Protected Sub BtSuivant_Click(sender As Object, e As EventArgs) Handles BtSuivant.Click
            NbLigne = GridView1.Rows.Count()
            Dim LigneN As Integer = Ligne + 1
            If LigneN = NbLigne - 1 Then
                BtCR.Visible = True
                BtSuivant.Visible = False
            Else
            End If
            GetParamReport(LigneN)
            GenererRapport(ParamIdmad, ParamIduser)
        End Sub
     
    'Génération du rapport
        Protected Sub GenererRapport(ParamIdmad As Integer, ParamIduser As Integer)
            Dim Param1 As New ReportParameter
            Dim Param2 As New ReportParameter
            Param1.Name = "idmad"
            Param2.Name = "iduser"
            Param1.Values.Add(ParamIdmad)
            Param2.Values.Add(ParamIduser)
            ReportViewer1.LocalReport.SetParameters(New ReportParameter() {Param1})
            ReportViewer1.LocalReport.SetParameters(New ReportParameter() {Param2})
            ReportViewer1.DataBind()
            ReportViewer1.LocalReport.Refresh()
        End Sub
    C'est pas tout à fait ce que tu préconises, dits moi ce que tu en penses.

    Maintenant, il faut que je génère le pdf de chaque rapport.

    Merci pour ton aide

  12. #12
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Ça commence a ressembler à quelque chose.

    Bon, déjà, pour que tu ne perdes pas de temps pour rien, sache que ca ne sert à rien de gérer la ligne en cours (Ligne) et le nombre de lignes (NBLigne). VB t'offre déjà ces informations.

    D'ailleurs dans le code que tu as mis, tu n'utilises jamais NBLigne, donc supprime tout ça.

    Ensuite, plutôt que de mémoriser la ligne en cours dans un Integer, trouve comment on peut savoir quelle ligne est sélectionner.
    Pour cela, tu as SelectedIndex : https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx

    Dans la doc on t'explique que cette porpriété retourne le numéro de ligne de la ligne sélectionné (retourne -1 si pas de ligne sélectionné)
    Et ça dit aussi que tu peux lui assigné une valeur... donc sélectionner une ligne par le code.

    Du coup, ca replace ce qu'il faut faire (une méthode, une chose à faire, mais bien!) :

    - GetParamReport fait son boulo
    - GenererRapport aussi

    BtCR_Click devrait juste générer le report de la ligne en cours, donc ca donnerai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Protected Sub BtCR_Click(sender As Object, e As EventArgs) Handles BtCR.Click
     
            Dim Ligne as integer = GridView.SelectedIndex
            If Ligne  > -1 Then
                   GetParamReport(Ligne)
                    GenererRapport(ParamIdmad, ParamIduser)
            EndIf
     
    End Sub
    Ensuite sur le bouton suivant, qui ne doit QUE changer la ligne en cours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Protected Sub BtSuivant_Click(sender As Object, e As EventArgs) Handles BtSuivant.Click
     
          Dim Ligne as integer = GridView.SelectedIndex
          If Ligne = -1 Then
                 GridView.SelectedIndex = 0
          ElseIf Ligne = GridView.Rows.Count Then
                 GridView.SelectedIndex = 0
          Else
                  GridView.SelectedIndex =  GridView.SelectedIndex +1
          EndIf
    End Sub
    Je n'ai pas tester ce code, il y a surement plein d'erreur, à toi de la reprendre et de le comprendre.
    Tu peux même faire le code du bouton précédent.

  13. #13
    Membre averti
    Inscrit en
    Octobre 2012
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 23
    Par défaut
    Bon voila ce que j'ai fait après tes conseils:
    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
     
    Protected Sub BtCR_Click(sender As Object, e As EventArgs) Handles BtCR.Click
     
            GestionClick()
            Dim Ligne As Integer = GridView1.SelectedIndex
            If Ligne = -1 Then
                Exit Sub
            End If
            GetParamReport(Ligne)
            GenererRapport(ParamIdmad, ParamIduser)
        End Sub
        Protected Sub GetParamReport(Ligne As Integer)
            ParamIdmad = GridView1.DataKeys(Ligne).Values(0)
            ParamIduser = Convert.ToInt32(GridView1.Rows(Ligne).Cells(6).Text)
        End Sub
     
        Protected Sub GestionClick()
            Dim Ligne As Integer = GridView1.SelectedIndex
            If Ligne = -1 Then
                GridView1.SelectedIndex = 0
                BtCR.Text = "Rapport suivant"
     
            ElseIf Ligne = GridView1.Rows.Count() - 1 Then
                GridView1.SelectedIndex = -1
                BtCR.Text = "Créer rapport"
            Else
                GridView1.SelectedIndex = GridView1.SelectedIndex + 1
            End If
        End Sub
        Protected Sub GenererRapport(ParamIdmad As Integer, ParamIduser As Integer)
            Dim Param1 As New ReportParameter
            Dim Param2 As New ReportParameter
            Param1.Name = "idmad"
            Param2.Name = "iduser"
            Param1.Values.Add(ParamIdmad)
            Param2.Values.Add(ParamIduser)
            ReportViewer1.LocalReport.SetParameters(New ReportParameter() {Param1})
            ReportViewer1.LocalReport.SetParameters(New ReportParameter() {Param2})
            ReportViewer1.DataBind()
            ReportViewer1.LocalReport.Refresh()
     
        End Sub
    merci pour ton aide.

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

Discussions similaires

  1. Création de report
    Par mhmdsw dans le forum iReport
    Réponses: 4
    Dernier message: 07/10/2013, 15h49
  2. [Toutes versions] Création de reportings avec Excel
    Par cnegal84 dans le forum Excel
    Réponses: 2
    Dernier message: 08/01/2013, 09h12
  3. Création de reports ".doc" en Java
    Par Cako19 dans le forum Documents
    Réponses: 1
    Dernier message: 16/11/2009, 10h36
  4. Création de Report PDF
    Par bidson dans le forum XMLRAD
    Réponses: 11
    Dernier message: 27/05/2004, 22h20
  5. [Rave Report] problème de création dynamique
    Par Nivux dans le forum Rave
    Réponses: 2
    Dernier message: 24/05/2003, 00h07

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