Crystal Reports Viewer mit MVC3
Baue ich eine ASP.NET MVC3 Webanwendung und ich bauen will einige Berichte mit crystal-Reports-Berichte und anzeigen mit crystal reports viewer.
Ich durchsuchte das web und ich habe auch keinen festen Weg, es zu tun in einem MVC3-web-Anwendung.
Haben Sie irgendwelche Tipps/Ideen, wie es zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nichts dagegen haben einige Hacker ist es eigentlich ziemlich einfach. (Vorausgesetzt, CR4VS2010)
Zunächst ein WebForms-Seite zu Ihrem Projekt und fügen Sie das crystal reports viewer-Steuerelement, um es.
Überprüfen, ob es Hinzugefügt Verweise auf:
CrystalDescisions.CrystalReports.Engine
,CrystalDescisions.ReportSource
,CrystalDescisions.Shared
,und
CrystalDescisions.Web
.Dann fügen Sie eine PageRoute zu Ihrer Anwendung führt zu der neu hinzugefügten Seite.
Schließlich, und das war der größte Schmerz, die LEERE, die Sie brauchen, um Crystal Image-Handler arbeiten. Es gibt viele vermeintliche Wege, die beide rund um die net und hier bei SO, keiner von Ihnen wirklich für mich gearbeitet, so dass ich Zuflucht zu Betrug:
Fügen Sie eine route zu diesem controller als /CrystalReportsImageHandler.aspx, dies ist, wo CR erwartet handler zu werden. Dies kann auch verwendet werden in Gebieten, ändern Sie einfach die handler und Seite Strecken, wie gebraucht.
Bear in Verstand, Sie werden nicht in der Lage zu verwenden Ihren Rasierer-layouts. Also müssen Sie zu anderen Mitteln greifen, um visuelle Kontinuität. (Ich habe IFrames)
In unseren Projekten sind wir der Rückkehr den Bericht direkt im PDF-format. Wir chosed, um nicht beide WebForms und MVC in das gleiche Projekt vor allem, weil der keepping die codebase sauber.
Die Berichte generiert werden, die gegen eine "dumme" Datensatz manuell erstellt und mit Daten gefüllt, die von einem service-Klasse, die retreive alle notwendigen Informationen über NHibernate (denn wir arbeiten mit einer Schicht von ORM Persistenz und DB-Abstraktion, die Crystal-Reports-berichten dürfen nicht direkt auf die Datenbank).
Wenn Ihr Projekt nicht die Notwendigkeit zeigen, den Bericht im browser als "Vorschau-Modus", hier ist der Brauch ActionResult, dass ich schrieb, für diese Art von situation:
Da crystal-Reports-Bericht ist ein server-Steuerelement, wir brauchen eine Webseite/usercontrol, um den Bericht anzuzeigen. Und niemals diese webform/Benutzer control-innen-Ansichten-Ordner in mvc, Sie kaputt zu bekommen buttons mit 404 in CrViewer. Sie können auch ein Iframe-Element in einer razor-Ansicht, um den Bericht anzuzeigen. Folgende ist ein funktionierendes Modell[VS2010], gehen Sie bitte durch.
Schritt-1: Setup-Crystal-Reports-Bericht
1. Erstellen top-level-Ordner in der website root-Verzeichnis.
2. Setzen Sie Ihre Crystal Reports-Bericht.die rpt-Datei in diesem Ordner
3. Fügen Sie eine web-Seite (.aspx) in diesem Ordner. Diese Seite dient als Berichts-viewer-Seite. Fügen Sie ein CrystalReportViewer-Steuerelement auf dieser Seite.
Folgenden assembly-Registrierung Hinzugefügt werden oben auf der aspx-Seite.
<%@ Register Assembly="CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %>
Überprüfen Sie die version der CrystalReportViewer. Für diese, wählen Sie "Elemente wählen" aus der Toolbox auf VS Sidebar. Vergleichen Sie diese version mit CrystalDecisions.Web-version der aspx-Seite. Wenn beide gleich sind, lassen Sie es, sonst ändern die Montage der Registrierung-version, gleichen wie von CRViewer.
Ins web gehen.config-Datei unter website-root-Ordner, und überprüfen Sie die Baugruppen, beginnend mit 'CrystalDecisions' unter tag. Ändern Sie Ihre Versionen gleiche wie der CrystalReportViewer-Version (hier Version=13.0.2000.0).
Schritt 2: einrichten des Controllers, der Aktion & Anzeigen
1. Fügen Sie eine neue Aktion im report-controller-Klasse.
2. Schreiben notwendigen Schritte zum laden von Daten aus der Datenbank/Dateien.
3. Legen Sie die Daten in die Session.
4. Fügen Sie keine Sicht für diese Aktion. Verwenden Sie stattdessen Antwort.Redirect-Methode.
Seite hinzufügen load-Ereignis der .aspx-Seite.
Schritt 3: Wenig hack in der Globalen.asax
1. Um zu vermeiden, "der Sitzungsstatus geschaffen hat, wird eine session-id, kann aber nicht speichern, weil die Antwort bereits geleert wurde, die von der Anwendung." - Fehler oder ein "leere crystal-Reports-Bericht, Seite Ausgabe," fügen Sie folgenden code in Global.asax.
Rufen Sie nun die reportView () - Aktion in ReportController zur Anzeige von Crystal-Reports-Bericht.
Habt einen schönen Tag!