チュートリアル : ReportViewer レポートの作成

このチュートリアルでは、AdventureWorks サンプル データベースを使用して、Microsoft Visual Studio 2008 Windows アプリケーション プロジェクトのテーブル形式の簡単なレポートを作成する方法について説明します。プロジェクトへのレポート テンプレートの追加、AdventureWorks データベースの接続情報のセットアップ、クエリの定義、テーブル データ領域の追加、およびアプリケーションのユーザーがレポートを表示できるようにするための Windows フォームへの ReportViewer Windows フォーム コントロールの追加を行います。

前提条件

このチュートリアルを使用するには、SQL Server 2005 の AdventureWorks サンプル データベースへのアクセス権が必要です。以前のバージョンの AdventureWorks を使用すると、クエリは失敗します。SQL Server 2005 バージョンの AdventureWorks データベースの入手方法の詳細については、「チュートリアル : AdventureWorks データベースのインストール」を参照してください。

このチュートリアルでは、Transaction-SQL クエリと ADO.NET の DataSet オブジェクトおよび DataTable オブジェクトについて理解していることを前提としています。

新しい Windows ベースのアプリケーション プロジェクトを作成するには

  1. Visual Studio を開きます。[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [プロジェクトの種類] ペインで、[Visual Basic] を選択します。

  3. [テンプレート] ペインで、[Windows アプリケーション] を選択して Microsoft Windows ベースのアプリケーションを作成します。

  4. [ファイル名] ボックスに「SimpleReport」と入力します。

  5. [場所] ボックスにプロジェクトを保存するディレクトリを入力するか、[参照] をクリックしてディレクトリを選択します。

    Windows フォーム デザイナが開き、作成したプロジェクトの Form1 が表示されます。

  6. フォームをクリックします。[表示] メニューの [プロパティ ウィンドウ] をクリックします。[サイズ] プロパティを展開して [幅] および [高さ] を表示します。[幅] を 500 ピクセルに設定します。

データ ソース接続とデータ テーブルを定義するには

  1. ソリューション エクスプローラで、SimpleReport という名前のプロジェクト (ソリューションではない) を右クリックし、[追加] をポイントして [新しい項目] をクリックします。ソリューション エクスプローラ ウィンドウが表示されない場合は、[表示] メニューの [ソリューション エクスプローラ] をクリックします。

  2. [新しい項目の追加] ダイアログで、[データセット] をクリックします。データセットの名前を入力して [追加] をクリックします。既定の名前は DataSet1.xsd です。

    これにより、新しい XSD ファイルがプロジェクトに追加され、データセット デザイナが開きます。

  3. [表示] メニューの [デザイナ] をクリックします。ツールボックスを開き、[TableAdapter] コントロールをデータセット デザイン画面にドラッグします。

    これにより、TableAdapter 構成ウィザードが起動します。

  4. [データ接続の選択] ページで [新しい接続] をクリックします。

  5. [接続の追加] ページで、次の手順を実行します。

    • [データ ソース] ボックスで [Microsoft SQL Server] を選択します。

    • [サーバー名] ボックスに、AdventureWorks データベースが配置されているサーバーの名前を入力します。

      SQL Server Express の既定のインスタンスは (local)\sqlexpress です。

    • ドロップダウン リストで [AdventureWorks] をクリックします。

    • [OK] をクリックしてウィザードに戻り、[次へ] をクリックします。

  6. [接続文字列をアプリケーション構成ファイルに保存する] ページで、接続文字列の名前を入力するか、既定の [AdventureWorksConnectionString] を受け入れます。[次へ] をクリックします。

  7. [コマンドの種類を選択します] ページで [SQL ステートメントを使用する] を選択し、[次へ] をクリックします。

  8. [SQL ステートメントの入力] ページで、AdventureWorks データベースから売上データを取得するための次の Transact-SQL クエリを入力し、[完了] をクリックします。

    SELECT  S.OrderDate, S.SalesOrderNumber, S.TotalDue AS TotalSales, 
            C.FirstName, C.LastName
    FROM    HumanResources.Employee E INNER JOIN
            Person.Contact C ON E.ContactID = C.ContactID INNER JOIN
            Sales.SalesOrderHeader S ON E.EmployeeID = S.SalesPersonID
    

    [クエリ ビルダ] ボタンをクリックし、クエリ ビルダを使用してクエリを作成し、[クエリの実行] ボタンを使用してクエリを検証することもできます。

    データセット デザイナに、DataTable1DataTable 定義が表示されます。このデータ テーブル内のフィールドの名前は、クエリの列および列の別名 (OrderDateSalesOrderNumberTotalSalesFirstName、および LastName) に基づいています。レポート データ領域にデータをバインドする際は、[データ ソース] ウィンドウからこれらのフィールドを使用します。

    [!メモ]

    データ テーブル内のフィールドを変更する必要がある場合は、[データセット デザイナ] ページで DataTable1 ヘッダーまたは DataTable1TableAdapter ヘッダーを右クリックします。[構成] を選択し、TableAdapter 構成ウィザードを再起動します。

新しいレポート定義ファイルを追加するには

  1. [プロジェクト] メニューの [追加] をポイントし、[新しい項目] をクリックします。

  2. [新しい項目の追加] ダイアログ ボックスで、[レポート] をクリックします。

  3. [ファイル名] に「Sales Orders.rdlc」と入力し、[追加] をクリックしてグラフィック デザイン画面を開きます。

    グラフィック デザイン画面は、Visual Studio 2008 のレポート デザイナ コンポーネントの一部です。

レポート レイアウトにテーブルを追加するには

  1. グラフィック デザイン モードの Sales Orders.rdlc で、[表示] メニューから [ツールボックス] をクリックします。

    ツールボックスが開きます。

  2. ツールボックスの [データ] セクションで [テーブル] をクリックし、レポート デザイン画面をクリックします。

    レポート デザイナにより、レポートの幅に合わせた、3 列のテーブルが表示されます。

  3. テーブルをクリックし、列ハンドルおよび行ハンドルをテーブルの上部および横に表示します。

  4. 最初の列でハンドルを右クリックし、[左に列を挿入] をクリックします。

  5. table1 の [プロパティ] ウィンドウで、[サイズ] ノードを展開します。既定では、[プロパティ] ウィンドウはソリューション エクスプローラの下にドッキングされています。このウィンドウは、[表示] メニューから [プロパティ ウィンドウ] をクリックして開くこともできます。

  6. [サイズ] ノードの [幅] プロパティを 4.8 インチに設定します。これにより、テーブル幅が設定され、列幅がフォームで均等に表示されるように設定されます。

  7. レポート デザイナで、デザイン画面をクリックします。

  8. [プロパティ] ウィンドウで、[サイズ] ノードを展開して [幅]5 インチに設定します。

  9. [データ ソース] ウィンドウで DataTable1 ノードをクリックして展開し、データ フィールドを表示します。次の手順を実行します。

    • [データ ソース] ウィンドウの LastName フィールドを、テーブルの最初の列の中央行 (詳細) にドラッグします。

    • このフィールドを中央のセルにドラッグすると、2 つの結果が得られます。

      まず、詳細セルに "=Fields!LastName.Value" と表示されます。この文字列は、LastName フィールドにデータ値を指定する、フィールドの式です。詳細行にフィールドを追加すると、そのフィールドは必ず式として表されます。

      次に、列ヘッダー値が最初の行 (フィールドの式のすぐ上) に自動的に配置されます。既定では、この列はフィールド名を基に生成されます。Pascal 形式を使用するフィールド名の場合、列名の各単語の最初の文字が大文字で表記され、各単語がスペースで区切られます。たとえば、LastNameLast Name になります。

    • [データ ソース] ウィンドウの OrderDate フィールドを、テーブルの 2 番目の列の中央行 (詳細) にドラッグします。

    • [データ ソース] ウィンドウの SalesOrderNumber フィールドを、テーブルの 3 番目の列の中央行 (詳細) にドラッグします。

    • [データ ソース] ウィンドウの TotalSales フィールドを、テーブルの最後の列の中央行 (詳細) にドラッグします。

    次の図は、LastNameOrderDateSalesOrderNumber、および TotalSales フィールドを使用して作成したテーブル データ領域を示しています。

    既定のレポート定義テーブル

フォームに ReportViewer コントロールを追加するには

  1. ソリューション エクスプローラで、Form1.vb をクリックします。

  2. [表示] メニューの [デザイナ] をクリックします。

  3. ツールボックスの [データ] セクションから ReportViewer コントロールをフォームにドラッグします。

  4. フォーム内をクリックします。[プロパティ] ウィンドウで [サイズ] を展開します。必要に応じて幅と高さのプロパティを設定します。

  5. コントロールの右上隅の三角形をクリックして、ReportViewer コントロールのスマート タグ パネルを開きます。[レポートの選択] ボックスをクリックし、一覧から Sales Orders.rdlc を選択します。

  6. スマート タグ パネルで、[親コンテナにドッキングする] をクリックします。

    このチュートリアルの後半では、アプリケーションをビルドしてレポートをいつでもフォーム内に表示することができます。レポート デザインの増分変更が最終的なレポートに与える影響を確認する場合は、次の各手順の最後にアプリケーションをビルドしてレポートを表示します。

  7. (省略可) F5 キーを押してアプリケーションをビルドし、フォーム内にレポートを表示します。

    次の図は、フォーム内に表示される現在のレポート定義を示しています。ヘッダー行、データ テーブル内の行ごとに 1 つの詳細行、およびレポートの最後のページのフッター行がすべて既定の形式で表示されています。

    表示レポートの既定のテーブル

日付フィールドの書式を設定するには

  1. OrderDate フィールド式が入力されているセルを右クリックし、[プロパティ] をクリックします。[テキスト ボックスのプロパティ] ダイアログ ボックスが開きます。

  2. [書式] タブをクリックし、参照ボタン ([...]) をクリックして、[書式の選択] ダイアログ ボックスを開きます。

    [書式] ボックスで、[標準][日付] の順に選択し、日付の書式を選択します。

  3. [OK] をクリックして [書式の選択] ダイアログ ボックスを閉じ、再び [OK] をクリックして [テキスト ボックスのプロパティ] ダイアログ ボックスを閉じます。

    [日付書式の選択] ダイアログ ボックス

  4. (省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。この場合、書式設定が適用された日付列が表示されます。

通貨フィールドの書式を設定するには

  1. TotalSales フィールド式が入力されているセルを右クリックし、[プロパティ] をクリックします。

  2. [書式] タブをクリックし、参照ボタン ([...]) をクリックして、[書式の選択] ダイアログ ボックスを開きます。

  3. [書式] ボックスで、[標準][通貨] の順に選択し、通貨の書式を選択します。

  4. [OK] をクリックし、再び [OK] をクリックして [テキスト ボックスのプロパティ] ダイアログ ボックスを閉じます。

    [通貨書式の選択] ダイアログ ボックス

  5. (省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。この場合、Total Sales 列の値が指定した通貨書式で表示されます。

テーブル ヘッダーの書式を設定するには

  1. テーブルをクリックし、列ハンドルおよび行ハンドルをテーブルの上部および横に表示します。

    [!メモ]

    テーブルの上部と横に表示されているグレーのボックスがハンドルです。ハンドルは、列、行、およびテーブル自体でさまざまな操作を実行するために使用します。テーブルの上部に表示されるハンドルは、列ハンドルです。テーブルの横に表示されるハンドルは、行ハンドルです。列ハンドルと行ハンドルが交差するハンドルは、コーナー ハンドルです。テーブル ハンドルの例を表示するには、「テーブル データ領域の追加 (Visual Studio レポート デザイナ)」を参照してください。

  2. 列ヘッダー ラベルのある最初の行の行ハンドルを選択し、[太字] をクリックします。

  3. テーブル ヘッダー行をクリックし、[背景色] をクリックします。[Web] タブをクリックし、[ミスティローズ] をクリックします。[OK] をクリックします。

  4. (省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。次の図は、書式設定されたレポートを示しています。

    書式設定された既定のテーブルのビュー

表形式のレポートのグループを定義するには

  1. テーブルをクリックし、列ハンドルおよび行ハンドルをテーブルの上部および横に表示します。

  2. いずれかの行のハンドルを右クリックし、[グループの挿入] をクリックします。

  3. [全般] タブの [グループ化の条件] ボックスで、1 行目では [=Fields!LastName.Value] を選択し、2 行目では [=Fields!FirstName.Value] を選択します。これにより、データが販売員の名前を基にグループ化されます。テーブル データ領域で使用されていないフィールドでも、DataTable1 のフィールドであれば、そのフィールドを基にデータをグループ化することができます。

    [全般] タブ、[グループ化と並べ替えのプロパティ] ページ

  4. [OK] をクリックします。

    グループ ヘッダーとグループ フッターがテーブルに追加されます。

データをグループ別に集計するには

  1. グループ ヘッダー行をクリックし、[背景色] をクリックします。[Web] タブをクリックし、[薄いシアン] を選択します。[OK] をクリックします。

  2. すべての行で繰り返し使用されている TotalSales を、グループで合算した合計を示すグループ ヘッダーの式に置き換えます。

    1. Total Sales のグループ ヘッダーを右クリックし、[プロパティ] をクリックします。[テキスト ボックスのプロパティ] ダイアログ ボックスが表示されます。

    2. 次のテキストをコピーして、[値] ドロップダウン リストに貼り付けます。

      =Sum(Fields!TotalSales.Value)
      
    3. このテキスト ボックスに通貨書式を適用します。

  3. すべての行で繰り返し使用されている名前を、2 行を含むグループ ヘッダーの式に置き換えます。1 行目は姓と名です。2 行目は NULL 以外の販売数です。

    1. Last Name 詳細行から式を選択して削除します。

    2. Last Name のグループ ヘッダー行を右クリックし、[式] をクリックします。次のテキストをコピーして、[式の編集] ダイアログ ボックス領域に貼り付けます。

      Fields!FirstName.Value + " " + Fields!LastName.Value + ": " + vbCrLf + Count(Fields!SalesOrderNumber.Value).ToString()
      

    次の図は、この手順の後の式エディタを示しています。

    グループ テキスト ボックスの [式の編集] ダイアログ

  4. (省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。次の図は、販売員の名前別にグループ化されたテーブル行を示しています。各グループ ヘッダーはグループの詳細行を要約しており、販売員の名前、販売数、および販売総額を示しています。

    処理済みレポート内のテーブル グループ

表形式のレポート内のグループを並べ替えるには

  1. テーブル データ領域を選択し、[テーブルのプロパティ] を開きます。

  2. [グループ] タブをクリックします。唯一の定義済みグループ table1_Group1 が自動的に選択されます。[編集] をクリックします。[グループ化と並べ替え] ダイアログ ボックスが表示されます。

    開いているダイアログ ボックスが [テーブルのプロパティ] ではなく [グループ化と並べ替えのプロパティ] であることを確認します。[テーブルのプロパティ] の [並べ替え] タブでは、グループの並べ替え方法ではなく詳細行の並べ替え方法が制御されます。詳細行の並べ替えは、次の手順で設定します。

  3. [並べ替え] タブをクリックします。[並べ替えの条件] ボックスで、ドロップダウン リストから [<式...>] を選択します。[式の編集] ボックスに、並べ替えの条件式を入力します。次に例を示します。

    =Count(Fields!SalesOrderNumber.Value)

  4. [OK] をクリックします。

    [並べ替えとグループ化] ダイアログ ボックス

  5. (省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。レポートは、各販売員による販売数を基準として並べ替えられています。

    並べ替えられたテーブル グループ

表形式のレポートのグループ内の詳細行を並べ替えるには

  1. テーブルをクリックし、列ハンドルおよび行ハンドルをテーブルの上部および横に表示します。

  2. コーナー ハンドルを右クリックし、[プロパティ] をクリックします。[テーブルのプロパティ] ダイアログ ボックスが表示されます。

    [!メモ]

    コーナー ハンドルとは、列ハンドルと行ハンドルが交差するハンドルです。

  3. [並べ替え] タブの [並べ替えの条件] ボックスで、[=Fields!TotalSold.Value] を選択します。[方向] ボックスで [Descending] を選択します。これにより、詳細データが販売額を基準として値の大きい順に並べ替えられます。

  4. [OK] をクリックします。

    [テーブルのプロパティ] ダイアログ ボックスは、次の図のようになります。

    [テーブルのプロパティ] ダイアログ、[並べ替え] タブ

  5. (省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。次の図は、表示されるレポートの 2 ページ目を示しています。複数の詳細行を含むグループが示されています。

    詳細行を基準に並べ替えられ、グループ化されたレポート データ

表形式のレポートのフッターに要約データを追加するには

  1. テーブル フッター行の Sales Order セルと Total Sales セルを選択します。選択したセルを右クリックし、[セルの結合] をクリックします。

    これにより、テーブルのすべての販売合計を書式設定するためのスペースが追加されます。

  2. 結合された単一のセルを右クリックし、[プロパティ] をクリックします。

  3. [値] ドロップダウン リストに次の式を入力します。

    =Sum(Fields!TotalSales.Value)

  4. 結合されたセルに通貨書式を適用します。

  5. 結合されたセルの横にあるテキスト ボックス セルをクリックし、ラベルを作成します。たとえば、「Total Sold:」と入力します。これは式ではなく、単なるテキストであることに注意してください。

  6. (省略可) ヘッダー行に合わせてフッター行の背景色を設定します。

    次の図は、テーブル定義を示しています。

    フッターのあるレポート定義テーブル

  7. (省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。表示されたレポートで、レポート ツール バーの [最終ページ] ボタンをクリックしてレポートの最後のページに移動します。一番下までスクロールすると、販売総額が表示されます。

    フッターに結果が表示されたテーブルのビュー

参照

リファレンス

Microsoft.Reporting.WinForms.ReportViewer.Drillthrough
Microsoft.Reporting.WinForms.LocalReport.SubreportProcessing
Microsoft.Reporting.WebForms.ReportViewer.Drillthrough
Microsoft.Reporting.WebForms.LocalReport.SubreportProcessing

概念

ReportViewer タスクのスマート タグ パネルの使用

その他のリソース

サンプルとチュートリアル