- PR -

クリスタルレポートをPDFに変換して表示する

投稿者投稿内容
sayurin
会議室デビュー日: 2005/04/14
投稿数: 13
投稿日時: 2006-03-09 11:27
sayurinです。
VS.NET2005で開発しています。
やりたいことは、クリスタルレポートをロードしてPDFに変換して表示することです。
過去ログを参考にして書いてみたところ、表示しても真っ白でした。
まずは、クリスタルレポートがちゃんと設定できているかの確認で、
CrystalReportViewerを使用して表示してみたところ、データセットが
設定できていないように思えました。(詳細セクションが表示されない)
そもそも、データセットの設定に誤りがあるのか、クリスタルレポートの
作成方法に誤りがあるのか、よくわからない状態です。

・データセットは、枠だけを作成しました。
・データセットをクリスタルレポートに設定するため、データベースエキスパートから「接続の新規作成」-「データベースファイルの検索」より、作成したデータセットを指定しました。

表示するためのソースです。

ReportDocument RPD = new ReportDocument();
RPD.Load(sFileNm);
RPD.Database.Tables[0].SetDataSource(ds);
CrystalReportViewer1.ReportSource = RPD;

※「ds」は、レコードを取得できています。
カラム名、順序は、枠だけのデータセットを合わせています。
→これはどこまで合わせる必要があるのかわかっていません。

PDFに変換するソースです。

byte[] b;
ReportDocument RPD = new ReportDocument();

RPD.Load(sFileNm);
RPD.Database.Tables[0].SetDataSource(ds);
RPD.ExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
RPD.ExportOptions.FormatOptions = new PdfRtfWordFormatOptions();
ExportRequestContext ERC = new ExportRequestContext();
ERC.ExportInfo = RPD.ExportOptions;
Stream ST = RPD.FormatEngine.ExportToStream(ERC);
b = new byte[ST.Length];
ST.Read(b, 0, (int)ST.Length);
Response.ContentType = "Application/pdf";
Response.BinaryWrite(b);
Response.End();


1.データセットの設定は正しいのでしょうか。
2.PDFの変換は2005だと違うのでしょうか。

以上、よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-09 12:15
引用:

sayurinさんの書き込み (2006-03-09 11:27) より:

CrystalReportViewerを使用して表示してみたところ、データセットが
設定できていないように思えました。(詳細セクションが表示されない)


(思えました...?)
だとしたら、件名が不適切かもしれませんね。
PDF 変換以前で詰まってるのであって、PDF 変換の実装は正しいかもしれませんから。

引用:

・データセットは、枠だけを作成しました。


スキーマのことかな。

引用:

RPD.Database.Tables[0].SetDataSource(ds);
CrystalReportViewer1.ReportSource = RPD;


これは、

コード:

    RPD.SetDataSource(ds)


で良いのでは?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
sayurin
会議室デビュー日: 2005/04/14
投稿数: 13
投稿日時: 2006-03-09 12:31
データセットをXMLスキーマに変更し、データセットを設定するコードを
RPD.SetDataSource(ds);
に書き換えたところ、正しく表示することができました。
よって、件名のとおり、PDFに変換する処理ですが、
やはり、真っ白のままになります。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-09 12:42
引用:

sayurinさんの書き込み (2006-03-09 12:31) より:

データセットをXMLスキーマに変更し、データセットを設定するコードを
RPD.SetDataSource(ds);
に書き換えたところ、正しく表示することができました。


おお、とりあえずこっちは解決ですね。

引用:

よって、件名のとおり、PDFに変換する処理ですが、
やはり、真っ白のままになります。


PDF に変換する側のソースでも、

引用:

RPD.Database.Tables[0].SetDataSource(ds);


ここの修正が必要なのでは?
一応全部ソースを検証したのですが、間違いが他に見当たらなかったです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
sayurin
会議室デビュー日: 2005/04/14
投稿数: 13
投稿日時: 2006-03-09 12:49
RPD.Database.Tables[0].SetDataSource(ds);

RPD.SetDataSource(ds);
に修正しましたが、状況は変わりません。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-09 13:02
引用:

sayurinさんの書き込み (2006-03-09 12:49) より:

RPD.Database.Tables[0].SetDataSource(ds); は
RPD.SetDataSource(ds); に修正しましたが、状況は変わりません。


うーん、できそうなんだけどなぁ。
単純に ds の中身が本当にあるのかが気になります。
byte[] b の中身は確認されましたか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
sayurin
会議室デビュー日: 2005/04/14
投稿数: 13
投稿日時: 2006-03-09 13:05
dsの中身は、デバック中とCrystalReportViewerに表示された内容で確認しました。
byte[] bの中身は、数字が入っていましたが、正しいかの判断の方法がわかりません。
また、線やボックスさえも表示されないので、ds以前の問題かもしれません。
sayurin
会議室デビュー日: 2005/04/14
投稿数: 13
投稿日時: 2006-03-09 20:23
Page_LoadでやろうとしていたのをButton1_Clickに処理をうつしてみたらできました。
Page_Loadでなぜできないのかがわかりません。

スキルアップ/キャリアアップ(JOB@IT)