2009-05-19 10 views
6

Wie integriere ich ReportViewer in asp.net MVC-Projekt?Reportviewer Datenquelle in asp.net-mvc

Ich möchte Geschäftsobjekte von MVCProject.Model Namespace hinzufügen. ReportViewer ermöglicht Business-Objekte von DataSet.

Ist es möglich, andere Datenquellen wie LinqDataSource oder Objekte mit direktem Objekt zu LINQ-zu-SQL-Klassen auszuwählen?

Was wäre die beste Lösung zum Hinzufügen von Berichten in einem MVC-Projekt?

Antwort

1

Es wird hart werden. Zunächst benötigen Sie ViewState, sodass Sie den Bericht auf einer regulären WebForms-Seite hosten müssen. Dies ist jedoch nicht so schlimm - WebForms und MVC funktionieren gut nebeneinander.

Der schwierige Teil bindet sich an echte IEnumerable-Objekte und nicht an diese phoney-baloney ObjectDataSources.

Der erste Schritt besteht darin, ein Berichtsdatenmodell aufzubauen. Sie können dies im Code tun, mit Abfragen, was auch immer, wie Sie wollen. Eine Struktur, so etwas wie diese (aber offensichtlich größer viel) ist typisch:

public class ReportSource 
{ 
    public Floogle[] Floogles { get; set; } 
} 

public class Floogle 
{ 
    public Doodad[] Doodads { get; set; } 
    public string Text { get; set; } 
} 

public class Doodad 
{ 
    public int Number { get; set; } 
} 

Der Trick ist, eine Binding Kontrolle in Ihrem Bericht zu verwenden und die Datasource-Eigenschaft auf typeof(ReportSource) gesetzt - ja, ist die Datenquelle die Art Ihres Berichtsmodell.

Wenn Sie Ihren Bericht entwerfen, erhalten Sie nicht viel Reichtum, aber Sie werden es schaffen.

Soweit die Reporting-Lösungen von Drittanbietern gehen, haben wir festgestellt, dass Telerik die beste Option ist.

+0

Wo genau verwende ich diese BindingSource ?? – AndreMiranda

+0

Zuerst tut mir leid, dass Sie mit diesem schrecklichen Werkzeug arbeiten müssen. Die BindingSource ist ein "Steuerelement", das Sie auf die Designeroberfläche ziehen können. –

+0

MVC ist nicht für bindfähige Drag-and-Drop-Steuerelemente konzipiert.Sicher, Sie können sie mit MVC "hacken" (da MVC immer noch auf der gleichen Basis wie Webforms erstellt wird), aber es geht gegen das MVC-Paradigma, so dass es nicht empfohlen wird. Shirazs Antwort ist gut, wenn Sie bereits Berichte haben, die Sie mit MVC verwenden müssen. –

2

Eine alternative Möglichkeit besteht darin, den Bericht auf dem Berichtsserver zu erstellen und ihn dann als PDF an die mvc-App zu senden.

0

Ich habe ein kleines Projekt, das ich auf Codeplex warf, das ein MVC-Projekt mit einem Bericht ist.

http://mvctaskmanagement.codeplex.com/

Im Grunde genommen, da ich dev auf einem XP-Box zu tun, hatte meine Web-Formular in ein separates Projekt geschoben werden. Da ich ein Service-Layer-Projekt habe, steckte ich es dort hinein.

Von dort aus rufe ich meinen Bericht über einen Ajax-Post auf, der die Parameter auf die Berichtsseite übergibt, die sie dann an dieselbe Dienstschicht weitergibt, die für die Erstellung der Vorschau verwendet wurde.

Viel Glück!

2

Ich habe eine Idee, die nicht getestet wird, aber möglicherweise funktioniert. 1- Platzieren Sie das Berichts-Viewer-Steuerelement auf einer standardmäßigen ASP.Net-Webformularseite (z. B. ReportViewer.aspx). 2- Fügen Sie unter Ihrer MVC einen Iframe hinzu, der auf diese ReportViewer.aspx-Seite verweist oder Abfragezeichenfolgen

Lassen Sie mich wissen, ob das funktioniert

+0

Das ist meine derzeitige - schreckliche - Idee. Ich bin sicher, es würde funktionieren, aber ich hätte lieber etwas Eleganteres. – vbullinger

Verwandte Themen