WebForm上の条件を元に、動的にデータソースの内容を設定してレポートを作成し、WebViewerコントロール上に表示する方法は?
対象製品
ActiveReports for .NET 7.0J
詳細
レポートのデータソースを動的に設定し、レポートをWebViewerコントロールのReportプロパティに設定することで、WebForm上の任意の条件を元にレポートを作成し、表示することができます。
レポートのデータソースを動的に設定する方法は、レポートの形式によって異なります。以下の内容をご覧ください。
◆サンプルコード(VB.NET)
◆サンプルコード(C#)
データセットプロバイダーの使用方法については、製品ヘルプの以下のトピックをご覧ください。
PowerTools ActiveReports for .NET 7.0J
- ActiveReportsユーザーガイド
- 基本操作
- ページレポートの基本操作
- データ連結
- 実行時にレポートとデータソースの連結
-「データセットプロバイダー」
なお、この方法を使用する場合には、以下の点にご注意ください。
下記は、ページレポートの場合に、WebコントロールのTextBoxに入力された文字列を、SQL文としてレポートに設定し、動的にレポートを作成する一例です。
◆サンプルコード(VB.NET)
◆サンプルコード(C#)
上記のように、コード上で Reportプロパティにレポートオブジェクトを設定する場合、WebViewerコントロールの ReportNameプロパティは設定しないようにしてください。
レポートの生成とWebViewerコントロールへの設定処理がそれぞれ重複して実行され、意図しない動作をする場合があります。
※WebViewerコントロールは、Professional の機能です。Standard では使用できません。
レポートのデータソースを動的に設定する方法は、レポートの形式によって異なります。以下の内容をご覧ください。
セクションレポートの場合
下記は、セクションレポートの場合に、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
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;
}
{
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
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;
}
{
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