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

CrystalReport 「ページ生成処理中」の表現について

環境/言語:[WindowsXP、VB.NET2003、CrystalReport for.NET、.NET Framework1.1]
分類:[.NET]

いつもお世話になります。
タイトルが分かりにくくてすみません。

最大145ページあるデータをCrystal Reportで表示するWindowsフォームがあります。
普段は1〜3ページほどなので問題ないのですが、145ページを表示するのには
かなり時間がかかります。

そこでFormのLoad開始からCrystalReportViewerのReportSourceの設定の後に
マウスポインターを変更するようにしてみましたが、Form表示後ポインタは戻り、
その後のページ生成中は止まっているような状態になってしまいます。

このような状態をプログレスバーで進捗状況を表現したり、ページ生成中に
マウスポインターを変更、もしくはこれにこだわらず何かよい方法があるで
しょうか?
よろしくお願いします。
こんにちは、じゃんぬねっと です。

■No8517に返信(どら坊さんの記事)
> 最大145ページあるデータをCrystal Reportで表示するWindowsフォームがあります。
> 普段は1〜3ページほどなので問題ないのですが、145ページを表示するのには
> かなり時間がかかります。

そうですか?
私の低スペックマシンでも、1秒もかからず表示されましたが...。
データの受け渡し (バウンディング) などはどうしているのでしょうか?
それとも、カラムが異様に多いテーブルなのでしょうか?

# 作業用のテーブルを経由などしていれば別ですが...
■No8519に返信(じゃんぬねっとさんの記事)
じゃんぬねっとさん、返信ありがとうございます。

> 私の低スペックマシンでも、1秒もかからず表示されましたが...。
> データの受け渡し (バウンディング) などはどうしているのでしょうか?
> それとも、カラムが異様に多いテーブルなのでしょうか?

テーブルの方ももう少し詳しく書けばよかったですね。
データベースはACCESS2002でテーブルの列は12列でデータ2万件、
そのうちの5000件を抽出して表示します。

データの受け渡しはDataSetに抽出した5000件をセットして渡しています。
またDataSetには上記の抽出したデータ以外に4つのテーブルがあり、それらは
5000件のデータを参照して表示するようにしています。(リレーションは設定
していません)

レポートオブジェクトの受け渡しはReportDocument経由で、「型付けの強い
レポート」としてバインドしています。

実はその後いろいろ試して、当初CrystalReportの設定をLoadイベント中に
していましたが、それをNewイベントに移しました。
これによりインスタンス生成時に何らかのメッセージを表示することが可能に
なるのでは、と考えていますが、出来れば進捗状況が把握できるようにしたい
と思っています。

もちろん表示完了も速いに越したことはないので、上記の説明で何か
お気づきの点があれば教えてください。
よろしくお願いします。
じゃんぬねっと です。

■No8539に返信(どら坊さんの記事)
> テーブルの方ももう少し詳しく書けばよかったですね。
> データベースはACCESS2002でテーブルの列は12列でデータ2万件、
> そのうちの5000件を抽出して表示します。
> データの受け渡しはDataSetに抽出した5000件をセットして渡しています。
> またDataSetには上記の抽出したデータ以外に4つのテーブルがあり、それらは
> 5000件のデータを参照して表示するようにしています。
>(リレーションは設定していません)
ちなみに、何秒くらいかかっているのですか? (^-^;)

> 実はその後いろいろ試して、当初CrystalReportの設定をLoadイベント中に
> していましたが、それをNewイベントに移しました。
> これによりインスタンス生成時に何らかのメッセージを表示することが可能に
> なるのでは、と考えていますが、出来れば進捗状況が把握できるようにしたい
> と思っています。
コンストラクタで、そのインスタンスの初期化以外のことはしないでください。
■No8541に返信(じゃんぬねっとさんの記事)

返信ありがとうございます。

> ちなみに、何秒くらいかかっているのですか? (^-^;)
肝心なところを書いてませんでした
正確に測ってませんが、おおよそ120秒から180秒ぐらいです。

> コンストラクタで、そのインスタンスの初期化以外のことはしないでください。
そうなんですか?勉強不足で申し訳ないです。
取り合えず元に戻しました。

すみませんが、何かお気づきの点があればよろしくお願いします。
じゃんぬねっと です。

■No8558に返信(どら坊さんの記事)
> 肝心なところを書いてませんでした
> 正確に測ってませんが、おおよそ120秒から180秒ぐらいです。
それは、CrystalReports のせいではなく、
結合条件が最適でないからではないでしょうか?

> すみませんが、何かお気づきの点があればよろしくお願いします。
例えば、複雑な検索クエリとか使っていないか... とか。
CrystalReports 自体は非同期でデータをセットしてますから、
たかが、5000 件程度では一瞬で画面自体は表示されると思いますから...
Dataset を作るのに手間取ってるような気がします。

# 検討違いでしたら、申し訳ありません。m(_ _)m
■No8559に返信(じゃんぬねっとさんの記事)
じゃんぬねっとさん、ありがとうございました。

> Dataset を作るのに手間取ってるような気がします。

まさしく仰るとおりでした。
今まで5つのテーブルを個別にFillしていましたが、SelectCommandを作り変えて
一つのテーブルにしたところ、一瞬とまではいきませんが、10秒程度で表示されるようになりました。
ここまで劇的にパフォーマンスが向上するとは思いませんでした。
もっと勉強しなくてはなりませんね。

何はともあれ本当にありがとうございました。
解決済み!

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