Imports Infragistics.Windows.Reporting Imports Infragistics.Windows.Reporting.Events Imports Infragistics.Windows.DataPresenter Imports Infragistics.Windows.DataPresenter.Events
Report オブジェクトの Print または Export メソッドを呼び出すと、WPF レポーティング エンジンは DataPresenter コントロールの状態を正確にそのまま印刷/エクスポートします。プリントアウトまたはエクスポートされたファイルは、印刷またはエクスポート前にエンドユーザーが DataPresenter コントロールをどのように操作するのかに基づいています。
幸い、 EmbeddedVisualReportSection オブジェクトは、ページング関連のイベントを公開しているので、それを処理することで、WPF レポーティング エンジンが印刷/エクスポートする DataPresenter コントロールのコピーへの参照を取得できます。この参照を使用すると、DataPresenter コントロールのプロパティを設定したり、イベントハンドラーを DataPresenter が公開するイベントにアタッチできます。特に、 FieldLayoutInitialized イベントまたは InitializeRecord イベントを処理すると、それぞれ、フィールド/フィールド レイアウト プロパティまたはレコード プロパティを設定できます。DataPresenter コントロールへの参照はコピーなので、コピーに対してプロパティを設定しても、ユーザー インターフェイス上の DataPresenter コントロールは変更されません。
EmbeddedVisualReportSection オブジェクトのイベントのペアを処理して、WPF レポーティング エンジンが印刷/エクスポートする xamDataGrid コントロールのコピーへの参照を取得します。イベント ハンドラーに DataPresenter コントロールへの参照を確保したら、イベント ハンドラーを DataPresenter コントロールの InitializeRecord イベントに追加して、すべての偶数番目のレコードを非表示にできます。最後に、DataPresenter コントロールの InitializeRecord イベントのイベントハンドラーおよび EmbeddedVisualReportSection オブジェクトのイベントのペアを削除します。
また、コード例は、EmbeddedVisualReportSection オブジェクトを作成するときに xamDataGrid コントロールを参照しますが、それを xamDataPresenter コントロールまたは xamDataCarousel コントロールに置換できます。このコード例には、 xamDataGrid を階層データにバインド、 xamDataGrid をページに追加、または xamDataGrid コントロールを使用した WPF レポートをページに追加 の個々の手順を示すことや説明は含まれません。
コード ビハインドを開き、コード ビハインド内に using/Imports のディレクティブを配置すれば、メンバーの完全に記述された名前を常にタイプする必要がなくなります。
Visual Basic の場合:
Imports Infragistics.Windows.Reporting Imports Infragistics.Windows.Reporting.Events Imports Infragistics.Windows.DataPresenter Imports Infragistics.Windows.DataPresenter.Events
C# の場合:
using Infragistics.Windows.Reporting; using Infragistics.Windows.Reporting.Events; using Infragistics.Windows.DataPresenter; using Infragistics.Windows.DataPresenter.Events;
xamDataGrid コントロールを使用してレポートを作成します。
このコード例では、使用する xamDataGrid コントロールの名前が xamDataGrid1 であることを前提としています。
Visual Basic の場合:
Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Dim report1 As New Report() Dim section1 As New EmbeddedVisualReportSection(Me.xamDataGrid1) report1.Sections.Add(section1) 'TODO: イベント ハンドラーを section1 にアタッチします 'TODO: レポートを印刷またはエクスポートします 'TODO: イベント ハンドラーを section1 から削除します End Sub
C# の場合:
private void Button_Click(object sender, RoutedEventArgs e) { Report report1 = new Report(); EmbeddedVisualReportSection section1 = new EmbeddedVisualReportSection(this.xamDataGrid1); report1.Sections.Add(section1); //TODO: イベント ハンドラーを section1 にアタッチします //TODO: レポートを印刷またはエクスポートします //TODO: イベント ハンドラーを section1 から削除します }
EmbeddedVisualReportSection オブジェクトの PaginationStarting イベントにイベント ハンドラーをアタッチします。
EmbeddedVisualReportSection オブジェクトは、Report オブジェクトの Print または Export メソッドを呼び出すときに PaginationStarting イベントを発生させます。
Visual Basic の場合:
AddHandler section1.PaginationStarting, New EventHandler(Of EmbeddedVisualPaginationEventArgs)(AddressOf section1_PaginationStarting)
C# の場合:
section1.PaginationStarting += new EventHandler<EmbeddedVisualPaginationEventArgs>(section1_PaginationStarting);
EmbeddedVisualReportSection オブジェクトの PaginationEnded イベントにイベント ハンドラーをアタッチします。
Visual Basic の場合:
AddHandler section1.PaginationEnded, New EventHandler(Of EmbeddedVisualPaginationEventArgs)(AddressOf section1_PaginationEnded)
C# の場合:
section1.PaginationEnded += new EventHandler<EmbeddedVisualPaginationEventArgs>(section1_PaginationEnded);
レポートを印刷します。
Visual Basic の場合:
report1.Print()
C# の場合:
report1.Print();
PaginationStarting イベントのイベント ハンドラーを EmbeddedVisualReportSection オブジェクトから削除します。
Visual Basic の場合:
RemoveHandler section1.PaginationStarting, AddressOf section1_PaginationStarting
C# の場合:
section1.PaginationStarting -= section1_PaginationStarting;
PaginationEnded イベントのイベント ハンドラーを EmbeddedVisualReportSection オブジェクトから削除します。
Visual Basic の場合:
RemoveHandler section1.PaginationEnded, AddressOf section1_PaginationEnded
C# の場合:
section1.PaginationEnded -= section1_PaginationEnded;
PaginationStarting イベント ハンドラーを検索します。
Visual Basic の場合:
Private Sub section1_PaginationStarting(ByVal sender As Object, ByVal e As EmbeddedVisualPaginationEventArgs) 'TODO: DataPresenterBase クラスへの TryCast e.VisualPaginator 'TODO: イベントを xamDataGrid コントロールにアタッチします。 End Sub
C# の場合:
private void section1_PaginationStarting(object sender, EmbeddedVisualPaginationEventArgs e) { //TODO: e.VisualPaginator を DataPresenterBase クラスへキャストすることを試みます。 //TODO: イベントを xamDataGrid コントロールにアタッチします。 }
EmbeddedVisualPaginationEventArgs オブジェクトの VisualPaginator プロパティを DataBasePresenter クラスへキャストすることを試みます。
Visual Basic の場合:
Dim presenter As DataPresenterBase = TryCast(e.VisualPaginator, DataPresenterBase)
C# の場合:
DataPresenterBase presenter = e.VisualPaginator as DataPresenterBase;
キャストが成功した場合、イベント ハンドラーを DataPresenterBase オブジェクトの InitializeRecord イベントにアタッチします。
イベント ハンドラーを DataPresenterBase が公開するほかのイベントにアタッチすることもできます。
Visual Basic の場合:
If presenter IsNot Nothing AddHandler presenter.InitializeRecord, New EventHandler(Of InitializeRecordEventArgs)(AddressOf presenter_InitializeRecord) ' 注: イベント ハンドラーを DataPresenterBase が公開するほかのイベントにアタッチすることもできます。 End If
C# の場合:
if(presenter != null) { presenter.InitializeRecord += new EventHandler<InitializeRecordEventArgs>(presenter_InitializeRecord); // 注: イベント ハンドラーを DataPresenterBase が公開するほかのイベントにアタッチすることもできます。 }
PaginationEnded イベント ハンドラーを検索します。
Visual Basic の場合:
Private Sub section1_PaginationEnded(ByVal sender As Object, ByVal e As EmbeddedVisualPaginationEventArgs) 'TODO: e.VisualPaginator を DataPresenterBase クラスへキャストすることを試みます。 'TODO: キャストが成功した場合、DataPresenterBase オブジェクトからイベント ハンドラーを削除します。 End Sub
C# の場合:
private void section1_PaginationEnded(object sender, EmbeddedVisualPaginationEventArgs e) { //TODO: e.VisualPaginator を DataPresenterBase クラスへキャストすることを試みます。 //TODO: キャストが成功した場合、DataPresenterBase オブジェクトからイベント ハンドラーを削除します。 }
EmbeddedVisualPaginationEventArgs オブジェクトの VisualPaginator プロパティを DataPresenterBase クラスへキャストすることを試みます。
Visual Basic の場合:
Dim presenter As DataPresenterBase = TryCast(e.VisualPaginator, DataPresenterBase)
C# の場合:
DataPresenterBase presenter = e.VisualPaginator as DataPresenterBase;
キャストが成功した場合、イベント ハンドラーを DataPresenterBase オブジェクトの InitializeRecord イベントから削除します。
DataPresenterBase クラスが公開するほかのイベントを登録している場合、それらのイベントも同様に削除します。
Visual Basic の場合:
If presenter IsNot Nothing RemoveHandler presenter.InitializeRecord, AddressOf presenter_InitializeRecord ' イベント ハンドラーを DataPresenterBase が公開するイベントからかならず削除してください。 End If
C# の場合:
if(presenter != null) { presenter.InitializeRecord -= presenter_InitializeRecord; // イベント ハンドラーを DataPresenterBase が公開するイベントからかならず削除してください。 }
InitializeRecord イベント ハンドラーを検索します。
Visual Basic の場合:
Private Sub presenter_InitializeRecord(ByVal sender As Object, ByVal e As InitializeRecordEventArgs) 'TODO: インデックス % 2 が 0 のレコードを展開します。 End Sub
C# の場合:
private void presenter_InitializeRecord(object sender, InitializeRecordEventArgs e) { //TODO: インデックス % 2 が 0 のレコードを展開します。 }
レコードが偶数番目のレコードの場合、Visibility プロパティを Collapsed を設定することで、それを非表示にします。
Visual Basic の場合:
If e.Record.Index Mod 2 = 0 Then e.Record.Visibility = Visibility.Collapsed End If
C# の場合:
if(e.Record.Index % 2 == 0) { e.Record.Visibility = Visibility.Collapsed; }
プロジェクトを実行します。
xamDataGrid コントロールを印刷するとき、WPF レポーティング エンジンは奇数番目のレコードのみを印刷します。