.NET ReportDocument

先日からちょっと出力するためにクリスタルレポートを使用してプログラムを作っていたのですが
クリスタルレポートでは縦書きにはできないのですね!!

http://www.agtech.co.jp/support/faq/crystal_reports/v11j/all.htmlから抜粋です。
Q:Windows フォーム上で縦書きフォントを使用しても縦書きにならないようですが、何故でしょう?
A:Visual Studio.NET 2003 や Visual Studio 2005 の Windows フォームで縦書きフォント(例:@MS 明朝)を指定した時の不具合になります。既に開発元へは報告済みですが、修正時期は未定です。
この不具合により、縦書きフォントと回転 270 度を組み合わせた 『 縦方向の表示 』 が実現できません

ActiverReportも縦書きには対応していませんでした。

仕方ないのでReportDocumentを使ってみました。
ReportDocumentを使用するのは初めてだったのですが、シンプルで使いやすいかも。
ちょっとした出力ならReportDocumentでも十分ですね。


Public Class Report


 

    Private _PrintData As DataTable


 

    Private _iCurrentDataIndex As Integer = 0


 

    Private _PrintDoc As System.Drawing.Printing.PrintDocument


 


 

    Public Property PrintData() As DataTable

        Get

            Return Me._PrintData

        End Get

        Set(ByVal value As DataTable)

            Me._PrintData = value

        End Set

    End Property


 

    Public Sub New()

        'PrintDocumentを作成します。

        Me._PrintDoc = New System.Drawing.Printing.PrintDocument

        'PrintPageイベントハンドラを追加します。

        AddHandler Me._PrintDoc.PrintPage, AddressOf PrintDoc_PrintPage

        'BeginPrintイベントハンドラを追加します。

        AddHandler Me._PrintDoc.BeginPrint, AddressOf PrintDoc_BeginPage

    End Sub


 

    ''' <summary>

    ''' BeginPrintイベントハンドラ

    ''' </summary>

    ''' <param name="sender"></param>

    ''' <param name="e"></param>

    ''' <remarks></remarks>

    Protected Sub PrintDoc_BeginPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs)

        'カレントデータのインデックスを初期値にします。

        Me._iCurrentDataIndex = 0

    End Sub


 

    ''' <summary>

    ''' PrintPageイベントハンドラ

    ''' </summary>

    ''' <param name="sender"></param>

    ''' <param name="e"></param>

    ''' <remarks></remarks>

    Protected Sub PrintDoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)


 

        '出力文字を作成

        Dim sOutPutText As String = Me._PrintData.Rows(Me._iCurrentDataIndex).Item(0).ToString


 

        '出力位置を作成

        Dim x As Integer = e.MarginBounds.Left

        Dim y As Integer = e.MarginBounds.Top

        x = 100

        y = 100


 

        '出力フォントを作成

        Dim font As New Font("MS Pゴシック", 10, FontStyle.Bold)


 

        'StringFormatを作成

        Dim strformat As New StringFormat()

        '--縦書きにする

        'strformat.FormatFlags = StringFormatFlags.DirectionVertical

        '--左詰めにする

        'strformat.Alignment = StringAlignment.Near

        '--右詰めにする

        'strformat.Alignment = StringAlignment.Far


 

        '出力

        e.Graphics.DrawString(sOutPutText, font, Brushes.Black, x, y, strformat)


 

        '破棄

        font.Dispose()

        strformat.Dispose()


 

        'カレントデータのインデックスをカウントアップします。

        Me._iCurrentDataIndex += 1


 

        '次ページがあるかどうかチェックします。

        If Me._iCurrentDataIndex < Me._PrintData.Rows.Count Then

            '--次ページあり

            e.HasMorePages = True

        Else

            '--次ページなし

            e.HasMorePages = False

        End If


 

    End Sub


 

    ''' <summary>

    ''' 印刷します。

    ''' </summary>

    ''' <remarks></remarks>

    Public Sub Print()

        Me._PrintDoc.Print()

    End Sub


 

    ''' <summary>

    ''' プレビューを表示します。

    ''' </summary>

    ''' <remarks></remarks>

    Public Sub ShowPreView()

        'PrintPreviewDialogオブジェクトの作成

        Dim view As New PrintPreviewDialog

        'プレビューするPrintDocumentを設定

        view.Document = Me._PrintDoc

        'プレビューのサイズを設定する

        view.ClientSize = New Size(900, 500)

        'プレビューズーム

        view.PrintPreviewControl.Zoom = 1

        '印刷プレビューダイアログを表示する

        view.ShowDialog()

    End Sub


 

End Class


面倒なのは総ページ数、出力ページ数、位置合わせ、改ページ処理といったところでしょうか。
PrintPageイベントハンドラないでゴニョゴニョと計算してなんとかなりました。

ハマったのはプレビュー画面から印刷したときです。
プレビューは正常に表示されるのにプレビューから印刷ができません。
プレビューを表示せずに印刷すると正常に印刷されます。
原因は、プレビューを表示する際にPrintPageイベントが発生します。プレビュー画面で印刷ボタンを押すと再度PrintPageイベントが発生します。つまりPrintPageイベントで現在の出力ページをカウントアップしている変数をどこかで初期化しないといけないようです。どこに書くのがよいかわかりませんが、BeginPrintイベントハンドラ内でカウントアップ変数を初期化しました。

ビリーザブートキャンプ

先日注文したビリーザブートキャンプ。
納期が6月末だったのですが、予約殺到のため7月中旬になってしまいました。
すごい人気ですね。
早く来ないかな。

.NET クリスタルレポート

仕事ではサードパーティ製の帳票ツールを使用することがほとんどで、クリスタルレポートをあまり使うことはありません。今回は個人的に使うちょっとしたプログラムなのでクリスタルレポートを使用しました。

そういえば、この業界に入った時は帳票プログラムばかりやらされました。帳票関係は面倒ですし、バグを出しても影響が少ないですからね。最近では帳票関係は新人さんに作ってもらっています。だって面倒だもん(ハァト)



まずクリスタルレポートを作成します。
[追加]-[新しい項目]-[Crystalレポート]です。
Crystal Reports ギャラリで[空のレポート]を選択します。


レポートが作成されます。


ツールバーの[CrystalReports]メニューより[データベース]-[データベースエキスパート]を起動します。

[プロジェクトデータ]からレポートに使用する型付DataSetを[≫]で選択します。
*ここでDataBaseに接続しデータを取り出すこともできます。

フィールドエクスプローラの[データベースフィールド]から使用するフィールドをセクションにドラッグします。*フィールドエクスプローラが表示されていない場合は、ツールバーの[CrystalReports]メニューより[フィールドエクスプローラで表示します。

とりあえずレポート側はこれで完成です。


次にプレビュー画面を作成します。
[追加]-[新しい項目]-[Windwosフォーム]です。
作成したフォームにツールボックスより[CrystalReportViewer]コントロールをドラッグします。

とりあえずプレビュー画面はこれで完成です。

後は、プレビュー画面を表示するボタンのクリックイベントに下記のコードを書きます。
Dim rpt As New CrystalReport1
rpt.SetDataSouce(データを格納したデータセット)
Form1.CrystalReportViewer1.ReportSource = rpt
Form1.ShowDialog()

ビリーザブートキャンプ

ついに買っちゃいました。
初めてTVで見た時から欲しいなぁとは思ってたのですが
それから1か月悩んだ挙句、やっと昨日買っちゃいました。
届くのは6月末らしいです。

この仕事をしている体を動かすのは手首より下だけ。
ノートパソコンより重いものは持たない。
どんどん体力がなくなりますよね。
体重に比べ体脂肪のなんて多いこと!
ほんとヤバイです。

.NET(Mobile) WindowsVista Mobile Device Center 6をインストール

過去記事WindowsXP ActiveSyncをインストール でVistaにはActiveSyncのインストールは不要と書きました。

W-ZERO3[es]との同期がうまくいかなくて調べてみると・・・
「ActiveSync」の機能のうち、エクスプローラからWindows Mobile機器内のファイルを管理する機能や「Windows Media Player」のライブラリをWindows Mobile機器へ転送する機能は、Windows Vistaが標準で備えていますが、その他の機能はMicrosoft Windows Mobile Device Center 6 for Windows Vista をインストールする必要があります。

ダウンロード先
Microsoft Windows Mobile Device Center 6 for Windows Vista (32-bit) - 日本語

.NET(Mobile) W-ZERO3[es]でブレークポイントに止まらない

W-ZERO3[es]でプログラムを実行するとブレークポイントに止まりません。
悩むこと小1時間。
W-ZERO3[es]はCompactFramework2.0 SP1がインストールされていますが
PCはCompactFramework2.0のままだったのが原因でした。

PCが変ると設定が面倒ですね・・・。

.NET VistaでVisualStudio2005を起動してみる DateTimePicker

DateTimePickerのカレンダー部の挙動が正直なところ気持ち悪いです。
yanは車や船に酔いやすいのですが、カレンダー部の挙動にも胸やけがします。

カレンダー部の挙動は下記のリンクで見られます。
http://www.ookii.org/misc/calendar.wmv
このリンク先の画像をみるだけで「ウッ」となります。