ReportViewer for ASP.NET Web Forms
ReportViewer への動的レポートの追加
レポートビューアのタスク別ヘルプ > ReportViewer への動的レポートの追加

動的レポートは、実行時に作成できます。 静的 RegisterDocument メソッドを使用して、コードビハインドから動的レポートドキュメントを登録できます。RegisterDocument メソッドは、次の2つのパラメータを受け入れます。1つ目のパラメータは動的レポートドキュメント、2つ目のパラメータはレポートドキュメントを生成するために呼び出されるデリゲートです。

サーバー側またはクライアント側で FileName プロパティを変更することによって、複数の動的レポートを異なる名前で登録し、これらのレポートを切り替えることができます。

以下の例では、動的レポートドキュメントを登録および表示する方法を示します。 以下の手順を実行します。

  1. ソースビューで、次のように <cc1:C1ReportViewer> マークアップを編集します。

    XAML
    コードのコピー
    <cc1:C1ReportViewer runat="server" ID="C1ReportViewer1" FileName="InMemoryBasicTable" Zoom="75%" Height="475px" Width="100%">
    </cc1:C1ReportViewer>
    
  2. コードビューに切り替えて、次に示すように 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);
    }
    
  3. 次のコードをメインクラスの直下に追加します。

    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;
        }
    }
    

    このコードは、C1PrintDocument テーブル内の機能の一部を示します。

このトピックの作業結果

アプリケーションを実行し、実行時にリンクの1つをクリックして C1ReportViewer に含まれる親コンテナのサイズを変更します。 C1ReportViewer コントロールは、親コンテナと共にサイズ変更されることに注意してください。