DOBON.NET DOBON.NETプログラミング掲示板過去ログ

レポート作成時にはDataSetを指定せず、DataGridViewの内容を印刷させたい。

環境/言語:[Windows8、VB2012]
分類:[.NET]

こんにちは。
お世話になります。


Windows8、VB2012、で、開発しております。


Form1に、DataGridViewを、置いています。
ローカルにある、ACCESSデータベースのテーブルAの内容を、SELECT文で取得して、その、データテーブルを、DataGridViewのデータソースAに、指定し、表示させて、おります。


印刷ボタンも、置いています。
印刷ボタンを押した時に、DataGridViewに表示されている内容を、
PrintDocumentではなく、ReportViewerを使って、印刷させたい、
と、考えております。


ReportViewerを使っての、通常の、印刷方法は、次のような方法だと、思います。


・レポートを新規作成する。
・レポートにおいて、データ元となるデータセットBを指定する。
・レポートに、テーブルを貼り付ける。
・そのテーブルと、データセットBを、関連づける。
・Form2に、ReportViewerコントロールを、貼り付ける。
・ReportViewerの参照元に、レポートを指定する。
・Form1の印刷ボタンを押した際には、Form2を開き、そこに表示されている、レポートの内容を、ReportViewerについている印刷ボタンを押して、印刷する。


この方法の場合、開発時に、あらかじめ、設定しておいた、データセットBの内容を、印刷させることになり、DataGridViewのデータソースAは、活かされていないように、思われます。


レポート作成時に、データセットBは指定せず、Form1の印刷ボタンを押した時に、レポートのテーブルに、データセットAを引き渡し、Form2のReportViewerで表示、印刷させたい、と、考えております。


Form1から、レポートに、1つの値や、文字列等の、簡単な値を、パラメータとして渡し、印刷させる方法は、見つかったのですが、
(参考)http://www.vbstation.net/tips/reportviewer.htm


データセット(データテーブル)の内容を、まるごと、引き渡す方法が、見つかりませんでした。


このために、何か、有効な方法がございましたら、ご教示頂きたく、存じます。


印刷物に、タイトルやページ番号も割り振りたいため、PrintDocumentの方法は、使えません。


あるいは、データセットBは、やはり、前もって、指定しておかなければならず、印刷時に、データセットAに、更新する、といった、方法に、なりますでしょうか。


どうぞ、よろしくお願い致します。
> データセット(データテーブル)の内容を、まるごと、引き渡す方法が、見つかりませんでした。
>
> このために、何か、有効な方法がございましたら、ご教示頂きたく、存じます。
>
> 印刷物に、タイトルやページ番号も割り振りたいため、PrintDocumentの方法は、使えません。
>
> あるいは、データセットBは、やはり、前もって、指定しておかなければならず、印刷時に、データセットAに、更新する、といった、方法に、なりますでしょうか。

  LocalReport設定にすれば、できます。

  たとえば・・・

With ReportViewer1
.ProcessingMode = ProcessingMode.Local
With .LocalReport
.SetParameters(Parameters)
.DataSources.Add(New ReportDataSource("ProductDataSet_HIS_PRODUCT", ds.Tables("生産履歴")))
End With
.RefreshReport()
.RefreshReport()
End With

  ※ 丸ごと書くと、ソースコード量が膨大になるので
    推測して下さい。
    必要な最低限の機能表記のみです。

以上。参考まで
■No31612に返信(オショウさんの記事)

ありがとうございます^^。
さっそく、とりくんでみます。
助かります。

>>データセット(データテーブル)の内容を、まるごと、引き渡す方法が、見つかりませんでした。
>>
>>このために、何か、有効な方法がございましたら、ご教示頂きたく、存じます。
>>
>>印刷物に、タイトルやページ番号も割り振りたいため、PrintDocumentの方法は、使えません。
>>
>>あるいは、データセットBは、やはり、前もって、指定しておかなければならず、印刷時に、データセットAに、更新する、といった、方法に、なりますでしょうか。
>
>   LocalReport設定にすれば、できます。
>
>   たとえば・・・
>
> With ReportViewer1
> .ProcessingMode = ProcessingMode.Local
> With .LocalReport
> .SetParameters(Parameters)
> .DataSources.Add(New ReportDataSource("ProductDataSet_HIS_PRODUCT", ds.Tables("生産履歴")))
> End With
> .RefreshReport()
> .RefreshReport()
> End With
>
>   ※ 丸ごと書くと、ソースコード量が膨大になるので
>     推測して下さい。
>     必要な最低限の機能表記のみです。
>
> 以上。参考まで
■No31612に返信(オショウさんの記事)
レポート編集画面で、あらかじめ、データセットを指定しないまま、ビルドしますと、

エラー1 tablix 'Tablix1' は、レポート本文に含まれていますが、レポートにはデータセットがありません。データ領域は、データセットがないレポートでは許可されていません。

が、出てしまいました。

Tablix1のDatasetNameに、有効な、データセット名を、指定しなければ、ならないみたいなのですが。

グローバル変数を、コード内で宣言し、その変数に、データセットの内容を代入するようにして、この変数名を、データセット名で、指定しても、ビルド時に、無効、と、出ます。

引き続き、やってみます。
■No31615に返信(ERIさんの記事)
> ■No31612に返信(オショウさんの記事)

おかげさまで、無事に、解決しました。

http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=31618&rev=&no=0

レポート編集時に、データセットをまったく指定しない、のは、無理みたいですね。

空のデータセット.XSDを作っておいて、出力ディレクトリに、「常にコピーする」にして、印刷実行時、空のデータセットに、読み込んだデータを代入する、このようにして、解決できました。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板