2008-10-02 4 views
9

Je dois créer des rapports dans une application Windows C# .NET. J'ai une base de données SQL Server 2005, Visual Studio 2005 et je suis tout à fait OK avec la création de procédures stockées et de jeux de données.Utilisation de Crystal Reports dans Visual Studio 2005 (application Windows C# .NET)

Quelqu'un peut-il me diriger dans la bonne direction pour la création de rapports? Je n'arrive pas à me débrouiller. Quelques exemples seraient un bon début, ou un didacticiel simple ... tout ce qui est vraiment mieux expliqué que les documents MSDN. J'utilise le contrôle CrystalDecisions.Windows.Forms.CrystalReportViewer pour afficher les rapports, je présume que c'est correct.

Si je suis sur le point de me lancer dans une longue et complexe aventure, quel est le moyen le plus simple de créer et d'afficher des rapports qui peuvent également être imprimés?

Répondre

4

J'ai réussi à faire ce travail maintenant.

Bref aperçu

Il fonctionne en ayant une « classe de données », qui est juste une classe ordinaire C# contenant des variables et pas de code. Ceci est ensuite instancié et rempli de données, puis placé dans une ArrayList. ArrayList est lié à l'afficheur du rapport, avec le nom du rapport à charger. Dans le concepteur de rapport, les objets .Net sont utilisés plutôt que de communiquer avec la base de données.

Explication

J'ai créé une classe pour contenir les données de mon rapport. Cette classe est remplie manuellement par moi en récupérant manuellement les données de la base de données.Comment vous faites cela n'a pas d'importance, mais voici un exemple:

DataSet ds = GeneratePickingNoteDataSet(id); 
foreach (DataRow row in ds.Tables[0].Rows) { 
    CPickingNoteData pickingNoteData = new CPickingNoteData(); 

    pickingNoteData.delivery_date = (DateTime)row["delivery_date"]; 
    pickingNoteData.cust_po = (int)row["CustomerPONumber"]; 
    pickingNoteData.address = row["CustomerAddress"].ToString(); 
    // ... and so on ... 

    rptData.Add(pickingNoteData); 
} 

La classe est ensuite mis à l'intérieur d'un ArrayList. Chaque élément de l'arborescence correspond à une «ligne» dans le rapport final.

Le premier élément de la liste peut également contenir les données d'en-tête de rapport, et le dernier élément de la liste peut contenir les données de pied de rapport. Et parce que c'est un ArrayList, un accès normal Array peut être utilisé pour les atteindre:

((CPickingNoteData)rptData[0]).header_date = DateTime.Now; 
((CPickingNoteData)rptData[rptData.Count-1]).footer_serial = GenerateSerialNumber(); 

Une fois que vous avez une pleine arraylist des données, se lient à votre visionneuse de rapport comme celui-ci, où « rptData » est de type 'ArrayList'

ReportDocument reportDoc = new ReportDocument(); 
reportDoc.Load(reportPath); 
reportDoc.SetDataSource(rptData); 
crystalReportViewer.ReportSource = reportDoc; 

Maintenant, vous devrez lier votre classe de données au rapport lui-même. Vous le faites à l'intérieur du concepteur:

  1. Ouvrez l'onglet Explorateur de champs (qui pourrait être sous le menu « View »), et cliquez droit sur « base de données Les champs »
  2. Cliquez sur « Project Data »
  3. Cliquez sur » objets .NET
  4. Faites défiler la liste pour trouver votre classe de données (si elle est pas là, compiler votre application)
  5. Appuyez sur « >> », puis sur OK
  6. Vous pouvez maintenant faites glisser les membres de la classe sur le rapport et les organiser comme que vous voulez.
+0

J'ai trouvé un moyen encore mieux, plus simple ... http://arcanecode.com/2009/02/09/using-a-local-reporting-services-2008-report-with-an-adonet-data- set/# commentaire-27511 – Piku

3

Crystal est une option possible pour créer des rapports. Cela fait longtemps et beaucoup de gens semblent aimer ça.

Vous voudrez peut-être jeter un coup d'œil aux services de génération de rapports SQL. J'ai utilisé les deux, mais ma préférence est les services de reporting SQL. C'est assez bien intégré dans le studio et fonctionne comme les autres projets de Microsoft. Il est également libre avec la sql express, etc.

Ceci est un bon article sur les services de rapports de début: http://www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-1/

+1

Et qu'est-ce que cela a à voir avec les rapports Crystal autres que vous ne le préférez pas? – rball

1

Je deuxième recommandation de alex pour examiner les services de rapports sql - si vous avez une licence de développeur SQL, vous probablement ont déjà des services de rapports

je n'aime pas les rapports de cristal, trop fastidieux dans le concepteur (expressions d'édition tout le temps) trop de problèmes serveur de déploiement (vérifier les fichiers de licence!)

1

J'utilise cristal . Je vais décrire brièvement ma méthode, mais sachez que je suis un homme et que cela ne se traduira peut-être pas dans votre environnement. Commencez par créer un formulaire avec un CR Viewer. Puis:

1) Déterminez les données dont vous avez besoin et créez une vue qui récupère les colonnes souhaitées. 2) Créez un nouveau rapport Crystal à l'aide de l'assistant en indiquant votre source comme source de données. 3) Glissez, déposez, insérez, effacez, et quoi que ce soit pour donner forme à votre rapport. Oui, c'est fastidieux. 4) Créez le clic de bouton nécessaire ou autre, et créez la fonction dans laquelle générer le rapport. 5) Récupérez les données dans un DataTable (probablement dans un DataSet). Vous n'êtes pas obligé d'utiliser la vue. 6) Créez l'objet de rapport. Définir le DataTable pour être le DataSource. Affectez l'objet de rapport à la visionneuse CR. C'est une partie pour laquelle il y a des exemples.

Commentaires:

Si vous perdez la fenêtre avec les champs de base de données, etc (Explorateur de champs), aller à la vue/Structure du document. (C'est mon fantasme d'avoir Bill Gates sur scène et de lui demander de le trouver.)

La raison de la configuration de la vue est que si vous voulez ajouter une colonne, vous modifiez la vue, et l'Explorateur de champs mettre à jour automatiquement. J'ai eu toutes sortes de difficultés à le faire d'autres façons. Cette méthode est également une solution de contournement pour un bogue qui nécessite une analyse à travers toutes les tables en réinitialisant la table vers laquelle ils pointent. Vous voulez donner à Crystal une seule table. Vous ne voulez pas essayer de faire en sorte que Crystal rejoigne les tables, etc. Je ne dis pas que ça ne marche pas; Je dis que c'est plus difficile.

Il existe (ou existait) de la documentation sur l'implémentation VS de Crystal sur le site Web de Business Objects, mais je crois qu'elle a disparu derrière un écran de connexion/connexion. (Je pourrais supporter plus d'informations sur moi-même.)

J'ai eu du mal à obtenir des sauts de page quand je le souhaite, et pas de sauts de page quand je ne veux pas, etc. C'est loin d'être le meilleur rédacteur de rapports I J'ai toujours utilisé et je ne comprends pas pourquoi il semble avoir mis tant d'autres à la faillite. De plus, leurs politiques d'octroi de licences sont très difficiles à gérer dans une petite organisation fluide.

Edité pour ajouter par exemple:

AcctStatement oRpt = new AcctStatement() ; 
oRpt.Database.Tables[0].SetDataSource(dsRpt.Tables[0]); 
oRpt.SetParameterValue("plan_title",sPlanName) ; 
crViewer.ReportSource = oRpt ; 
2

Vous pouvez utiliser le visualiseur de rapports avec des rapports côté client intégré dans vs.net (contrôle ReportBuilder/ReportViewer). Vous pouvez créer des rapports de la même manière que vous le faites pour les services de reporting SQL, sauf que vous n'avez pas besoin de SQL Server (ni asp.net). De plus, vous avez un contrôle complet sur eux (comment vous présentez, comment vous collectez des données, dans quelle couche ils sont générés, ce que vous faites avec eux après la génération, comme les envoyer, les envoyer à ftp, etc.). Vous pouvez également exporter en PDF et Excel.

Et dans votre cas, la création d'un rapport à partir des données et de la saisie par l'utilisateur peut être très utile car vous pouvez créer votre propre source de données et vos propres données au fur et à mesure. Une fois que vos données sont prêtes à être signalées, liez-les à votre rapport.

Les rapports peuvent être facilement créés dans Visual Studio 2005 (Ajouter un rapport à votre projet) et être affichés dans une application Winforms à l'aide du contrôle ReportViewer.

Voici un excellent livre que je recommande à tout le monde de regarder si vous êtes intéressé par les rapports côté client. Il donne beaucoup de bonnes informations et de nombreux scénarios différents et des façons d'utiliser les rapports côté client.

http://www.apress.com/book/view/9781590598542

0

Je recommande fortement d'essayer une solution de déclaration de remplacement - J'ai beaucoup d'expérience avec Crystal, et ont réussi à faire des choses funky avec en .Net, mais tout à fait honnêtement l'intégration de Crystal et .Net est un cochon absolu pour tout sauf les cas les plus simples.

0

J'ai essayé RS. Je convertis de RS en Crystal. RS est juste trop lourd et lent (ou quelque chose). Il n'y a aucune raison de devoir attendre 30 secondes pour qu'un rapport soit rendu RS lorsque Crystal le fait en moins d'une seconde.

Questions connexes