QA@IT
«質問へ戻る

質問を投稿

Microsoft Report Viewer (VB.NET) を利用した印刷(PDF出力)について

初投稿です。宜しくお願いします。

開発環境:Visual Studio 2008
言語:Visual Basic 2005
フレームワーク:2.0
帳票ツール:Microsoft Report Viewer 2005

Microsoft Report Viewer 2005を利用してPDF出力を試みています。
PDF出力にあたり、ReportViewerコントロールは使用せず(プレビューは行わず)、直接PDF出力できるよう製造しています。
直接のPDF出力、コードからレポートへパラメータとして値を渡すこと、一覧のコントロールオブジェクトを利用してDataTableの1行単位に改ページして表示するところまではできました。
しかし、テーブルを連結し、親テーブルの行単位に改ページし、子テーブルの明細を関連付けて表示するところができません。
具体的には以下のテーブルをDataSet内に手動で作成し、ID列でリレーションしています。
この際、MainTableの行単位に改ページし、関連するSubTableの行をすべて表示する方法を教えて頂けないでしょうか?
ちなみにMainTableの値はレポート上では一覧コントロール内にテキストボックスとして配置し、SubTableの関連する値は一覧コントロール内にテーブルとして配置しています。
+++MainTableのテーブル構造+++
主キーはID
ID、Name、AriasName
1,Yamada、山田
2,Tanaka、田中
+++++++++++++++++++++++++
+++SubTableのテーブル構造+++
主キーはIDとTestValue
ID,TestValue
1,東京都
1,Tokyo
2,大阪府
2,Osaka
+++++++++++++++++++++++++

Dim Bytes() As Byte
Dim LReport As LocalReport
Dim Params As New Generic.List(Of ReportParameter)
Dim fs As IO.FileStream
Dim rds As New ReportDataSource
Dim rds2 As New ReportDataSource
Dim ds As New MicrosoftReportViewer2005.DataSet1
Try
 LReport.ReportEmbeddedResource = "MicrosoftReportViewer2005.Report1.rdlc"
 Params.Add(New ReportParameter("Title", "タイトル"))
 Params.Add(New ReportParameter("SubTitle1","サブタイトル1"))
 Params.Add(New ReportParameter("Name", "名前"))
 Params.Add(New ReportParameter("AriasName","別名"))
 Params.Add(New ReportParameter("SubTitle2","サブタイトル2"))
 LReport.SetParameters(Params)
 ds.MainTable.AddMainTable1Row("1","Yamada","山田")
 ds.MainTable.AddMainTable1Row("2","Tanaka","田中")
 rds.Name = "DataSet1_MainTable"
 rds.Value = ds.MainTable
 LReport.DataSources.Add(rds)
 ds.SubTable.AddSubTableRow(ds.MainTable(0),"東京都")
 ds.SubTable.AddSubTableRow(ds.MainTable(0),"Tokyo")
 ds.SubTable.AddSubTableRow(ds.MainTable(1),"大阪府")
 ds.SubTable.AddSubTableRow(ds.MainTable(1),"Osaka")
 rds2.Name = "DataSet1_SubTable"
 rds2.Value = ds.SubTable
 LReport.DataSources.Add(rds2)
 Bytes = LReport.Render("PDF", Nothing, Nothing, Nothing, Nothing, Nothing, Nothing)
 fs = New IO.FileStream("test.pdf", IO.FileMode.Create, IO.FileAccess.Write)
 fs.Write(Bytes, 0, Bytes.Length)
Catch ex As Exception
 MessageBox.Show(ex.Message)
Finally
 If Not fs Is Nothing Then
  fs.Close()
  fs.Dispose()
  fs = Nothing
 End If
End Try
初投稿です。宜しくお願いします。

開発環境:Visual Studio 2008
言語:Visual Basic 2005
フレームワーク:2.0
帳票ツール:Microsoft Report Viewer 2005

Microsoft Report Viewer 2005を利用してPDF出力を試みています。
PDF出力にあたり、ReportViewerコントロールは使用せず(プレビューは行わず)、直接PDF出力できるよう製造しています。
直接のPDF出力、コードからレポートへパラメータとして値を渡すこと、一覧のコントロールオブジェクトを利用してDataTableの1行単位に改ページして表示するところまではできました。
しかし、テーブルを連結し、親テーブルの行単位に改ページし、子テーブルの明細を関連付けて表示するところができません。
具体的には以下のテーブルをDataSet内に手動で作成し、ID列でリレーションしています。
この際、MainTableの行単位に改ページし、関連するSubTableの行をすべて表示する方法を教えて頂けないでしょうか?
ちなみにMainTableの値はレポート上では一覧コントロール内にテキストボックスとして配置し、SubTableの関連する値は一覧コントロール内にテーブルとして配置しています。
+++MainTableのテーブル構造+++
主キーはID
ID、Name、AriasName
1,Yamada、山田
2,Tanaka、田中
+++++++++++++++++++++++++
+++SubTableのテーブル構造+++
主キーはIDとTestValue
ID,TestValue
1,東京都
1,Tokyo
2,大阪府
2,Osaka
+++++++++++++++++++++++++
```
Dim Bytes() As Byte
Dim LReport As LocalReport
Dim Params As New Generic.List(Of ReportParameter)
Dim fs As IO.FileStream
Dim rds As New ReportDataSource
Dim rds2 As New ReportDataSource
Dim ds As New MicrosoftReportViewer2005.DataSet1
Try
 LReport.ReportEmbeddedResource = "MicrosoftReportViewer2005.Report1.rdlc"
 Params.Add(New ReportParameter("Title", "タイトル"))
 Params.Add(New ReportParameter("SubTitle1","サブタイトル1"))
 Params.Add(New ReportParameter("Name", "名前"))
 Params.Add(New ReportParameter("AriasName","別名"))
 Params.Add(New ReportParameter("SubTitle2","サブタイトル2"))
 LReport.SetParameters(Params)
 ds.MainTable.AddMainTable1Row("1","Yamada","山田")
 ds.MainTable.AddMainTable1Row("2","Tanaka","田中")
 rds.Name = "DataSet1_MainTable"
 rds.Value = ds.MainTable
 LReport.DataSources.Add(rds)
 ds.SubTable.AddSubTableRow(ds.MainTable(0),"東京都")
 ds.SubTable.AddSubTableRow(ds.MainTable(0),"Tokyo")
 ds.SubTable.AddSubTableRow(ds.MainTable(1),"大阪府")
 ds.SubTable.AddSubTableRow(ds.MainTable(1),"Osaka")
 rds2.Name = "DataSet1_SubTable"
 rds2.Value = ds.SubTable
 LReport.DataSources.Add(rds2)
 Bytes = LReport.Render("PDF", Nothing, Nothing, Nothing, Nothing, Nothing, Nothing)
 fs = New IO.FileStream("test.pdf", IO.FileMode.Create, IO.FileAccess.Write)
 fs.Write(Bytes, 0, Bytes.Length)
Catch ex As Exception
 MessageBox.Show(ex.Message)
Finally
 If Not fs Is Nothing Then
  fs.Close()
  fs.Dispose()
  fs = Nothing
 End If
End Try
```