GrapeCity ActiveReports for .NET 16.0J
Web
ActiveReportsユーザーガイド > よくある質問 > ページレポート/RDLレポート > Web

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

ページレポートの場合は、データセットプロバイダを使用して、外部からデータソースを設定することが可能です。

なお、この方法を使用する場合には、以下の点にご注意ください。

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

Visual Basic

Visual Basicコード
コードのコピー
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#

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 では使用できません。

関連トピック