チュートリアル : 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 ベースのアプリケーション プロジェクトを作成するには
Visual Studio を開きます。[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[プロジェクトの種類] ペインで、[Visual Basic] を選択します。
[テンプレート] ペインで、[Windows アプリケーション] を選択して Microsoft Windows ベースのアプリケーションを作成します。
[ファイル名] ボックスに「SimpleReport」と入力します。
[場所] ボックスにプロジェクトを保存するディレクトリを入力するか、[参照] をクリックしてディレクトリを選択します。
Windows フォーム デザイナが開き、作成したプロジェクトの Form1 が表示されます。
フォームをクリックします。[表示] メニューの [プロパティ ウィンドウ] をクリックします。[サイズ] プロパティを展開して [幅] および [高さ] を表示します。[幅] を 500 ピクセルに設定します。
データ ソース接続とデータ テーブルを定義するには
ソリューション エクスプローラで、SimpleReport という名前のプロジェクト (ソリューションではない) を右クリックし、[追加] をポイントして [新しい項目] をクリックします。ソリューション エクスプローラ ウィンドウが表示されない場合は、[表示] メニューの [ソリューション エクスプローラ] をクリックします。
[新しい項目の追加] ダイアログで、[データセット] をクリックします。データセットの名前を入力して [追加] をクリックします。既定の名前は DataSet1.xsd です。
これにより、新しい XSD ファイルがプロジェクトに追加され、データセット デザイナが開きます。
[表示] メニューの [デザイナ] をクリックします。ツールボックスを開き、[TableAdapter] コントロールをデータセット デザイン画面にドラッグします。
これにより、TableAdapter 構成ウィザードが起動します。
[データ接続の選択] ページで [新しい接続] をクリックします。
[接続の追加] ページで、次の手順を実行します。
[データ ソース] ボックスで [Microsoft SQL Server] を選択します。
[サーバー名] ボックスに、AdventureWorks データベースが配置されているサーバーの名前を入力します。
SQL Server Express の既定のインスタンスは (local)\sqlexpress です。
ドロップダウン リストで [AdventureWorks] をクリックします。
[OK] をクリックしてウィザードに戻り、[次へ] をクリックします。
[接続文字列をアプリケーション構成ファイルに保存する] ページで、接続文字列の名前を入力するか、既定の [AdventureWorksConnectionString] を受け入れます。[次へ] をクリックします。
[コマンドの種類を選択します] ページで [SQL ステートメントを使用する] を選択し、[次へ] をクリックします。
[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
[クエリ ビルダ] ボタンをクリックし、クエリ ビルダを使用してクエリを作成し、[クエリの実行] ボタンを使用してクエリを検証することもできます。
データセット デザイナに、DataTable1 の DataTable 定義が表示されます。このデータ テーブル内のフィールドの名前は、クエリの列および列の別名 (OrderDate、SalesOrderNumber、TotalSales、FirstName、および LastName) に基づいています。レポート データ領域にデータをバインドする際は、[データ ソース] ウィンドウからこれらのフィールドを使用します。
[!メモ]
データ テーブル内のフィールドを変更する必要がある場合は、[データセット デザイナ] ページで DataTable1 ヘッダーまたは DataTable1TableAdapter ヘッダーを右クリックします。[構成] を選択し、TableAdapter 構成ウィザードを再起動します。
新しいレポート定義ファイルを追加するには
[プロジェクト] メニューの [追加] をポイントし、[新しい項目] をクリックします。
[新しい項目の追加] ダイアログ ボックスで、[レポート] をクリックします。
[ファイル名] に「Sales Orders.rdlc」と入力し、[追加] をクリックしてグラフィック デザイン画面を開きます。
グラフィック デザイン画面は、Visual Studio 2008 のレポート デザイナ コンポーネントの一部です。
レポート レイアウトにテーブルを追加するには
グラフィック デザイン モードの Sales Orders.rdlc で、[表示] メニューから [ツールボックス] をクリックします。
ツールボックスが開きます。
ツールボックスの [データ] セクションで [テーブル] をクリックし、レポート デザイン画面をクリックします。
レポート デザイナにより、レポートの幅に合わせた、3 列のテーブルが表示されます。
テーブルをクリックし、列ハンドルおよび行ハンドルをテーブルの上部および横に表示します。
最初の列でハンドルを右クリックし、[左に列を挿入] をクリックします。
table1 の [プロパティ] ウィンドウで、[サイズ] ノードを展開します。既定では、[プロパティ] ウィンドウはソリューション エクスプローラの下にドッキングされています。このウィンドウは、[表示] メニューから [プロパティ ウィンドウ] をクリックして開くこともできます。
[サイズ] ノードの [幅] プロパティを 4.8 インチに設定します。これにより、テーブル幅が設定され、列幅がフォームで均等に表示されるように設定されます。
レポート デザイナで、デザイン画面をクリックします。
[プロパティ] ウィンドウで、[サイズ] ノードを展開して [幅] を 5 インチに設定します。
[データ ソース] ウィンドウで DataTable1 ノードをクリックして展開し、データ フィールドを表示します。次の手順を実行します。
[データ ソース] ウィンドウの LastName フィールドを、テーブルの最初の列の中央行 (詳細) にドラッグします。
このフィールドを中央のセルにドラッグすると、2 つの結果が得られます。
まず、詳細セルに "=Fields!LastName.Value" と表示されます。この文字列は、LastName フィールドにデータ値を指定する、フィールドの式です。詳細行にフィールドを追加すると、そのフィールドは必ず式として表されます。
次に、列ヘッダー値が最初の行 (フィールドの式のすぐ上) に自動的に配置されます。既定では、この列はフィールド名を基に生成されます。Pascal 形式を使用するフィールド名の場合、列名の各単語の最初の文字が大文字で表記され、各単語がスペースで区切られます。たとえば、LastName は Last Name になります。
[データ ソース] ウィンドウの OrderDate フィールドを、テーブルの 2 番目の列の中央行 (詳細) にドラッグします。
[データ ソース] ウィンドウの SalesOrderNumber フィールドを、テーブルの 3 番目の列の中央行 (詳細) にドラッグします。
[データ ソース] ウィンドウの TotalSales フィールドを、テーブルの最後の列の中央行 (詳細) にドラッグします。
次の図は、LastName、OrderDate、SalesOrderNumber、および TotalSales フィールドを使用して作成したテーブル データ領域を示しています。
フォームに ReportViewer コントロールを追加するには
ソリューション エクスプローラで、Form1.vb をクリックします。
[表示] メニューの [デザイナ] をクリックします。
ツールボックスの [データ] セクションから ReportViewer コントロールをフォームにドラッグします。
フォーム内をクリックします。[プロパティ] ウィンドウで [サイズ] を展開します。必要に応じて幅と高さのプロパティを設定します。
コントロールの右上隅の三角形をクリックして、ReportViewer コントロールのスマート タグ パネルを開きます。[レポートの選択] ボックスをクリックし、一覧から Sales Orders.rdlc を選択します。
スマート タグ パネルで、[親コンテナにドッキングする] をクリックします。
このチュートリアルの後半では、アプリケーションをビルドしてレポートをいつでもフォーム内に表示することができます。レポート デザインの増分変更が最終的なレポートに与える影響を確認する場合は、次の各手順の最後にアプリケーションをビルドしてレポートを表示します。
(省略可) F5 キーを押してアプリケーションをビルドし、フォーム内にレポートを表示します。
次の図は、フォーム内に表示される現在のレポート定義を示しています。ヘッダー行、データ テーブル内の行ごとに 1 つの詳細行、およびレポートの最後のページのフッター行がすべて既定の形式で表示されています。
日付フィールドの書式を設定するには
OrderDate フィールド式が入力されているセルを右クリックし、[プロパティ] をクリックします。[テキスト ボックスのプロパティ] ダイアログ ボックスが開きます。
[書式] タブをクリックし、参照ボタン ([...]) をクリックして、[書式の選択] ダイアログ ボックスを開きます。
[書式] ボックスで、[標準]、[日付] の順に選択し、日付の書式を選択します。
[OK] をクリックして [書式の選択] ダイアログ ボックスを閉じ、再び [OK] をクリックして [テキスト ボックスのプロパティ] ダイアログ ボックスを閉じます。
(省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。この場合、書式設定が適用された日付列が表示されます。
通貨フィールドの書式を設定するには
TotalSales フィールド式が入力されているセルを右クリックし、[プロパティ] をクリックします。
[書式] タブをクリックし、参照ボタン ([...]) をクリックして、[書式の選択] ダイアログ ボックスを開きます。
[書式] ボックスで、[標準]、[通貨] の順に選択し、通貨の書式を選択します。
[OK] をクリックし、再び [OK] をクリックして [テキスト ボックスのプロパティ] ダイアログ ボックスを閉じます。
(省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。この場合、Total Sales 列の値が指定した通貨書式で表示されます。
テーブル ヘッダーの書式を設定するには
テーブルをクリックし、列ハンドルおよび行ハンドルをテーブルの上部および横に表示します。
[!メモ]
テーブルの上部と横に表示されているグレーのボックスがハンドルです。ハンドルは、列、行、およびテーブル自体でさまざまな操作を実行するために使用します。テーブルの上部に表示されるハンドルは、列ハンドルです。テーブルの横に表示されるハンドルは、行ハンドルです。列ハンドルと行ハンドルが交差するハンドルは、コーナー ハンドルです。テーブル ハンドルの例を表示するには、「テーブル データ領域の追加 (Visual Studio レポート デザイナ)」を参照してください。
列ヘッダー ラベルのある最初の行の行ハンドルを選択し、[太字] をクリックします。
テーブル ヘッダー行をクリックし、[背景色] をクリックします。[Web] タブをクリックし、[ミスティローズ] をクリックします。[OK] をクリックします。
(省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。次の図は、書式設定されたレポートを示しています。
表形式のレポートのグループを定義するには
テーブルをクリックし、列ハンドルおよび行ハンドルをテーブルの上部および横に表示します。
いずれかの行のハンドルを右クリックし、[グループの挿入] をクリックします。
[全般] タブの [グループ化の条件] ボックスで、1 行目では [=Fields!LastName.Value] を選択し、2 行目では [=Fields!FirstName.Value] を選択します。これにより、データが販売員の名前を基にグループ化されます。テーブル データ領域で使用されていないフィールドでも、DataTable1 のフィールドであれば、そのフィールドを基にデータをグループ化することができます。
[OK] をクリックします。
グループ ヘッダーとグループ フッターがテーブルに追加されます。
データをグループ別に集計するには
グループ ヘッダー行をクリックし、[背景色] をクリックします。[Web] タブをクリックし、[薄いシアン] を選択します。[OK] をクリックします。
すべての行で繰り返し使用されている TotalSales を、グループで合算した合計を示すグループ ヘッダーの式に置き換えます。
Total Sales のグループ ヘッダーを右クリックし、[プロパティ] をクリックします。[テキスト ボックスのプロパティ] ダイアログ ボックスが表示されます。
次のテキストをコピーして、[値] ドロップダウン リストに貼り付けます。
=Sum(Fields!TotalSales.Value)
このテキスト ボックスに通貨書式を適用します。
すべての行で繰り返し使用されている名前を、2 行を含むグループ ヘッダーの式に置き換えます。1 行目は姓と名です。2 行目は NULL 以外の販売数です。
Last Name 詳細行から式を選択して削除します。
Last Name のグループ ヘッダー行を右クリックし、[式] をクリックします。次のテキストをコピーして、[式の編集] ダイアログ ボックス領域に貼り付けます。
Fields!FirstName.Value + " " + Fields!LastName.Value + ": " + vbCrLf + Count(Fields!SalesOrderNumber.Value).ToString()
次の図は、この手順の後の式エディタを示しています。
(省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。次の図は、販売員の名前別にグループ化されたテーブル行を示しています。各グループ ヘッダーはグループの詳細行を要約しており、販売員の名前、販売数、および販売総額を示しています。
表形式のレポート内のグループを並べ替えるには
テーブル データ領域を選択し、[テーブルのプロパティ] を開きます。
[グループ] タブをクリックします。唯一の定義済みグループ table1_Group1 が自動的に選択されます。[編集] をクリックします。[グループ化と並べ替え] ダイアログ ボックスが表示されます。
開いているダイアログ ボックスが [テーブルのプロパティ] ではなく [グループ化と並べ替えのプロパティ] であることを確認します。[テーブルのプロパティ] の [並べ替え] タブでは、グループの並べ替え方法ではなく詳細行の並べ替え方法が制御されます。詳細行の並べ替えは、次の手順で設定します。
[並べ替え] タブをクリックします。[並べ替えの条件] ボックスで、ドロップダウン リストから [<式...>] を選択します。[式の編集] ボックスに、並べ替えの条件式を入力します。次に例を示します。
=Count(Fields!SalesOrderNumber.Value)
[OK] をクリックします。
(省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。レポートは、各販売員による販売数を基準として並べ替えられています。
表形式のレポートのグループ内の詳細行を並べ替えるには
テーブルをクリックし、列ハンドルおよび行ハンドルをテーブルの上部および横に表示します。
コーナー ハンドルを右クリックし、[プロパティ] をクリックします。[テーブルのプロパティ] ダイアログ ボックスが表示されます。
[!メモ]
コーナー ハンドルとは、列ハンドルと行ハンドルが交差するハンドルです。
[並べ替え] タブの [並べ替えの条件] ボックスで、[=Fields!TotalSold.Value] を選択します。[方向] ボックスで [Descending] を選択します。これにより、詳細データが販売額を基準として値の大きい順に並べ替えられます。
[OK] をクリックします。
[テーブルのプロパティ] ダイアログ ボックスは、次の図のようになります。
(省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。次の図は、表示されるレポートの 2 ページ目を示しています。複数の詳細行を含むグループが示されています。
表形式のレポートのフッターに要約データを追加するには
テーブル フッター行の Sales Order セルと Total Sales セルを選択します。選択したセルを右クリックし、[セルの結合] をクリックします。
これにより、テーブルのすべての販売合計を書式設定するためのスペースが追加されます。
結合された単一のセルを右クリックし、[プロパティ] をクリックします。
[値] ドロップダウン リストに次の式を入力します。
=Sum(Fields!TotalSales.Value)
結合されたセルに通貨書式を適用します。
結合されたセルの横にあるテキスト ボックス セルをクリックし、ラベルを作成します。たとえば、「Total Sold:」と入力します。これは式ではなく、単なるテキストであることに注意してください。
(省略可) ヘッダー行に合わせてフッター行の背景色を設定します。
次の図は、テーブル定義を示しています。
(省略可) F5 キーを押してアプリケーションをビルドし、レポートを表示します。表示されたレポートで、レポート ツール バーの [最終ページ] ボタンをクリックしてレポートの最後のページに移動します。一番下までスクロールすると、販売総額が表示されます。
参照
リファレンス
Microsoft.Reporting.WinForms.ReportViewer.Drillthrough
Microsoft.Reporting.WinForms.LocalReport.SubreportProcessing
Microsoft.Reporting.WebForms.ReportViewer.Drillthrough
Microsoft.Reporting.WebForms.LocalReport.SubreportProcessing
概念
ReportViewer タスクのスマート タグ パネルの使用