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