Antoine.st | About Crystal Reports |
How to use DataSet in Crystal Reports.どうも、Crystal Reports のネタばっかり。ま、いいんだけど。 ADO.NET と Crystal Reports の場合、ヘルプには「Push 型のみの利用」と書かれて ます。でも、どうも下手をすると「Pull 型」になってしまうみたいです。どういう ことかというと、DataSet が空の場合、自動的にログオンしてデータを取得してこ ようとするようです。その際に、ログオン情報がきちんと設定されていないと、 ログオンできなくてエラーになります。 他の用途に DataSet を使うことを考えると、「Push 型」の方が使い回しが効くわけ で、たとえば DataGrid に設定した DataSet をそのまま使って印刷、とか。しかし、 これをやるときに、ちょっとしたポイントがありました。 Crystal Decisions の Knowledge Base にも情報がありますが、DataSet の TableName を設定しておかないと「Logon Failed」エラーが発生します。また、 レポートに DataSet を設定するときに、以下のようにしないといけないようです。 rpt.Database.Tables(0).SetDataSource(ds) Passing value to Crystal Reports.単純に値を設定するだけなら、こんな感じでいいみたいです。フィールド名を指定し て、そのフィールドを取得し、Text プロパティに値を設定する、と。 Dim txtOutputField As TextObject txtOutputField = _ rpt.ReportDefinition.ReportObjects.Item("txtOutputFieldName") txtOutputField.Text = "Some Value" How to use Crystal Reports on ASP.NET.
Public Overloads Sub ShowReportDirect( _ ByVal rpt As ReportDocument, _ ByVal pg As Page, _ ByVal ds As DataSet _ ) Dim exp As ExportOptions Dim req As ExportRequestContext Dim st As System.IO.Stream Dim b() As Byte rpt.Database.Tables(0).SetDataSource(ds) exp = New ExportOptions() exp.ExportFormatType = _ ExportFormatType.PortableDocFormat exp.FormatOptions = New PdfRtfWordFormatOptions() req = New ExportRequestContext() req.ExportInfo = exp With rpt.FormatEngine.PrintOptions .PaperSize = PaperSize.PaperA4 .PaperOrientation = PaperOrientation.Landscape End With st = rpt.FormatEngine.ExportToStream(req) pg.Response.ClearHeaders() pg.Response.ClearContent() pg.Response.ContentType = "application/pdf" ReDim b(st.Length) st.Read(b, 0, CInt(st.Length)) pg.Response.BinaryWrite(b) pg.Response.End() End Sub
|