C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: DataGridViewをCrystalReportsで印刷


(過去ログ 43 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■22869 / inTopicNo.1)  DataGridViewをCrystalReportsで印刷
  
□投稿者/ かおりQ (1回)-(2008/08/05(Tue) 01:45:09)

分類:[C#] 

[C#][VS2005]で開発を始めて半年ほどになります。
WindowsでDataGridViewを使ったアプリケーションを作成しています。
複数のテキストファイルを読み込んで、それを元にDataTableを作成してDataSetに加え、
それをDataGridViewのDataSourceとして表示しています。
(DataTableは複数あり、列の項目がそれぞれ異なります。)
そして、DataGridViewに表示中のデータ一覧を印刷したいと思っています。

はじめはPrintDocumentで行と列の値をひとつずつDrawStringしていたのですが、
データに文字制限を設けていないので、列の中で折り返して表示するやり方が掴めず、
文字が重なってみっともないレイアウトになってしまいます...。

そこで、CrystalReportsはどうだろう?と思ったのですが、
DB接続してDataTableを作成しているわけではないため、デザイナでデータソースを設定することが出来ず、
また、コードもどう書いたらよいのか分からない...という状況で、悩んでいます。

宜しくお願い致します。
引用返信 編集キー/
■22871 / inTopicNo.2)  Re[1]: DataGridViewをCrystalReportsで印刷
□投稿者/ ロック (57回)-(2008/08/05(Tue) 09:07:34)
少し前まで、同じくクリスタルレポートを使って・・・という処理を
作ろうと思っていた者ですが、その後、クリスタルレポートを使用しない事になったので
あまり詳しくないのですが、、参考までに

既に、知っていると思われますがクリスタルレポートでは有名なサイトに
「オリジナルデータセットを定義する」という項目があります。
そこで作ったDataSetなら、DBを参照せずにかつデザイナで指定できた記憶があります。
http://www.hirano.cc/crystalreports/make_dataset.html

ただコレの使い方も良くわかっていないのですが(汗
現在、読み込んでいるオリジナルのDataSetの中身を上記で作ったDataSetにコピーして
使用しなくてはならないのかと思います。
直接上記で作ったDataSetにFill()とか出来るのかな? ちょっとわかりません
以上、参考までに

引用返信 編集キー/
■22916 / inTopicNo.3)  Re[2]: DataGridViewをCrystalReportsで印刷
□投稿者/ かおりQ (2回)-(2008/08/05(Tue) 18:15:17)
No22871 (ロック さん) に返信
> ただコレの使い方も良くわかっていないのですが(汗
> 現在、読み込んでいるオリジナルのDataSetの中身を上記で作ったDataSetにコピーして
> 使用しなくてはならないのかと思います。
> 直接上記で作ったDataSetにFill()とか出来るのかな? ちょっとわかりません
> 以上、参考までに
>
ロックさん、ありがとうございます。
仰るとおり、ご紹介いただいたサイトは何度か覗いたことがありました。
が、私の場合、DataSetは「新しい項目の追加」でなくツールボックスからフォームに持っていって使っており、
DataTableも内部的に作っていてDataAdapterを利用していないので、
Fill()は使えないのかな...と思っています。

クリスタルレポートの設定をコードで行うことができれば、良いのですが...。
それは可能なのでしょうか?
引用返信 編集キー/
■22932 / inTopicNo.4)  Re[3]: DataGridViewをCrystalReportsで印刷
□投稿者/ ロック (58回)-(2008/08/06(Wed) 00:18:10)
>「オリジナルデータセットを定義する」という項目があります。
ここで作るDataSetはデザイナ作成時に使うものと思って下さい。
これを作ってデザイナでクリスタルレポートのデザインを作ってみて下さい。
#DataSetを作ってその中にDataTabelを配置してあとはフィールド追加していくだけです

>が、私の場合、DataSetは「新しい項目の追加」でなくツールボックスからフォームに持っていって使っており、
クリスタルレポートを表示する際に、今使っているDataSetの中身を↑で作ったDataSetのDataTableに
コピーすると恐らく出力されます。
コピーではなく、とりあえず↑で作ったDataSetのDataTableに何か適当な文字を入れてみると
イメージが沸くかと思います。
っで、コピーする際にDataTableは行単位にコピーできないのでカラム単位にコピーしなくては
ならず面倒なので、Fill()が出来るなら楽だろうな〜と思った次第です。
なので別にDataAdapterは必要ないです。 必要なのでデザイナで使う為のDataSetだけ

さらに思ったのが、今使っているDataSetから↑で作ったDataSetを直接使うようにしたら
コピーする必要もなくなるのかな〜とか思いました。

ココまで書いたので自分の発言に責任を持とうと思い実際にやってみようかと
思ったのですが、今の環境にはクリスタルレポートが無いので無理でした(^^;すいません
あれは、製品版にしか入ってないのね・・

引用返信 編集キー/
■22999 / inTopicNo.5)  Re[4]: DataGridViewをCrystalReportsで印刷
□投稿者/ かおりQ (3回)-(2008/08/06(Wed) 18:52:00)
No22932 (ロック さん) に返信
> >「オリジナルデータセットを定義する」という項目があります。
> ここで作るDataSetはデザイナ作成時に使うものと思って下さい。
> これを作ってデザイナでクリスタルレポートのデザインを作ってみて下さい。
> #DataSetを作ってその中にDataTabelを配置してあとはフィールド追加していくだけです
なるほど...ありがとうございます。
http://www.hirano.cc/crystalreports/make_dataset.html
を参考にしつつ、以下のようにしてみました。

(1)「新しい項目の追加」でDataSet1.xsdを追加
(2)↑のDataSet1にDataTable1と列「Column1」〜「Column3」を追加
(3)「新しい項目の追加」でCrystalReport1.rptを追加
(4)データベースエキスパートからDataTable1を選択して、Column1〜Column3を配置
そして、フォームのボタンクリックで印刷用フォームを開き、
そこでCrystalReportViewerでプレビューしたいので、以下の通りコーディングしました。
----------------------------------------------
// レポートのオブジェクト作成
CrystalReport1 cReport = new CrystalReport1();

// DataSetのオブジェクト作成
DataSet1 dSet = new DataSet1();

// 行にデータをセット
DataSet1.DataTable1Row tr = (DataSet1.DataTable1Row)dSet.DataTable1.NewRow();
tr.BeginEdit();
tr.Column1 = "test_1";
tr.Column2 = "test_2";
tr.Column3 = "test_3";
tr.EndEdit();

// データセットに追加
dSet.DataTable1.Rows.Add(tr);

// データセットをクリスタルレポートに渡す
cReport.SetDataSource(dSet);
----------------------------------------------
が、最後のSetDataSourceで以下LoadSaveReportExceptionの例外が発生してしまいます。
----------------------------------------------
'CrystalDecisions.CrystalReports.Engine.LoadSaveReportException' の初回例外がCrystalDecisions.CrystalReports.Engine.dll で発生しました。
明示的なリソースにレポートが見つかりません。プロジェクトを作成して、もう一度実行してください。
   場所 CrystalDecisions.CrystalReports.Engine.EngineExceptionUtils.DoThrowException(String message, EngineExceptionErrorID id)
   場所 CrystalDecisions.CrystalReports.Engine.ExceptionThrower.ThrowEngineException(String messageID, EngineExceptionErrorID id)
   場所 CrystalDecisions.CrystalReports.Engine.ReportClass.Load(String reportName, OpenReportMethod openMethod, Int16 parentJob)
   場所 CrystalDecisions.CrystalReports.Engine.ReportDocument.EnsureLoadReport()
   場所 CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)
   場所 CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(DataSet dataSet)
----------------------------------------------
CrystalReportViewerでレポートを確認、というところまで至りません。
レポートの設定に間違いがあるのでしょうが、原因が掴みきれず...。

>ココまで書いたので自分の発言に責任を持とうと思い実際にやってみようかと
>思ったのですが、今の環境にはクリスタルレポートが無いので無理でした(^^;すいません
ご親切にありがとうございます。
ロックさんのアドバイスには本当に助けられています..(^v^)

引用返信 編集キー/
■23010 / inTopicNo.6)  Re[5]: DataGridViewをCrystalReportsで印刷
□投稿者/ ロック (60回)-(2008/08/07(Thu) 00:11:03)
2008/08/07(Thu) 09:05:36 編集(投稿者)

おかしいですね・・・その内容で印刷画面が表示されるはずなのですが

> CrystalReportViewerでレポートを確認、というところまで至りません。
CrystalReportViewerを貼り付けたFormですよね?
http://www.hirano.cc/crystalreports/show_on_CrystalReports.html
もちろん、そうですよね。。。

> レポートの設定に間違いがあるのでしょうが、原因が掴みきれず...。
レポートの設定は必要ないですね、むしろDataSetでデータ渡さなくても
エラーにならず表示されます

大変お世話になっている、例のサイトにサンプルプロジェクトがあるので
一度それを動かしてみると良いかもしれません。
それで正常に表示できるなら、今のプロジェクトに問題があるのが分かるし
それでも正常に表示されないなら、開発環境に問題があるのだと思います。

っで、正常に表示された場合、サンプルプロジェクトと比較してみると
原因が分かるかと思います。
DataSet渡さずのCrystalReportViewer + *****.rptの組み合わせだけでも
やはりエラーになるか確認してみるのも良いかと思います。

#編集
改行がおかしかったので修正しました。
引用返信 編集キー/
■23057 / inTopicNo.7)  Re[6]: DataGridViewをCrystalReportsで印刷
□投稿者/ かおりQ (4回)-(2008/08/07(Thu) 19:01:00)
No23010 (ロック さん) に返信
ロックさん、ありがとうございます!
サンプルで動作確認後、自分のアプリケーションでもレポートを表示することが出来ました。

> 大変お世話になっている、例のサイトにサンプルプロジェクトがあるので
> 一度それを動かしてみると良いかもしれません。
> それで正常に表示できるなら、今のプロジェクトに問題があるのが分かるし
> それでも正常に表示されないなら、開発環境に問題があるのだと思います。
まさにその通りですね。
サンプルが動いたので、やはりプロジェクトに問題があるだろうということになり、
何かココで述べてきた以外に妙な操作をしなかったか、コードはどうかと考えてみて...
レポートとDataSetの名前空間を手編集で変更していた、ということを思い出しました。
(これについては、全く説明無いままでした!すみませんでした...)

コンパイルが通ったので問題意識は無かったのですが、
「新しい項目の追加」の元々の名前空間のままでレポートとDataSetを作り直したところ、
前回の投稿と同じコードで、きちんとレポートをプレビューし、印刷することが出来ました。

今は、DataGridViewのデータをリストに格納してからレポート用のDataSetに入れていますが、
一気にDataSetを設定する方法があれば楽...なので、模索しています。

今回は、初めての投稿で少し不安でしたが、的確なアドバイス・丁寧なご対応を頂けて嬉しく思います。
ありがとうございました(^o^)
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -