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 :

Alimenter état crystal report


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut Alimenter état crystal report
    Bonsoir,

    J’ai un souci concernant l’affichage des données d’un datagridview dans un état crystal report sous VS2008.

    Sur form1, j’ai un datagridview dont la datasource s’effectue via une class qui renvoie un dataset. Sur cette même form, un bouton qui doit me permettre d’afficher form2 dans laquelle se trouve un crystalreportviewer qui doit afficher les mêmes données que celles du datagridview de form1.

    Voici la partie du code du bouton qui doit alimenter le crystalreportviewer de Form2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim ds As New DataSet
    Dim cr As New CrystalReport1
     
    ds = MaClass.MaPropriété(MesParamètres).Tables(("Matable")
     
    cr.SetDataSource(ds)
    Form2.CrystalReportViewer1.ReportSource = cr
    Le dataset qui alimente ds est le même qui celui qui me permet de remplir le datagridview. Or si je n’ai aucun problème pour afficher mes données dans le datagridview, j’ai un message d’erreur avec ds :

    Une valeur de type 'System.Data.Datatable' ne peut pas être convertie en 'System.Data.Dataset'
    Pouvez-vous m’éclairer ?
    Merci de votre aide

  2. #2
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Le message d'erreur me semble clair.

    Tu essaie de convertir un objet de type DataTable en un objet de type DataSet.

    Donc y a un problème.

    Pour être précis, le problème se trouve ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ds = MaClass.MaPropriété(MesParamètres).Tables(("Matable")
    ds est de type DataSet et à priori, sans connaître ta classe, je dirais que la méthode Tables renvoie un objet de type DataTable. Donc voilà quoi.

    Maintenant, je peux tout à fait me tromper. Je ne suis pas encore un expert dans avec tous ces objets.
    Kropernic

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Bonjour,

    d'abord merci de m'avoir répondu.

    Oui le message d'erreur est très clair et c'est précisément ce que je ne cerne pas car j'ai tout déclaré en dataset. Donc pourquoi me renvoyé une datatable ?

    Sinon j'ai testé en déclarant ds en datatable et j'ai un autre message d'erreur :
    'Le rapport ne contient aucune table'
    Sur cette ligne :
    Or c'est toujours les mêmes données que le datagridview de form1 qui elles s'affichent bien !!!

    Mais j'ai une question 'annexe' : est-il possible de créer un état crystal report sans passer par un xsd ? Est-il possible de tout faire en code (regroupement, tri, formules, agencement...) ?
    Merci de votre aide

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Pourrais-tu donner le code de la classe que tu utilises ?

    Sinon pour ta question annexe. Je présume que cela doit bien être possible mais je ne pourrais pas te dire comment.
    Kropernic

  5. #5
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    est-il possible de créer un état crystal report sans passer par un xsd ? Est-il possible de tout faire en code (regroupement, tri, formules, agencement...) ?
    Oui il est possible d'utiliser une autre source de données en dehors du DataSet mais c'est fortement déconseillé
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  6. #6
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Re,

    @ griftou : je poste le code un peu plus tard, je n'ai pas mon appli sous les yeux.

    @ lilroma : je me suis mal fait comprendre. L'idée n'est pas de ne pas passer par un dataset mais que l'état crystal report ne fasse plus directement référence à un .xsd qui aurait été conçu 'en dur'. D'où le sens de ma question qui peut être reformulée : peut-on tout faire en code ?

    Mais là, je ne trouve pas grand chose sur la toile.
    Merci de votre aide

  7. #7
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    que l'état crystal report ne fasse plus directement référence à un .xsd qui aurait été conçu 'en dur'.

    le .xsd c'est l'extension du fichier Dataset je suppose que tu veut parler du .rpt dans ce cas je dirais non.
    Si tu veut tout coder a la main plus besoin de crystal report tu peut mettre sur pied ton propre gestionnaire de reporting mais c'est une taches assez fastidieuse il y'a des tutos la dessus.
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  8. #8
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Bonsoir,

    Concernant le pb de datatable/dataset, c’est résolu.

    Par contre, pour répondre à lilroma, je ne parlais pas du .rpt mais bien du .xsd. Je m’explique.

    Je ne veux pas créer un nouveau dataset avec le designer, dataset qui me sert de datasource du datagridview de form1 ET par la suite à alimenter le crystalreportviewer de la form2.

    Pour le datagridview, pas de problème, mais pour le crystalreportviewer de la form2, en passant comme ça, 2 problèmes :
    - je ne parviens pas à alimenter le crystalreportviewer de la form2 alors que le code de mon 1er post me semble correct (à moins que...).
    - comment organiser le .rpt (regroupement, tri... comme on fait en fait avec l’assistant de création de rapport) sans avoir créer de dataset avec le designer ?
    Merci de votre aide

  9. #9
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    je ne parviens pas à alimenter le crystalreportviewer de la form2 alors que le code de mon 1er post me semble correct (à moins que...).
    Poste le code

    comment organiser le .rpt (regroupement, tri... comme on fait en fait avec l’assistant de création de rapport) sans avoir créer de dataset avec le designer ?
    Les regroupement et tri... seront effectuer sur des données de BD et il faut en priori définir les colonnes qui vont être utiliser et c'est le dataset qui fournie ces colonnes donc création du dataset obligé .
    Sauf si tu veut t'en passer tu directement créer ta commande SQL au niveau de l'assistant et l'utiliser.
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  10. #10
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Bonjour,

    Le code était en haut de la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim ds As New DataSet
    Dim cr As New CrystalReport1
     
    ds = MaClass.MaPropriété(MesParamètres).Tables(("Matable")
     
    cr.SetDataSource(ds)
    Form2.CrystalReportViewer1.ReportSource = cr

    création du dataset obligé
    Mais c’est le cas dans le code ci-dessus. Est-on obligé de le définir une 2ème fois via le designer ?

    si tu veut t'en passer tu directement créer ta commande SQL au niveau de l'assistant et l'utiliser
    J’ai suivi ce tuto : http://fablain.developpez.com/tutoriel/crystal-report/ mais une question. Puisque ma commande SQL est déjà créée via la class, est-ce que je dois à nouveau là aussi la reconstruire une 2ème fois ?
    Merci de votre aide

  11. #11
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Mais c’est le cas dans le code ci-dessus. Est-on obligé de le définir une 2ème fois via le designer ?
    A priori non faut juste t'arranger pour que ton Dataset retourne les éléments qui on été définie sur le rapport.

    Puisque ma commande SQL est déjà créée via la class, est-ce que je dois à nouveau là aussi la reconstruire une 2ème fois ?
    en fait lors de la création du rapport tu doit définir la commande SQL et ensuite tu peu modifier par le code et utiliser celle ta Classe faut seulement que l'instruction sql retourne les même colonnes que la précédente
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  12. #12
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Re,

    pourrais-tu faire un exemple sur ces 2 points stp parce que ce que tu me donnes comme piste est ce que je cherche à faire depuis le début mais je ne trouve pas de tutos (ou ne les comprend pas bien) correspondant à mon objectif.

    Encore merci de t'intéresser à mon pb.
    Merci de votre aide

  13. #13
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    oK je vais voir ce que je faire pour t'aider
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  14. #14
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Bonjour,

    je reviens vers vous parce que je tourne en rond. J'ai pourtant l'impression que c'est réalisable par code exclusivement.

    Si vous aviez une piste, ça m'arrangerait vraiment.
    Merci de votre aide

  15. #15
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    1er cas : Utilisation d'un dataset autre que celui créer via le designer
    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
     
            Dim Report As New ReportDocument
            Dim Dataset1 As New DataSet 'Déclaration de nouveau dataset
            Dim Conn As New SqlClient.SqlConnection("Ma chaine de connexion")
            Dim Dadap As New SqlClient.SqlDataAdapter("Select * from Matable", Conn)
          'ici on charge le rapport
            Report.Load("....\Mon_etat.rpt")
            Try
                'ici on charge le dataset
                Dadap.Fill(Dataset1, "Ma table")
                'On modifie la source de données
                Report.SetDataSource(Dataset1)
                'cas d'une impression direct avec l'imprimante par défaut
                Report.PrintToPrinter(Nbcopie, False, 0, 0)
                'cas de la visualistaion dans le reportview
                CrvEta.ReportSource = Report
            Catch ex As Exception
                MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK)
            End Try
    Voila un code qui marche tu n'a puis qu'a l'adapter a ton cas

    2eme cas : Modification de formule de sélection par code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    report.RecordSelectionFormula = "Formule de selection"
    N'oublie pas d'importer les namespaces

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CrystalDecisions.Shared
    CrystalDecisions.Windows.Forms
    CrystalDecisions.CrystalReports.Engine
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  16. #16
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Bonsoir,

    Je connaissais la façon de procéder du 1er cas et ça ne convient pas (déclaration d'un 2ème adaptater alors que j'en ai déjà déclaré un dans la class).

    Je regarde plus en détail le 2ème cas et vous dit quoi.
    Merci de votre aide

  17. #17
    Responsable .NET

    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Points : 252 372
    Points
    252 372
    Billets dans le blog
    121
    Par défaut
    Beuh je ne voie ou est le problème ta question étais de savoir comment utiliser un autre dataset en dehors de celui définie via le designer, je n'ai fait que répondre a cette question la je te donne une procédure ci tu a une classe avec ces variables déjà définie tu insérer cette procédure juste dans la classe et tu utilise les variables qui on été définie comme global aux procédures et fonctions de la classe.
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

  18. #18
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Bonsoir,

    c'est bon, enfin trouvé. Merci à Lilroma pour ton aide.
    Merci de votre aide

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

Discussions similaires

  1. Convertir un montant en lettre dans un état Crystal reports
    Par gopal dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 10/05/2006, 13h33
  2. [VB]Source de données d'un état crystal report
    Par sabfix dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 11/04/2006, 10h29
  3. plusieurs courbes sur un graphe dans état crystal report
    Par anneso108 dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 27/03/2006, 09h58
  4. Aperçu et impression d'un état Crystal Reports 11 dans VB6
    Par badseyar dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/09/2005, 15h25
  5. Flash lors de l'appel d'un état Crystal report 7
    Par IADJOFOGUE dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 12/05/2005, 11h10

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