動的レポートは、実行時に作成できます。 静的 RegisterDocument メソッドを使用して、コードビハインドから動的レポートドキュメントを登録できます。RegisterDocument メソッドは、次の2つのパラメータを受け入れます。1つ目のパラメータは動的レポートドキュメント、2つ目のパラメータはレポートドキュメントを生成するために呼び出されるデリゲートです。
以下の例では、動的レポートドキュメントを登録および表示する方法を示します。 以下の手順を実行します。
ソースビューで、次のように <cc1:C1ReportViewer> マークアップを編集します。
XAML |
コードのコピー
|
---|---|
<cc1:C1ReportViewer runat="server" ID="C1ReportViewer1" FileName="InMemoryBasicTable" Zoom="75%" Height="475px" Width="100%"> </cc1:C1ReportViewer> |
コードビューに切り替えて、次に示すように Page_Load イベントにコードを追加します。
Visual Basic |
コードのコピー
|
---|---|
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
C1ReportViewer.RegisterDocument("InMemoryBasicTable", AddressOf BasicTable.MakeDoc)
End Sub
|
C# |
コードのコピー
|
---|---|
protected void Page_Load(object sender, EventArgs e) { C1ReportViewer.RegisterDocument("InMemoryBasicTable", BasicTable.MakeDoc); } |
次のコードをメインクラスの直下に追加します。
Visual Basic |
コードのコピー
|
---|---|
''' <summary> ''' メモリ内ドキュメントの BasicTable。 ''' </summary> Public Class BasicTable Public Shared Function MakeDoc() As C1PrintDocument Dim doc As C1PrintDocument = C1ReportViewer.CreateC1PrintDocument() Dim rtxt1 As New RenderText(doc) rtxt1.Text = "このテストは C1PrintDocument 内のテーブルの基本機能を示します。" & vbLf & vbTab & "- テーブルの枠線(外側の線を4本、内側の線を2本指定できる GridLines スタイルプロパティ);" & vbLf & vbTab & "- 個々のセルおよびセルのグループの枠線;" & vbLf & vbTab & "- 離ればなれのセルのグループのスタイル属性(枠線を含む);" & vbLf & vbTab & "- セルの行および列のスパン;" & vbLf & vbTab & "- セル内のコンテンツの配置(スパンまたはその逆);" & vbLf & vbTab & "- テーブルヘッダーおよびフッター;" & vbLf & vbTab & "- ドキュメント内の任意の場所にあるタグ(ページ番号/総ページ数など)(テーブルフッターを参照);" & vbLf & vbTab & "- 枠線、フォント、および背景画像を含む各種スタイル属性。" & vbLf & vbTab & " " & vbLf rtxt1.Style.Font = New Font(rtxt1.Style.Font.FontFamily, 14) rtxt1.Style.Padding.Bottom = New C1.C1Preview.Unit("5mm") doc.Body.Children.Add(rtxt1) ' ' テーブルを作成し、そのセルのすべてにデモデータを入力します Dim rt1 As New RenderTable(doc) Const ROWS As Integer = 100 Const COLS As Integer = 4 For row As Integer = 0 To ROWS - 1 For col As Integer = 0 To COLS - 1 Dim celltext As New RenderText(doc) celltext.Text = String.Format("Cell ({0},{1})", row, col) ' rt1.Cells[row, col] はセルをオンデマンドで作成することに注意してください。 ' 最初に行/列の数を指定する必要はありません。 rt1.Cells(row, col).RenderObject = celltext Next Next ' テーブルをドキュメントに追加します doc.Body.Children.Add(rt1) ' ' 古い印刷ドキュメントとは異なり、新しい印刷ドキュメントではプログラムの ' どの時点でも変更を加えることができ、変更内容はドキュメントが表示されるときに ' 反映されます。 テーブルにカスタマイズを追加します。 ' ' デフォルトでは、テーブルに枠線はありません。単純な枠線を追加します。 rt1.Style.GridLines.All = New LineDef("2pt", Color.DarkGray) rt1.Style.GridLines.Horz = New LineDef("1pt", Color.Blue) rt1.Style.GridLines.Vert = New LineDef("1pt", Color.Brown) ' ' テーブルヘッダーおよびフッター ' テーブルヘッダーを追加します。 ' 全体としてヘッダーを設定します rt1.RowGroups(0, 2).PageHeader = True rt1.RowGroups(0, 2).Style.BackColor = Color.DarkOrchid ' スタイルでサポートされる複数の継承: グループのスタイルからの ' テキストの色はセル自体のスタイルからのフォントにマージされます。 rt1.RowGroups(0, 2).Style.TextColor = Color.LemonChiffon rt1.RowGroups(0, 2).Style.GridLines.All = New LineDef("2pt", Color.DarkCyan) rt1.RowGroups(0, 2).Style.GridLines.Horz = LineDef.Empty rt1.RowGroups(0, 2).Style.GridLines.Vert = LineDef.Empty ' ヘッダー内に特定のセルを設定します。 DirectCast(rt1.Cells(0, 0).RenderObject, RenderText).Text = "Header row 0" DirectCast(rt1.Cells(1, 0).RenderObject, RenderText).Text = "Header row 1" rt1.Cells(0, 1).SpanCols = 2 rt1.Cells(0, 1).SpanRows = 2 rt1.Cells(0, 1).RenderObject = New RenderText(doc) DirectCast(rt1.Cells(0, 1).RenderObject, RenderText).Text = "複数行のテーブルヘッダーとテーブルフッターがサポートされます" rt1.Cells(0, 1).Style.TextAlignHorz = AlignHorzEnum.Center rt1.Cells(0, 1).Style.Font = New Font("Arial", 14, FontStyle.Bold) ' テーブルヘッダーを設定します rt1.RowGroups(rt1.Rows.Count - 2, 2).PageFooter = True rt1.RowGroups(rt1.Rows.Count - 2, 2).Style.BackColor = Color.LemonChiffon rt1.Cells(rt1.Rows.Count - 2, 0).SpanRows = 2 rt1.Cells(rt1.Rows.Count - 2, 0).SpanCols = rt1.Cols.Count - 1 rt1.Cells(rt1.Rows.Count - 2, 0).Style.TextAlignHorz = AlignHorzEnum.Center rt1.Cells(rt1.Rows.Count - 2, 0).Style.TextAlignVert = AlignVertEnum.Center DirectCast(rt1.Cells(rt1.Rows.Count - 2, 0).RenderObject, RenderText).Text = "これはテーブルヘッダーです。" rt1.Cells(rt1.Rows.Count - 2, 3).SpanRows = 2 rt1.Cells(rt1.Rows.Count - 2, 3).Style.TextAlignHorz = AlignHorzEnum.Right ' タグ(ページ番号/ページ数など)は、ドキュメントの任意の場所に挿入できます DirectCast(rt1.Cells(rt1.Rows.Count - 2, 3).RenderObject, RenderText).Text = "[PageNo]/[PageCount] ページ" ' ' デーブルでは、Style.Borders はテーブルのグリッド線にシームレスにマージされます ' 特定のセルに枠線を設定するのは簡単です。 rt1.Cells(8, 3).Style.Borders.All = New LineDef("3pt", Color.OrangeRed) DirectCast(rt1.Cells(8, 3).RenderObject, RenderText).Text = "cell.Style.Borders を使用して単一セルに枠線を設定するのは簡単です" ' ' セルをグループに結合し、それらのスタイルを単一エンティティとして ' 操作できます。 ' セルをバインドする矩形を指定することによって、セルのグループを定義します。 DirectCast(rt1.Cells(3, 2).RenderObject, RenderText).Text = "セルをグループに結合し、単一エンティティとして操作できます" & "(このテーブル内の青緑色の背景のすべてのセルなど)。" rt1.Cells(3, 2).SpanCols = 2 rt1.Cells(3, 2).SpanRows = 3 Dim cells1 As Rectangle() = New Rectangle() {New Rectangle(2, 3, 2, 3), New Rectangle(0, 10, 3, 2), New Rectangle(1, 23, 2, 4), New Rectangle(1, 36, 1, 24), New Rectangle(0, 72, 3, 6)} Dim grp1 As New UserCellGroup(cells1) grp1.Style.BackColor = Color.PaleGreen grp1.Style.Font = New Font("Arial", 12, FontStyle.Bold) grp1.Style.Borders.All = New LineDef("2pt", Color.DarkGreen) rt1.UserCellGroups.Add(grp1) ' 行/列のスパン DirectCast(rt1.Cells(14, 1).RenderObject, RenderText).Text = "列と行のスパンおよび(スパンまたはその逆)のセル内の配置が完全にサポートされます。" rt1.Cells(14, 1).SpanCols = 3 rt1.Cells(14, 1).SpanRows = 5 rt1.Cells(14, 1).Style.Font = New Font("Arial", 12, FontStyle.Bold Or FontStyle.Italic) rt1.Cells(14, 1).Style.Borders.All = New LineDef("2pt", Color.DarkOrange) rt1.Cells(14, 1).Style.TextAlignHorz = AlignHorzEnum.Center rt1.Cells(14, 1).Style.TextAlignVert = AlignVertEnum.Center rt1.RowGroups(14, 5).SplitBehavior = SplitBehaviorEnum.Never Return doc End Function End Class |
C# |
コードのコピー
|
---|---|
/// <summary> /// メモリ内ドキュメントの BasicTable。 /// </summary> public class BasicTable { static public C1PrintDocument MakeDoc() { C1PrintDocument doc = C1ReportViewer.CreateC1PrintDocument(); RenderText rtxt1 = new RenderText(doc); rtxt1.Text = "このテストは C1PrintDocument 内のテーブルの基本機能を示します。\n" + "\t- テーブルの枠線(外側の線を4本、内側の線を2本指定できる GridLines スタイルプロパティ);\n" + "\t- 個々のセルおよびセルのグループの枠線;\n" + "\t- 離ればなれのセルのグループのスタイル属性(枠線を含む);\n" + "\t- セルの行および列のスパン;\n" + "\t- セル内のコンテンツの配置(スパンまたはその逆);\n" + "\t- テーブルヘッダーおよびフッター;\n" + "\t- ドキュメント内の任意の場所にあるタグ(ページ番号/総ページ数など)(テーブルフッターを参照);\n" + "\t- 枠線、フォント、および背景画像を含む各種スタイル属性。;\n" + "\t \n" ; rtxt1.Style.Font = new Font(rtxt1.Style.Font.FontFamily, 14); rtxt1.Style.Padding.Bottom = new C1.C1Preview.Unit("5mm"); doc.Body.Children.Add(rtxt1); // // テーブルを作成し、そのセルのすべてにデモデータを入力します RenderTable rt1 = new RenderTable(doc); const int ROWS = 100; const int COLS = 4; for (int row = 0; row < ROWS; ++row) { for (int col = 0; col < COLS; ++col) { RenderText celltext = new RenderText(doc); celltext.Text = string.Format("Cell ({0},{1})", row, col); // rt1.Cells[row, col] はセルをオンデマンドで作成することに注意してください。 // 最初に行/列の数を指定する必要はありません。 rt1.Cells[row, col].RenderObject = celltext; } } // テーブルをドキュメントに追加します doc.Body.Children.Add(rt1); // // 古い印刷ドキュメントとは異なり、新しい印刷ドキュメントではプログラムの // どの時点でも変更を加えることができ、変更内容はドキュメントが表示されるときに // 表示されます。 テーブルにカスタマイズを追加します。 // // デフォルトでは、テーブルに枠線はありません。単純な枠線を追加します。 rt1.Style.GridLines.All = new LineDef("2pt", Color.DarkGray); rt1.Style.GridLines.Horz = new LineDef("1pt", Color.Blue); rt1.Style.GridLines.Vert = new LineDef("1pt", Color.Brown); // // テーブルヘッダーおよびフッター // テーブルヘッダーを追加します。 // 全体としてヘッダーを設定します rt1.RowGroups[0, 2].PageHeader = true; rt1.RowGroups[0, 2].Style.BackColor = Color.DarkOrchid; // タイルでサポートされる複数の継承: グループのスタイルからの // テキストの色はセル自体のスタイルからのフォントにマージされます。 rt1.RowGroups[0, 2].Style.TextColor = Color.LemonChiffon; rt1.RowGroups[0, 2].Style.GridLines.All = new LineDef("2pt", Color.DarkCyan); rt1.RowGroups[0, 2].Style.GridLines.Horz = LineDef.Empty; rt1.RowGroups[0, 2].Style.GridLines.Vert = LineDef.Empty; // ヘッダー内に特定のセルを設定します。 ((RenderText)rt1.Cells[0, 0].RenderObject).Text = "Header row 0"; ((RenderText)rt1.Cells[1, 0].RenderObject).Text = "ヘッダー行1"; rt1.Cells[0, 1].SpanCols = 2; rt1.Cells[0, 1].SpanRows = 2; rt1.Cells[0, 1].RenderObject = new RenderText(doc); ((RenderText)rt1.Cells[0, 1].RenderObject).Text = "複数行のテーブルヘッダーとテーブルフッターがサポートされます"; rt1.Cells[0, 1].Style.TextAlignHorz = AlignHorzEnum.Center; rt1.Cells[0, 1].Style.Font = new Font("Arial", 14, FontStyle.Bold); // テーブルヘッダーを設定します rt1.RowGroups[rt1.Rows.Count - 2, 2].PageFooter = true; rt1.RowGroups[rt1.Rows.Count - 2, 2].Style.BackColor = Color.LemonChiffon; rt1.Cells[rt1.Rows.Count - 2, 0].SpanRows = 2; rt1.Cells[rt1.Rows.Count - 2, 0].SpanCols = rt1.Cols.Count - 1; rt1.Cells[rt1.Rows.Count - 2, 0].Style.TextAlignHorz = AlignHorzEnum.Center; rt1.Cells[rt1.Rows.Count - 2, 0].Style.TextAlignVert = AlignVertEnum.Center; ((RenderText)rt1.Cells[rt1.Rows.Count - 2, 0].RenderObject).Text = "これはテーブルヘッダーです。"; rt1.Cells[rt1.Rows.Count - 2, 3].SpanRows = 2; rt1.Cells[rt1.Rows.Count - 2, 3].Style.TextAlignHorz = AlignHorzEnum.Right; // タグ(ページ番号/ページ数など)は、ドキュメントの任意の場所に挿入できます ((RenderText)rt1.Cells[rt1.Rows.Count - 2, 3].RenderObject).Text = "[PageNo]/[PageCount] ページ"; // // デーブルでは、Style.Borders はテーブルのグリッド線にシームレスにマージされます。 // 特定のセルに枠線を設定するのは簡単です。 rt1.Cells[8, 3].Style.Borders.All = new LineDef("3pt", Color.OrangeRed); ((RenderText)rt1.Cells[8, 3].RenderObject).Text = "cell.Style.Borders を使用して単一セルに枠線を設定するのは簡単です"; // // セルをグループに結合し、それらのスタイルを単一エンティティとして // 操作できます。 // セルをバインドする矩形を指定することによって、セルのグループを定義します。 ((RenderText)rt1.Cells[3, 2].RenderObject).Text = "セルをグループに結合して単一エンティティとして操作できます" + "(このテーブル内の青緑色の背景のすべてのセルなど)。"; rt1.Cells[3, 2].SpanCols = 2; rt1.Cells[3, 2].SpanRows = 3; Rectangle[] cells1 = new Rectangle[] { new Rectangle(2, 3, 2, 3), new Rectangle(0, 10, 3, 2), new Rectangle(1, 23, 2, 4), new Rectangle(1, 36, 1, 24), new Rectangle(0, 72, 3, 6), }; UserCellGroup grp1 = new UserCellGroup(cells1); grp1.Style.BackColor = Color.PaleGreen; grp1.Style.Font = new Font("Arial", 12, FontStyle.Bold); grp1.Style.Borders.All = new LineDef("2pt", Color.DarkGreen); rt1.UserCellGroups.Add(grp1); // 行/列のスパン ((RenderText)rt1.Cells[14, 1].RenderObject).Text = "列と行のスパンおよび(スパンまたはその逆)のセル内の配置が完全にサポートされます。"; rt1.Cells[14, 1].SpanCols = 3; rt1.Cells[14, 1].SpanRows = 5; rt1.Cells[14, 1].Style.Font = new Font("Arial", 12, FontStyle.Bold rt1.Cells[14, 1].Style.Borders.All = new LineDef("2pt", Color.DarkOrange); rt1.Cells[14, 1].Style.TextAlignHorz = AlignHorzEnum.Center; rt1.Cells[14, 1].Style.TextAlignVert = AlignVertEnum.Center; rt1.RowGroups[14, 5].SplitBehavior = SplitBehaviorEnum.Never; return doc; } } |
アプリケーションを実行し、実行時にリンクの1つをクリックして C1ReportViewer に含まれる親コンテナのサイズを変更します。 C1ReportViewer コントロールは、親コンテナと共にサイズ変更されることに注意してください。