2009-05-19 15 views
6

ReportViewerをasp.net MVCプロジェクトに統合するにはどうすればよいですか?asp.net-mvcのReportviewerデータソース

MVCProject.Model名前空間のビジネスオブジェクトを追加したいとします。 ReportViewerは、DataSetのビジネスオブジェクトを許可します。

LinqDataSourceのような他のデータソースを選択することはできますか、LINQ-to-SQLクラスオブジェクトに直接オブジェクトを割り当てることはできますか?

MVCプロジェクトでレポートを追加する最適なソリューションは何ですか?

答えて

1

これは厳しいものです。まず、通常のWebFormsページでレポートをホストする必要があるように、ViewStateが必要です。 WebFormsとMVCはうまく連携して動作します。

難しい部分は、実際のIEnumerableオブジェクトにバインドされていて、それらのphoney-baloney ObjectDataSourceにバインドされていません。

最初のステップは、レポートデータモデルを構築することです。これはコード内で問合せを行うことができます。 - はい、データソースは、あなたのタイプである

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; } 
} 

トリックは、あなたのレポートでのBindingSourceコントロールを使用してtypeof(ReportSource)にDataSourceプロパティを設定することです。この(しかし、明らかにはるかに大きい)典型的であるような構造のものレポートモデル。

レポートを設計する際には、豊富なものを得ることはできませんが、できることはあります。

サードパーティのレポートソリューションが提供される限り、Telerik'sが最良の選択肢であることがわかりました。

+0

正確にはこのBindingSourceを使用しますか? – AndreMiranda

+0

まず、この恐ろしいツールを使用しなければならないとの申し訳ありません。 BindingSourceはデザイナーのサーフェスに「ドラッグ」できる「コントロール」です。 –

+0

MVCはドラッグアンドドロップバインド可能なコントロール用に設計されていません。確かに、MVCを使ってそれらを「ハックする」ことができます(MVCはまだWebフォームと同じベース上に構築されています)が、MVCのパラダイムに逆らっているので、推奨されません。あなたがMVCで使用する必要がある既存のレポートを持っているなら、Shirazの答えは良いです。 –

2

これを行うための別の方法は、PDFとしてMVCのアプリにそれをストリーミングする、その後、レポートサーバー上のレポートを生成することであろう。

0

私は報告書で、MVCプロジェクトであるCodePlexの上に投げた小さなプロジェクトを持っています。

http://mvctaskmanagement.codeplex.com/

私はXPボックスでDEVを行うので、基本的には、私のWebフォームは、別のプロジェクトにプッシュしなければなりませんでした。私はサービスレイヤーprojを持っているので、そこに貼り付けました。

そこから私は、プレビューを生成するのに使用したのと同じサービス層にそれを渡すレポートページへ上のparamsを撮影アヤックスポストを経由して、私のレポートを呼び出します。

幸運を祈る!

2

私はテストされていないが、うまくいくかもしれないというアイデアを得ました。標準ASP.NetのWebフォームページで の1-置きレポートビューアコントロール(例えばReportViewer.aspx)あなたのMVCの下 2-が、 、3-パスパラメータページへこのReportViewer.aspxページへの参照は、セッションを使用してIFRAMEを追加しますまたはクエリ文字列

thが動作しているかどうかを教えてください

+0

これは私の現在の恐ろしい考えです。私はそれがうまくいくと確信していますが、私はむしろよりエレガントなものを持っています。 – vbullinger

関連する問題