- - PR -
CrystalReports【RecordSelectionFormulaに関して】
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-06 09:35
いつもお世話になっています。
今回初めて質問させて頂きます。 開発環境: VB.NET 2003 CrystalReports for VS.NET SQL Server 2000 ASP.NET 現在複数のCrystalReportsで作成したレポートをWEBで閲覧するアプリケーションを開発しています。 一部レポートにRecordSelectionFormulaを使用して表示するレコードに条件をつけているのですが、条件を指定したレポートを表示した後、 別のレポートを表示すると条件を指定した前のレポートのRecordSelectionFormulaが次に開いたレポートにも摘要されてしまい、 「フィールドがありません。」というエラーが発生してしまいます。 レポート表示部分のコード(Page_Loadイベントで実行しています): Dim CrReportDocument As ReportDocument Dim crDatabase As Database Dim crTables As Tables Dim crTable As Table Dim crTableLogOnInfo As TableLogOnInfo Dim crConnectionInfo As ConnectionInfo CrReportDocument = New ReportDocument CrReportDocument.Load(レポートの場所) CrReportDocument.DataDefinition.RecordSelectionFormula = "" Select Case ReportName Case "レポート名" CrReportDocument.DataDefinition.RecordSelectionFormula = "抽出条件" End Select CrReportDocument.Refresh() crConnectionInfo = New ConnectionInfo With crConnectionInfo .ServerName = "Server" .DatabaseName = "Name" .UserID = "User" .Password = "Pass" End With crDatabase = CrReportDocument.Database crTables = crDatabase.Tables For Each crTable In crTables crTableLogOnInfo = crTable.LogOnInfo crTableLogOnInfo.ConnectionInfo = crConnectionInfo crTable.ApplyLogOnInfo(crTableLogOnInfo) Next CrystalReportViewer1.ReportSource = CrReportDocument CrReportDocument.Refresh() CrystalReportViewer1.DataBind() CrystalReportViewer1.RefreshReport() -------------------------------------------------------- またPage_Unloadイベントで、 CrReportDocument.Close CrReportDocument.Dispose を実行しています。 開発経験が浅く自分なりに色々調べてみたのですが、解決する事が出来ませんでした。 おかしな部分等ありましたら、ご指摘頂けますでしょうか。 よろしくお願いします。 [ メッセージ編集済み 編集者: めろん 編集日時 2006-09-06 09:36 ] | ||||||||||||
|
投稿日時: 2006-09-07 09:10
自己解決しました。
CrystalReportViewer1.RecordSelectionFormula = "抽出条件" とオブジェクトではなくビューアーに条件を設定することで正常に動作しました。 また、同じビューアーに違うレポートを連続して表示する場合、 CrystalReportViewer1.RecordSelectionFormula = "" とブランクを入力しないと、別レポートの条件がリセットされないようです。 Windowsアプリの時は、こんな事しなくてもよかったような気がするのですが・・。 私の投稿を閲覧&検討して下さった皆様、ありがとうございました。 | ||||||||||||
|
投稿日時: 2006-09-07 09:34
同一のインスタンスであれば、そうなるのは当然でしょうね。 新しいインスタンスを使用しているのにも関わらずであれば、確かにヘンですね。
Page.Unload イベントの Close && Dispose メソッドは意味があるとお考えですか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-09-07 10:14
ご返答ありがとうございます。
じゃんぬねっとさんのサイトや書き込みには大変お世話になっております。 >同一のインスタンスであれば、そうなるのは当然でしょうね。 同一インスタンスを使用しておりました・・・。 同じビューアーに違うレポートを表示するのではなく、 その都度インスタンスを作成するほうが良いのでしょうか? >Page.Unload イベントの Close && Dispose メソッドは意味があるとお考えですか? コンボボックスのAutoPostBackプロパティをTrueにして、 そこからレポート名を選択し表示するという流れになっています。 コンボボックスのアイテムを変えたときデバッグで Load → Unload → 表示 という順番で動いていましたので、 Unloadのタイミングで一度Close && Dispose した方が良いのかと思いました。 レポートオブジェクトをCloase && Disposeするタイミングは、 どこで行うのがベストなのでしょうか? 未熟者な為おかしな事を書いているかもしれませんがご教授下さい。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-09-07 10:32
いえ、自前で初期化をしてコストが減らせているのであれば、問題ないです。
なるほど、そういうことでしたか。
特にこちら側では何もしなくても良いと思いますよ。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-09-07 10:56
お忙しい中何度もありがとうございます。
>特にこちら側では何もしなくても良いと思いますよ。 .NET Frameworkが自動で解放してくれると言うことなのでしょうか? サーバーのリソースをどんどん使用して行く事になるとまずいと思い、 解放のタイミングを色々考えていました。 |
1