WebForm上の条件を元に、動的にデータソースの内容を設定してレポートを作成し、WebViewerコントロール上に表示する方法は?

文書番号 : 33912     文書種別 : 使用方法     登録日 : 2012/12/19     最終更新日 : 2014/09/05
文書を印刷する
対象製品
ActiveReports for .NET 7.0J
詳細
レポートのデータソースを動的に設定し、レポートをWebViewerコントロールのReportプロパティに設定することで、WebForm上の任意の条件を元にレポートを作成し、表示することができます。
レポートのデータソースを動的に設定する方法は、レポートの形式によって異なります。以下の内容をご覧ください。
  1. セクションレポートの場合
  2. ページレポートの場合


セクションレポートの場合

下記は、セクションレポートの場合に、WebコントロールのTextBoxに入力された文字列を、SQL文としてレポートに設定し、動的にレポートを作成する一例です。

◆サンプルコード(VB.NET)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Dim rpt As New SectionReport1
  'TextBoxの文字列を、SQLプロパティに設定します。
  'ActiveReportsのOleDBDataSourceを使用している場合は以下のように設定します。

  CType(rpt.DataSource, GrapeCity.ActiveReports.Data.OleDBDataSource).SQL = TextBox1.Text

  rpt.Run()
  WebViewer1.Report = rpt
End Sub

◆サンプルコード(C#)
protected void Page_Load(object sender, EventArgs e)
{
  SectionReport1 rpt = new SectionReport1();

  //TextBoxの文字列を、SQLプロパティに設定します。
  //ActiveReportsのOleDBDataSourceを使用している場合は以下のように設定します。

  ((GrapeCity.ActiveReports.Data.OleDBDataSource)rpt.DataSource).SQL = TextBox1.Text;

  rpt.Run();

  this.WebViewer1.Report = rpt;
}



ページレポートの場合

ページレポートの場合は、データセットプロバイダーを使用して、外部からデータソースを設定することが可能です。
データセットプロバイダーの使用方法については、製品ヘルプの以下のトピックをご覧ください。

PowerTools ActiveReports for .NET 7.0J
 - ActiveReportsユーザーガイド
  - 基本操作
   - ページレポートの基本操作
    - データ連結
     - 実行時にレポートとデータソースの連結
      -「データセットプロバイダー」

なお、この方法を使用する場合には、以下の点にご注意ください。
  • 製品ヘルプではWindowsフォームアプリケーションの場合の使用方法をご紹介しておりますが、Webアプリケーションの場合は、イベントハンドラの関連付けの方法が一部異なります。詳細は後述のサンプルコードをご覧ください。
  • データセットプロバイダーを使用するためには、デザインの段階で、使用するフィールドをあらかじめ定義しておく必要があります。

下記は、ページレポートの場合に、WebコントロールのTextBoxに入力された文字列を、SQL文としてレポートに設定し、動的にレポートを作成する一例です。

◆サンプルコード(VB.NET)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Dim rptPath As New System.IO.FileInfo(Server.MapPath("") & "/PageReport1.rdlx")
  '既存のレポートを読み込みレポート定義を作成します。
  Dim definition As New GrapeCity.ActiveReports.PageReport(rptPath)

  ' ページレポートのDocument(PageDocument)のLocateDataSourceイベントを使用して、
  ' 動的にデータテーブルを設定します。

  AddHandler definition.Document.LocateDataSource, AddressOf runtime_LocateDataSource
  WebViewer1.Report = definition
End Sub

Private Sub runtime_LocateDataSource(ByVal sender As Object, ByVal args As _
                      GrapeCity.ActiveReports.LocateDataSourceEventArgs)
  Dim filepath As String = "C:/Nwind.mdb"
  Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & filepath)

  'TextBoxの文字列を、SQLプロパティに設定します。
  Dim da As New OleDb.OleDbDataAdapter(Me.TextBox1.Text, cn)
  Dim dt As New DataTable
  da.Fill(dt)

  ' args.Dataを介して、動的に取得したデータテーブルを設定します。
  args.Data = dt
End Sub


◆サンプルコード(C#)
protected void Page_Load(object sender, EventArgs e)
{
  System.IO.FileInfo rptPath
   = new System.IO.FileInfo(Server.MapPath("") + "/PageReport1.rdlx");
  // 既存のレポートを読み込みレポート定義を作成します。
  GrapeCity.ActiveReports.PageReport definition
   = new GrapeCity.ActiveReports.PageReport(rptPath);

  // ページレポートのDocument(PageDocument)のLocateDataSourceイベントを使用して、
  // 動的にデータテーブルを設定します。

  definition.Document.LocateDataSource += this.runtime_LocateDataSource;
  WebViewer1.Report = definition;
}

private void runtime_LocateDataSource(Object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
{
  string filepath = "C:/Nwind.mdb";
  System.Data.OleDb.OleDbConnection cn
   = new System.Data.OleDb.OleDbConnection
   ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath);

  //TextBoxの文字列を、SQLプロパティに設定します。
  System.Data.OleDb.OleDbDataAdapter da
   = new System.Data.OleDb.OleDbDataAdapter(this.TextBox1.Text, cn);
  System.Data.DataTable dt
   = new System.Data.DataTable();
  da.Fill(dt);

  // args.Dataを介して、動的に取得したデータテーブルを設定します。
  args.Data = dt;
}


上記のように、コード上で Reportプロパティにレポートオブジェクトを設定する場合、WebViewerコントロールの ReportNameプロパティは設定しないようにしてください。
レポートの生成とWebViewerコントロールへの設定処理がそれぞれ重複して実行され、意図しない動作をする場合があります。

※WebViewerコントロールは、Professional の機能です。Standard では使用できません。
関連情報
キーワード
HowTo データ Web