- - PR -
CrystalReportsをPDF出力する際に条件を指定する方法について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-09-19 19:01
いつもお世話になります。教えていただきたいのですが、
CrystalReportsをPDF出力する際に条件を指定する事は可能でしょうか? 例えば、次のような場合、CrystalReport1.rptのデータベースフィールドに 存在するテーブルの内容全件がPDFに出力されてしまいます。 該当データ(例えば得意先CDが"123456"のデータのみ)のみPDFに出力する 方法はないのでしょうか? 申訳ありませんが、CrystalReportsの事をあまり理解していませんので、 初歩的な質問かもしれませんが、よろしくお願いいたします。 ********************************************************************* Private Sub Button1_Click(ByVal sender As System.Object _ , ByVal e As System.EventArgs) Handles Button1.Click Dim report As New _ CrystalDecisions.CrystalReports.Engine.ReportDocument() Dim diskOpts As New _ CrystalDecisions.Shared.DiskFileDestinationOptions() report.Load("D:\VBNET500\print290\CrystalReport1.rpt") 'エクスポート先のオプションを設定する。 diskOpts.DiskFileName = "D:\VBNET500\print290.pdf" report.ExportOptions.DestinationOptions = diskOpts 'レポートをPDF形式でエクスポートする。 report.ExportOptions.ExportDestinationType = _ CrystalDecisions.Shared.ExportDestinationType.DiskFile report.ExportOptions.ExportFormatType = _ CrystalDecisions.Shared.ExportFormatType.PortableDocFormat report.Export() MessageBox.Show("レポートをPDF形式で出力しました。", "結果通知") End Sub ************************************************************************ |
|
投稿日時: 2004-09-20 21:21
DataSetを作成して、Crystal Report Documentに設定します。
まず、Crystal Reportのログオン情報を設定し(CrystalDecisions.Shared.TableLogOnInfo)、データベース・テーブルの情報を設定します。(CrystalDecisions.CrystalReports.Engine.Table) そして、バインドしたCrystal Reportドキュメントに対して必要なレコードだけを含んだDataSetを設定すれば、その情報だけを表示するレポートが表示されます。 Dim crDoc As New ReportDocument Dim crTblLogonInfoCur As CrystalDecisions.Shared.TableLogOnInfo Dim crReportTable As CrystalDecisions.CrystalReports.Engine.Table Dim crParamFileds As ParameterFieldDefinitions Dim crView As New CrystalDecisions.Web.CrystalReportViewer Dim daReport As SqlDataAdapter Dim dsReport As DataSet Dim SQLStr As String Dim strTableName As String crDoc.Load("Reportのパス") crView.ReportSource = crDoc If m_SQLStr <> "" Then daReport = New SqlDataAdapter(SQLStr, conReport) dsReport = New DataSet conReport.Open() daReport.Fill(dsReport, strTableName) conReport.Close() crDoc.SetDataSource(dsReport) End If 'あとはExportする |
|
投稿日時: 2004-09-21 01:35
教えていただき、ありがとうございます。
早速試してみたのですが、上手くいきませんでした。 結果的にサーバにエクスポートされたPDFファイルには得意先マスタの内容が全件出力されています。 @ソースが問題なのでしょうか?(データセットには対照分のデータのみセットされています。) ACrystalReport側のデータベースフィールドが設定してあるのが問題なのでしょうか? 度々、申訳ありませんが、よろしくお願いいたします。 ************************************************************************************************* Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim crDoc As New ReportDocument Dim crExportOptions As ExportOptions Dim crDiskFileDestinationOptions As DiskFileDestinationOptions Dim Fname As String ' ファイル名 Dim daReport As SqlDataAdapter Dim dsReport As DataSet Dim SQLStr As String Dim strTableName As String Dim m_SQLStr As String Dim connectionString As String = CType(ConfigurationSettings.AppSettings("SQLCon"), String) Dim conReport As SqlConnection = New SqlConnection(connectionString) Dim logOnInfo As New TableLogOnInfo ' レポート内のテーブルの接続情報を設定します。 logOnInfo.ConnectionInfo.ServerName = "○○○" logOnInfo.ConnectionInfo.DatabaseName = "×××" logOnInfo.ConnectionInfo.UserID = "△△△" logOnInfo.ConnectionInfo.Password = "" logOnInfo.TableName = "MST_TOKUISAKI" crDoc.Load("c:\inetpub\wwwroot\WebApplication3\CrystalReport1.rpt") m_SQLStr = "select * from MST_TOKUISAKI WHERE TokuisakiCd='150120'" If m_SQLStr <> "" Then daReport = New SqlDataAdapter(m_SQLStr, conReport) dsReport = New DataSet conReport.Open() daReport.Fill(dsReport, "MST_TOKUISAKI") conReport.Close() crDoc.SetDataSource(dsReport) End If ' サーバへエクスポート Fname = "c:\exports\" & Page.Session.SessionID().ToString & ".pdf" crDiskFileDestinationOptions = New DiskFileDestinationOptions crDiskFileDestinationOptions.DiskFileName = Fname crExportOptions = crDoc.ExportOptions With crExportOptions .DestinationOptions = crDiskFileDestinationOptions .ExportDestinationType = ExportDestinationType.DiskFile .ExportFormatType = ExportFormatType.PortableDocFormat End With crDoc.Export() End Sub ************************************************************************************************* |
|
投稿日時: 2004-09-21 09:35
おそらく、Crystal Reportsのレポートに直接、DBとの接続が設定されているためでは無いでしょうか?
最初にレポートをデザインするとき、データスキーマでフィールドだけを定義しておき、そして実際に表示する段階でデータセットに表示するデータを取得し、それを設定してやるようにすると動くと思います。 まず、レポートを作成する段階でXMLデータスキーマ(.xsd)を定義します。VS.NET上でならドラッグ&ドロップで定義が作成できます。 そしてそれを基にしてレポートを作成します。 その空の(定義だけされた)レポートに先ほどのコードでデータを設定してやると必要なデータだけが表示されたレポートが表示されるはずです。 |
|
投稿日時: 2004-09-21 18:28
クリスタルレポートのデータアクセス方法には、プル型とプッシュ型があります。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/crystlmn/html/crconreportdataaccess.asp プル型では、クリスタルレポート側でデータを取得し プッシュ型では.NET側でデータを取得するという違いがあります。 Mercury21さんが提案されているのは、「プッシュ型」での方法です。 Nagさんはここまでプル型で作成されているようですので エクスポート前に以下のコードを追加されてはいかがでしょう? crDoc.DataDefinition.RecordSelectionFormula= "{TokuisakiCd} = '150120'" crDoc.Refresh() もちろん、"{TokuisakiCd} = '150120'"の部分は動的に変化させてください。 参考になるとよいですが。 |
|
投稿日時: 2004-09-21 23:12
Mercury21様、けに〜様ご返答ありがとうございます。
両方の方法を試してみて両方とも上手くいきました。 教えていただく前は、ワークファイルを作成するしかないかなー と思っておりましたので、大変助かりました。 これからも、よろしくお願い致します。 |
1