逐步解說:建立 ReportViewer 報表

本逐步解說會示範如何在以 AdventureWorks 範例資料庫為基礎的 Microsoft Visual Studio 2008 Windows 應用程式專案內建立簡單資料表報表。您要將報表範本加入專案中、設定 AdventureWorks 資料庫的連接資訊、定義查詢、加入資料表資料區域,再將 ReportViewer Windows Form 控制項加入 Windows Form 中,使應用程式的使用者能夠檢視報表。

必要條件

若要使用這個逐步解說,您必須擁有 SQL Server 2005 的 AdventureWorks 範例資料庫存取權。如果您使用舊版的 AdventureWorks,查詢將會失敗。如需有關如何取得 SQL Server 2005 版本之 AdventureWorks 的詳細資訊,請參閱逐步解說:安裝 AdventureWorks 資料庫

此逐步解說假設您已經熟悉 Transaction-SQL 查詢及 ADO.NET DataSetDataTable 物件。

建立新的 Windows 應用程式專案

  1. 開啟 Visual Studio。在 [檔案] 功能表中,指向 [開新檔案],再選取 [專案]。

  2. 在 [專案類型] 窗格中,選擇 [Visual Basic]。

  3. 在 [範本] 窗格中,選擇 [Windows 應用程式],建立 Microsoft Windows 應用程式。

  4. 在 [名稱] 方塊中,輸入 SimpleReport。

  5. 在 [位置] 方塊中,輸入用來儲存專案的目錄,或按一下 [瀏覽] 來導覽找到它。

    接著會開啟 Windows Form 設計工具,顯示您剛剛建立之專案的 Form1。

  6. 按一下表單。從 [檢視] 功能表中,選擇 [屬性視窗]。展開 [大小] 屬性,以顯示 [寬度] 和 [高度]。將 [寬度] 設定為 500 像素。

定義資料來源連接和資料表

  1. 在 [方案總管] 中,以滑鼠右鍵按一下名稱為 SimpleReport 的專案 (不是方案),然後指向 [加入],並選取 [新增項目]。如果看不到 [方案總管] 視窗,請在 [檢視] 功能表上,按一下 [方案總管]。

  2. 在 [加入新項目] 對話方塊中,按一下 [DataSet]。輸入資料集的名稱,並按一下 [加入]。預設名稱為 DataSet1.xsd。

    這樣會將新的 XSD 檔案加入到專案中,並開啟 DataSet 設計工具。

  3. 在 [檢視] 功能表中,按一下 [設計工具]。開啟 [工具箱],並將 TableAdapter 控制項拖曳到 DataSet 設計介面上。

    這樣會啟動 [TableAdapter 組態精靈]。

  4. 在 [選擇資料連接] 頁面中,按一下 [新增連接]。

  5. 在 [加入連接] 頁面上,執行下列步驟:

    • 在 [資料來源] 方塊中,選取 [Microsoft SQL Server]。

    • 在 [伺服器名稱] 方塊中,輸入 AdventureWorks 資料庫所在的伺服器。

      預設 SQL Server Express 執行個體為 (local)\sqlexpress。

    • 從下拉式清單中,按一下 AdventureWorks。

    • 按一下 [確定] 繼續回到精靈,然後按 [下一步]。

  6. 在 [將連接字串儲存到應用程式組態檔] 頁面中,輸入連接字串的名稱,或接受預設值 [AdventureWorksConnectionString]。按 [下一步]。

  7. 在 [選擇命令類型] 頁面上選取 [使用 SQL 陳述式],然後按 [下一步]。

  8. 在 [輸入 SQL 陳述式] 頁面中,輸入下列 Transact-SQL 查詢來從 AdventureWorks 資料庫擷取銷售資料,然後按一下 [完成]:

    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
    

    您也可以按一下 [查詢產生器] 按鈕,並使用 [查詢產生器] 來建立查詢,然後使用 [執行查詢] 按鈕來進行驗證。

    Dataset 設計工具現在會顯示 DataTable DataTable1 的定義,其中包含的欄位是根據資料行和查詢之資料行別名而命名 (OrderDate、SalesOrderNumber、TotalSales、FirstName 和 LastName)。當您將資料繫結到報表資料區時,您將會從 [資料來源] 視窗使用這些欄位。

    Note附註

    如果您需要在資料表中變更欄位,請以滑鼠右鍵按一下 [Dataset 設計工具] 頁面上的 DataTable1 標頭或 DataTable1TableAdapter 標頭。選擇 [設定],這樣會重新啟動 [TableAdapter 組態精靈]。

加入新的報表定義檔案

  1. 從 [專案] 功能表,指向 [加入新項目]。

  2. 在 [加入新項目] 對話方塊中,按一下 [報表]。

  3. 在 [名稱] 中,輸入 Sales Orders.rdlc,再按一下 [加入] 開啟圖形設計介面。

    此圖形設計介面是 Visual Studio 2008 之「報表設計工具」元件的一部分。

將資料表加入至報表配置

  1. 當 Sales Orders.rdlc 位於圖形設計模式中時,請從 [檢視] 功能表選取 [工具箱]。

    [工具箱] 便會開啟。

  2. 從 [工具箱] 的 [資料] 區段中,按一下 [資料表],然後按一下報表設計介面。

    「報表設計工具」會顯示一份含有三個資料行,且寬度橫跨整個報表的資料表。

  3. 按一下資料表,使資料行和資料列控點出現在資料表的上面和旁邊。

  4. 在第一個資料行中,以滑鼠右鍵按一下控點,再按一下 [在左方插入資料行]。

  5. 從 table1 的 [屬性] 視窗中,展開 [大小] 節點。根據預設,[屬性] 視窗會停駐在 [方案總管] 下方。您也可以從 [檢視] 功能表中,選取 [屬性視窗] 來開啟這個視窗。

  6. 將 [大小] 節點的 [寬度] 屬性設定為 4.8 英吋,這樣會設定資料表寬度,並將資料行寬度設定為等於在表單中檢視的間距。

  7. 在「報表設計工具」中,按一下設計介面。

  8. 從 [屬性] 視窗中,展開 [大小] 節點,並將 [寬度] 設定為 5 英吋。

  9. 從 [資料來源] 視窗中,按一下 DataTable1 節點,將它展開並顯示資料欄位。然後執行下列步驟:

    • 將 LastName 欄位從 [資料來源] 視窗拖曳至資料表中的第一個資料行、中間 (詳細資料) 資料列。

    • 當您將欄位拖曳至中間資料格時,會出現兩種情況。

      首先,詳細資料的資料格會包含下列文字:=Fields!LastName.Value。這段文字是指定 LastName 欄位之資料值的欄位運算式。加入 [詳細資料] 資料列的欄位一律會指定為運算式。

      接著,資料行標頭值會自動放在第一資料列中,正好在欄位運算式上面。依預設,此資料行是從欄位名稱產生而來。如果是使用 Pascal 大小寫慣例的欄位名稱,資料行名稱將會是以空格區隔的每一個大寫字。例如,LastName 會變成 Last Name。

    • 將 OrderDate 欄位從 [資料來源] 視窗拖曳至資料表中的第二個資料行、中間 (詳細資料) 資料列。

    • 將 SalesOrderNumber 欄位從 [資料來源] 視窗拖曳至資料表中的第三個資料行、中間 (詳細資料) 資料列。

    • 將 TotalSales 欄位從 [資料來源] 視窗拖曳至資料表中的最後一個資料行、中間 (詳細資料) 資料列。

    下圖顯示已擴展這些欄位的資料表資料區域:LastName、OrderDate、SalesOrderNumber 和 TotalSales。

    預設報表定義資料表

將 ReportViewer 控制項加入至表單

  1. 在 [方案總管] 中,按一下 Form1.vb。

  2. 在 [檢視] 功能表中,選擇 [設計工具]。

  3. 從工具箱的 [資料] 區段中,將 ReportViewer 控制項拖曳至表單上。

  4. 按一下表單。從 [屬性] 視窗中,展開 [大小]。視需要設定寬度和高度屬性。

  5. 按一下 ReportViewer 控制項右上角的三角形來開啟此控制項的智慧標籤面板。按一下 [選擇報表] 下拉式清單,並選取 Sales Orders.rdlc。

  6. 從智慧標籤面板中,按一下 [停駐於父容器中]。

    在本逐步解說的其餘部分中,您可以建立應用程式,並隨時檢視表單中的報表。如果您想要查看報表設計的累加變更如何影響結束報表,請依照下列每一個程序的最後一個步驟來建立及檢視報表。

  7. (選擇性) 按 F5 鍵,建立應用程式及檢視表單中的報表。

    下圖顯示目前在表單中轉譯的報表定義。您將會看到標頭資料列、資料表中每一個資料列的一個詳細資料列,以及報表最後一頁的頁尾資料列 (全部都是以預設格式顯示)。

    轉譯報表中的預設資料表

將日期欄位格式化

  1. 以滑鼠右鍵按一下含有 OrderDate 欄位運算式的資料格,再按一下 [屬性]。此時會出現 [文字方塊屬性] 對話方塊。

  2. 選取 [格式] 索引標籤,並按一下瀏覽 (…) 按鈕來開啟 [選擇格式] 對話方塊。

    在 [格式] 方塊中,依序選取 [標準]、[日期],再選取日期格式。

  3. 按一下 [確定] 來關閉 [選擇格式] 對話方塊,再按一下 [確定] 來關閉 [文字方塊屬性] 對話方塊。

    選擇日期格式對話方塊

  4. (選擇性) 按 F5 鍵,建立應用程式及檢視報表。在此情況下,您會看到日期資料行使用您剛剛套用的格式。

將貨幣欄位格式化

  1. 以滑鼠右鍵按一下含有 TotalSales 欄位運算式的資料格,再按一下 [屬性]。

  2. 選取 [格式] 索引標籤,並按一下瀏覽 (…) 按鈕來開啟 [選擇格式] 對話方塊。

  3. 在 [格式] 方塊中,依序選取 [標準]、[貨幣],再選取貨幣格式。

  4. 按一下 [確定],然後再按一下 [確定] 以關閉 [文字方塊屬性] 對話方塊。

    選擇貨幣格式對話方塊

  5. (選擇性) 按 F5 鍵,建立應用程式及檢視報表。在此情況下,您會看到 Total Sales 資料行值顯示貨幣格式。

將資料表頁首格式化

  1. 按一下資料表,使資料行和資料列控點出現在資料表的上面和旁邊。

    Note附註

    控點是出現在資料表上面和旁邊的灰色方塊。您可以利用控點來執行資料行、資料列和資料表本身的各種動作。橫跨資料表頂端的控點是資料行控點。沿著資料表旁邊向下的控點是資料列控點。資料行控點和資料列控點相會的控點是角控點。若要檢視資料表控點的範例,請參閱加入資料表資料區域 (Visual Studio 報表設計工具)

  2. 選取第一個資料列的資料列控點 (其中包含資料行標頭標籤),然後按一下 [粗體]。

  3. 按一下資料表頁首資料列,然後按一下 [背景色彩]。按一下 [Web] 索引標籤,並選取 [MistyRose]。按一下 [確定]。

  4. (選擇性) 按 F5 鍵,建立應用程式及檢視報表。下圖顯示格式化的報表。

    檢視具備格式的預設資料表

定義表格式報表的群組

  1. 按一下資料表,使資料行和資料列控點出現在資料表的上面和旁邊。

  2. 以滑鼠右鍵按一下任何資料列的控點,再按一下 [插入群組]。

  3. 在 [一般] 索引標籤的 [群組對象] 方塊中,在第一個資料列中選取 [=Fields!LastName.Value],在第二個資料列中選取 [=Fields!FirstName.Value]。這會依銷售員姓名來分組資料。請注意,您可以依照資料表資料區中未使用,但是 DataTable1 欄位可使用的欄位來分組資料。

    一般索引標籤、群組和排序屬性頁

  4. 按一下 [確定]。

    群組首和群組尾會加入資料表中。

依據群組摘要資料

  1. 按一下群組首資料列,然後按一下 [背景色彩]。選擇 [Web] 索引標籤,並選取 [LightCyan]。按一下 [確定]。

  2. 使用群組首中群組結合總計的運算式來取代每一個資料列中重複的 TotalSales。

    1. 以滑鼠右鍵按一下 Total Sales 的群組首,並選擇 [屬性]。[文字方塊屬性] 對話方塊隨即開啟。

    2. 複製底下的文字,並將其貼到 [值] 下拉式清單中。

      =Sum(Fields!TotalSales.Value)
      
    3. 將貨幣格式套用到這個文字方塊。

  3. 使用群組首中包含兩行的運算式來取代每一個資料列中重複的名稱。第一行是姓名,第二行是非 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. 按一下 [確定]。

    群組和排序對話方塊

  5. (選擇性) 按 F5 鍵,建立應用程式及檢視報表。您的報表現在會依據每一位銷售人員所達成的銷售數目來排序。

    已排序的資料表群組檢視

排序表格式報表內群組中的詳細資料列

  1. 按一下資料表,使資料行和資料列控點出現在資料表的上面和旁邊。

  2. 以滑鼠右鍵按一下角控點,再按一下 [屬性]。[資料表屬性] 對話方塊隨即開啟。

    Note附註

    角控點是資料行控點和資料列控點相會的控點。

  3. 在 [排序] 索引標籤中,針對 [排序對象] 方塊選取 =Fields!TotalSold.Value。在 [方向] 方塊中,選取 [遞減]。如此將會依據售出的數量來排序詳細資料 (從最高的值開始)。

  4. 按一下 [確定]。

    [資料表屬性] 對話方塊應該看起來類似下圖。

    [資料表屬性] 對話方塊,[排序] 索引標籤

  5. (選擇性) 按 F5 鍵,建立應用程式及檢視報表。下圖顯示產生之報表的第 2 頁,以顯示具有一個以上詳細資料列的群組。

    根據詳細資料列排序之分組報表資料的檢視

將摘要資料加入表格式報表中的頁尾

  1. 選取資料表頁尾資料列中的 Sales Order 和 Total Sales 資料格。以滑鼠右鍵按一下選取的資料格,並選擇 [合併資料格]。

    這樣會提供更多的空間來格式化資料表中所有銷售的總和。

  2. 以滑鼠右鍵按一下單一合併的資料格,然後選擇 [屬性]。

  3. 在 [值] 下拉式清單中,輸入下列運算式:

    =Sum(Fields!TotalSales.Value)

  4. 將貨幣格式套用到合併的資料格。

  5. 按一下合併資料格旁邊的文字方塊資料格,並建立標籤。例如,輸入 Total Sold:。請注意這不是運算式,而只是文字。

  6. (選擇性) 設定頁尾資料列上的背景色彩,使其符合標頭資料列。

    下圖顯示資料表定義。

    報表定義資料表 (含頁尾)

  7. (選擇性) 按 F5 鍵,建立應用程式及檢視報表。在轉譯的報表上,按一下報表工具列上的 [LastPage] 按鈕,導覽至報表的最後一頁。捲動至底部,您將會看到總銷售值。

    具備頁尾結果的資料表檢視

另請參閱

參考

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

概念

使用 [ReportViewer 工作] 智慧標籤面板

其他資源

範例和逐步解說