CH10

Preview:

DESCRIPTION

CH10. 報表設計. 報表設計. 使用報表功能. 過去微軟提出了相當多的報表建置工具,從 VB6.0 時代,微軟也持續的與 Crystal Report 廠商合作,在 Visual Studio 系列產品當中提供了 Crystal Report 報表建置的功能。除此之外, SQL Server 的 Reporting Services ,也讓程式設計師有著更簡易的報表製作功能。 - PowerPoint PPT Presentation

Citation preview

CH10CH10

報表設計報表設計

報表設計報表設計使用報表功能

過去微軟提出了相當多的報表建置工具,從 VB6.0 時代,微軟也持續的與 Crystal Report 廠商合作,在 Visual Studio 系列產品當中提供了 Crystal Report 報表建置的功能。除此之外, SQL Server 的Reporting Services ,也讓程式設計師有著更簡易的報表製作功能。

有別於這些選擇, Visual Studio 2005 提供了新版的報表功能,透過『用戶端報表定義檔案 (.rdlc) 』,讓開發人員可以輕鬆的在不需要外掛其他功能或是購買使用授權的狀況底下,即可開發出具有報表功能的應用程式。

與 Crystal Report 相同,這個功能並不包含在 Visual Basic Express版本當中,您必須具有 Visual Studio 2005 正式版本才可享用此功能。

報表設計報表設計報表機制的使用架構

報表設計報表設計在專案中加入報表

報表設計報表設計在專案中加入報表

會在專案當中看到一個副檔名為 .rdlc 的報表定義檔案:

報表設計報表設計加入資料來源

報表的資料來源多半是資料庫,因此我們得先設定這個報表的資料來源:

報表設計報表設計加入資料來源

報表設計報表設計加入資料來源

Visual Studio 2005 會自動找到專案中可用的資料來源,並且提供我們選擇 :

報表設計報表設計加入資料來源

接著出現底下畫面,您可以在底下畫面中選擇資料來源cNorthWind.Mdf當中所有可用的資料表 (Table)或是檢視表(View)

展開『資料表』之後,選擇『供應商』。

報表設計報表設計加入資料來源

完成之後, Visual Studio 2005 為我們在專案中建立了一個 .xsd 檔案:

『資料來源』處出現了供應商

報表設計報表設計開始設計報表

請在方案總管當中切換到 Report1.rdlc 檔案,並且開啟『工具箱』視窗:

『工具箱』中的控制項變成報表定義檔可以使用的項目。

報表設計報表設計開始設計報表

請在方案總管當中切換到 Report1.rdlc 檔案,並且開啟『工具箱』視窗:

您可以拖曳一個 TextBox  到頁面上,請注意,這個 TextBox 與一般我們在表單當中使用的 TextBox 完全不同,請勿混淆。該 TextBox 的屬性也與表單 TtextBox 不同。

報表設計報表設計開始設計報表

透過屬性視窗,修改這個 TextBox 的文字格式與大小,並且填入文字:

報表設計報表設計開始設計報表

接著,我們要在報表加入『資料欄位』,以呈現出資料庫中的結果。請先從工具箱中拖曳一個 Table 控制項:

報表設計報表設計開始設計報表

Table 當中有三個 Row ,第一個是呈現出頁首部分,第二個則是細目資料,第三各則是報表頁尾。一般的報表都會有這三個部分,其中細目資料的部分,會一直重複顯示,顯示的次數依照資料庫中紀錄的數量而定。

報表頁首

報表細目資料

報表頁尾

報表設計報表設計開始設計報表

我們將左方的『工具箱』切換成『資料來源』,並且直接拖曳『供應商編號』到第一個欄位 :

請注意要拖曳到細目部份。

報表設計報表設計開始設計報表

您可以視需要新增 Table 中的欄位,方法很簡單,只需要點選Column 處,按下滑鼠右鍵即可:

報表設計報表設計開始設計報表

可以透過屬性視窗修改報表中的欄位格式 :

報表設計報表設計開始設計報表

請點選 Table 頁首部分的最左方標示,並將屬性視窗中的RepeatOnNewPage 設為 True :

請點選 Table 的頁首部分最左方的標示

將屬性視窗中的RepeatOnNewPage 設為 True ,若資料數量超過一頁,則每頁都會重複頁首部分。

報表設計報表設計如何在表單中顯示報表

要在表單中顯示剛才設計好的報表,請先切換回到表單的部份,從工具箱中拖曳 ReportViewer 控制項到表單上:

透過 SmartTag 設定該控制項的顯示報表為剛才我們建立好的 Report1

從工具箱中拖曳ReportViewer 控制項到表單上

報表設計報表設計如何在表單中顯示報表

完成之後,您可以直接建置專案並且執行,您會發現一個有模有樣的報表已然完成:

報表設計報表設計以參數動態填入文字欄位

切換回報表設計畫面,在『報表定義檔案』的設計模式下,點選功能表中的『報表報表參數』,會出現底下的視窗,您可以按下加入鈕,會出現一個新的參數 (預設名稱為 Report_Parameter_0) :

您可以修改參數的名稱與型別。

請按下加入鈕,會建立出一個新的參數

報表設計報表設計以參數動態填入文字欄位

到『報表定義檔案』設計模式當中,接著請再拖曳 TextBox 到報表上 :

報表設計報表設計以參數動態填入文字欄位

在屬性視窗中設定 TextBox 的 Value 屬性:

報表設計報表設計以參數動態填入文字欄位

選擇『運算式』之後,會出現底下這個『編輯運算式』視窗,請選擇『參數』項目,即可把剛才建立的參數填入 TextBox 中:

報表設計報表設計以參數動態填入文字欄位

接著我們回到表單程式碼部分,請切換至 Form1_Load 程式碼,您會發現在 Form1 的 Load事件當中,已經有兩行 Visual Studio 2005 自動為我們加入的程式碼:

EX : CH10\ReportDemo\Form1.vb

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles MyBase.Load

'TODO: 這行程式碼會將資料載入 'cNorthWindDataSet. 供應商 ' 資料表。您可以視需要進行移動或移除。

Me. 供應商 TableAdapter.Fill(Me.cNorthWindDataSet. 供應商 )

Me.ReportViewer1.RefreshReport()

End Sub

報表設計報表設計以參數動態填入文字欄位

請修改為:EX : CH10\ReportDemo\Form1.vb

0000: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load0001: 'TODO: 這行程式碼會將資料載入 'cNorthWindDataSet. 供應商 ' 資料表。您可以視需要進行移動或移除。0002: Me. 供應商 TableAdapter.Fill(Me.cNorthWindDataSet. 供應商 )0003: 0004: ' 定義兩個參數 ( 陣列形式 0-1)0005: Dim paras(1) As Microsoft.Reporting.WinForms.ReportParameter0006: ' 分別設定這兩個參數的值0007: paras(0) = New Microsoft.Reporting.WinForms.ReportParameter("Report_Parameter_UserName", " 製表人:David")0008: paras(1) = New Microsoft.Reporting.WinForms.ReportParameter("Report_Parameter_CreateDT", " 列表時間: " & Now.ToString)0009: ' 透過 SetParemeters 將參數填入報表中0010: Me.ReportViewer1.LocalReport.SetParameters(paras)0011: Me.ReportViewer1.RefreshReport()0012: End Sub

請注意,參數名稱,必須完全等於剛才我們在報表中建立的參數名稱。

報表設計報表設計以參數動態填入文字欄位

報表列印出來之後,果然出現我們想要的結果: 這兩個報表 TextBox 欄位,其內容是報表參數,而參數值則被程式碼中所填入報表的參數值替換了。

報表設計報表設計動態篩選資料內容

請在表單上,額外佈置一個 TextBox和一個 Button :

填入 SQL語法來動態篩選資料用。

報表設計報表設計動態篩選資料內容

請在篩選鈕的 Click事件當中,建立底下的程式碼, 1-7 行是我們介紹過的參數處理方式:

EX : CH10\ReportDemo\Form1.vb0000: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click0001: ' 定義兩個參數 (陣列形式 0-1)0002: Dim paras(1) As Microsoft.Reporting.WinForms.ReportParameter0003: ' 分別設定這兩個參數的值0004: paras(0) = New Microsoft.Reporting.WinForms.ReportParameter("Report_Parameter_UserName", " 製表人: David")0005: paras(1) = New Microsoft.Reporting.WinForms.ReportParameter("Report_Parameter_CreateDT", " 列表時間: " & Now.ToString)0006: ' 透過 SetParemeters 將參數填入報表中0007: Me.ReportViewer1.LocalReport.SetParameters(paras)0008:0009: ' 動態抓取資料0010: Dim db As New DbAccess("cNorthWind.MDF")0011: Dim dt As DataTable = db.GetDataTable(Me.txb_SQL.Text)0012: ' 將動態抓取的資料填入報表中,作為資料來源0013: Me.ReportViewer1.LocalReport.DataSources(0).Value = dt0014: Me.ReportViewer1.RefreshReport()0015: End Sub

報表設計報表設計動態篩選資料內容

請在篩選鈕的 Click事件當中,建立底下的程式碼, 1-7 行是我們介紹過的參數處理方式:

EX : CH10\ReportDemo\Form1.vb0000: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click(… 略… )0009: ' 動態抓取資料0010: Dim db As New DbAccess("cNorthWind.MDF")0011: Dim dt As DataTable = db.GetDataTable(Me.txb_SQL.Text)0012: ' 將動態抓取的資料填入報表中,作為資料來源0013: Me.ReportViewer1.LocalReport.DataSources(0).Value = dt0014: Me.ReportViewer1.RefreshReport()0015: End Sub

我們透過第八章介紹過的 DbAccess類別來抓取資料,在第 11 行將使用者輸入在 TextBox 當中的 SQL指令碼傳入執行,回傳的結果會以 DataTable形式呈現,我們將結果保留在 dt物件中。 接著將 dt(DataTable) 填入 ReportViewer 中作為報表的資料來源 ( 第 13 行 ) ,並在第 14 行重新顯示報表內容。

報表設計報表設計動態篩選資料內容

呈現出來的資料就會是即時篩選之後的結果:

呈現出來的資料是篩選後的結果 (僅出現台北縣市的廠商 )