- - PR -
CrystalReport ReportViewer から呼び出したプリンタ一覧ダイアログを制御する方法は?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-01-28 20:52
はじめまして。
環境: VB.NET 2003 CrystalReport: VS.NET Enterprise 2003同梱 下記参考文献や、BusinessObjects (英語)のサンプルなどを見ても解決しない問題があります。 問題: コーディング上では、CrystalReportに対して、『通常使うプリンター』以外の任意のプリンターをセットすることができました。 PrintToPrinter()で、正しく、出力したいプリンターに出力されることは確認できています。 ところが、ReportViewerの上側のツールバーに並んでいる、[プリンタ検索]ボタンをクリックして出てくるダイアログで、初期セットされているのが、常に『通常使うプリンター』となってしまいます。 これを『通常使うプリンター』以外の任意のプリンターが初期セットされた状態にする方法はあるのでしょうか? ちなみに… ・Windows上に、ページプリンタやインクジェットプリンタやドットインパクトプリンタが接続、ドライバも適切に登録済 ・Windows上では、ドットインパクトプリンタ以外を『通常使うプリンター』に設定 ・CrystalReport側では、ドットインパクトプリンタに出力したい ・Windows上の『通常使うプリンター』設定は一切いじらないこと …という条件なんです。 VB6時代では、ごく簡単にできたんですが…… 参考文献: 『ひと目でわかる Microsoft VisualBasic .NET データベース開発入門』 http://www.amazon.co.jp/exec/obidos/ASIN/4891004045/ ===================== 該当フォームでのソースを貼り付けます。 Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared Imports System.Data Imports System.Data.OleDb public class プレビュー用フォーム Inherits System.Windows.Forms.Form Dim adoOleDbConn As System.Data.OleDb.OleDbConnection Dim adoOleDbDA As System.Data.OleDb.OleDbDataAdapter Dim dataSet As System.Data.DataSet Private Sub プレビュー用フォーム_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs _ ) Handles MyBase.Load 'サンプル“vbnet_win_adodotnet”を参照 '接続文字列を用いて、接続を生成し、開く adoOleDbConn = New System.Data.OleDb.OleDbConnection("接続文字列") 'SQL文を構成し、データソースを query する Dim strSql As String = "" strSql = gstrSqlForDataSet 'SQL文と既存の接続を利用して、データを retrieve する adoOleDbDA = New System.Data.OleDb.OleDbDataAdapter(strSql, adoOleDbConn) 'データセットのインスタンスを生成する dataSet = New System.Data.DataSet dataSet.Clear() 'retrieve したデータで、データセットを満たす 'データセット中のテーブル名は、レポート中のテーブルと同じこと! adoOleDbDA.Fill(dataSet, "テーブル名") 'strongly-typed なレポートオブジェクトのインスタンスを生成する Dim crRptFile As New CrystalDecisions.CrystalReports.Engine.ReportDocument crRptFile.Load("RPTファイルへのフルパス") 'populate 済みのデータセットをレポートに pass する crRptFile.SetDataSource(dataSet) Dim i As Integer Dim strInstalledPrinterName As String With Me.PrintDialog1.PrinterSettings For i = 0 To (.InstalledPrinters.Count - 1) strInstalledPrinterName = .InstalledPrinters.Item(i) If StrConv(strInstalledPrinterName, VbStrConv.UpperCase) = StrConv("出力先プリンター名", VbStrConv.UpperCase) Then '指定プリンタが存在する crRptFile.PrintOptions.PrinterName = strInstalledPrinterName Exit For End If Next End With With crRptFile.PrintOptions .PaperOrientation = pfGetOutputPaperOrientation(gintOutputPaperOrientation) 'レポートの向き .PaperSource = pfGetOutputPaperSource(gintOutputPaperSource) 'プリンタの給紙方法 .PaperSize = pfGetOutputPaperSize(gintOutputPaperSize) '用紙サイズ End With 'viewer に、プレビューしたいレポートオブジェクトをセットする レポートビューワ.ReportSource = crRptFile End Sub end class |
1