このクラスは、複数のグリッドを、他のカスタムコンテンツと共に既存の System.Drawing.Printing.PrintDocumentオブジェクトに出力するために使用できます。
それを使用するには、出力するグリッドごとに1つの PrintDocumentGridRenderer を作成します。それから、ドキュメントのイベントを処理して、 CurrentPageプロパティの値が PageCountに等しくなるまでレンダラの C1.Win.FlexGrid.PrintDocumentGridRenderer.PrintPage(System.Drawing.Printing.PrintPageEventArgs)イベントを呼び出します。
下のコードは、2つのグリッドをレンダリングして1つの System.Drawing.Printing.PrintDocumentに出力します。Imports System.Data Imports C1.Win.FlexGrid Private _g1, _g2 As PrintDocumentGridRenderer Private printDocument1 As Printing.PrintDocument = New Printing.PrintDocument() Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'データ設定 Dim i, j As Integer flex1.Rows.Count = 20 flex1.Cols.Count = 5 i = 0 Do While (i < flex1.Rows.Count) j = 0 Do While (j < flex1.Rows.Count) flex1(i, j) = ((100 + i).ToString + " " + j.ToString) j = j + 1 Loop i = (i + 1) Loop flex2.Rows.Count = 20 flex2.Cols.Count = 5 i = 0 Do While (i < flex2.Rows.Count) j = 0 Do While (j < flex2.Rows.Count) flex2(i, j) = ((200 + i).ToString + " " + j.ToString) j = j + 1 Loop i = (i + 1) Loop AddHandler printDocument1.BeginPrint, AddressOf printDocument1_BeginPrint AddHandler printDocument1.PrintPage, AddressOf printDocument1_PrintPage End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'ボタンのクリック時、印刷プレビューダイアログを表示します。 Using dlg As New PrintPreviewDialog() dlg.Document = Me.printDocument1 dlg.ShowDialog(Me) End Using End Sub Private Sub printDocument1_BeginPrint(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintEventArgs) 'グリッドのレンダラを作成し、印刷オプションを設定します。 _g1 = New PrintDocumentGridRenderer(flex1) _g1.Options = PrintGridFlags.ActualSize 'グリッドのレンダラを作成し、印刷オプションを設定します。 _g2 = New PrintDocumentGridRenderer(flex2) _g2.Options = PrintGridFlags.FitToPageWidth Or PrintGridFlags.ExtendLastCol End Sub Private Sub printDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) ' 1つめのグリッドをレンダリングします。 If (_g1.CurrentPage < _g1.PageCount) Then _g1.PrintPage(e) e.HasMorePages = True ' 2つめのグリッドをレンダリングします。 ElseIf (_g2.CurrentPage < _g2.PageCount) Then _g2.PrintPage(e) e.HasMorePages = _g2.CurrentPage < _g2.PageCount End If End Sub
using C1.Win.FlexGrid; using System.Drawing.Printing; PrintDocumentGridRenderer _g1, _g2; PrintDocument printDocument1 = new PrintDocument(); private void Form1_Load(object sender, EventArgs e) { // データ設定 flex1.Rows.Count = 20; flex1.Cols.Count = 5; for (int i = 0; i < flex1.Rows.Count; i++) { for (int j = 0; j < flex1.Rows.Count; j++) { flex1[i, j] = (100 + i).ToString() + " " + j.ToString(); } } flex2.Rows.Count = 20; flex2.Cols.Count = 5; for (int i = 0; i < flex2.Rows.Count; i++) { for (int j = 0; j < flex2.Rows.Count; j++) { flex2[i, j] = (200 + i).ToString() + " " + j.ToString(); } } // PrintDocumentGridRenderer クラス 302(1) printDocument1.BeginPrint += printDocument1_BeginPrint; printDocument1.PrintPage += printDocument1_PrintPage; } private void button1_Click(object sender, EventArgs e) { //ボタンのクリック時、印刷プレビューダイアログを表示します。 using (PrintPreviewDialog dlg = new PrintPreviewDialog()) { dlg.Document = this.printDocument1; dlg.ShowDialog(this); } } void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e) { // グリッドのレンダラを作成し、印刷オプションを設定します。 _g1 = new PrintDocumentGridRenderer(flex1); _g1.Options = PrintGridFlags.ActualSize; // グリッドのレンダラを作成し、印刷オプションを設定します。 _g2 = new PrintDocumentGridRenderer(flex2); _g2.Options = PrintGridFlags.FitToPageWidth | PrintGridFlags.ExtendLastCol; } void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { // 1つめのグリッドをレンダリングします。 if (_g1.CurrentPage < _g1.PageCount) { _g1.PrintPage(e); e.HasMorePages = true; } // 2つめのグリッドをレンダリングします。 else if (_g2.CurrentPage < _g2.PageCount) { _g2.PrintPage(e); e.HasMorePages = _g2.CurrentPage < _g2.PageCount; } }
System.Object
C1.Win.FlexGrid.PrintDocumentGridRenderer