本文转自:http://msdn.microsoft.com/zh-tw/library/hh273267
若要在 WPF 應用程式中使用 ReportViewer 控制項,您需要將 ReportViewer 組件加入至專案,並且以程式設計方式設定該組件。
WPF 支援 Windows Form 控制項,但是 ReportViewer 控制項不對 WPF 提供任何自動組態,如同在 Windows Form 應用程式中一樣。
WindowsFormsHost 控制項對呼叫程式碼要求完全信任,也就是 Windows 中 WPF 用戶端應用程式的信任層級。
WPF XAML 瀏覽器應用程式概觀):
-
將 WPF 瀏覽器應用程式設定為在完全信任的環境下執行。
-
確定部署網站在用戶端瀏覽器中是 [近端內部網路] 或 [信任的網站區域]。
在本逐步解說中,您將建立一個 WPF 應用程式,此應用程式會使用 AdventureWorks2008R2 範例資料庫顯示本機報表。
在 WPF 應用程式中使用 ReportViewer
-
專案]。
-
確定]。
-
這樣會將 WindowsFormstHost 所需的組件加入至專案。
-
加入參考]。
-
確定]。
-
在 XAML 檢視中,加入下列反白顯示的各行:
<Window x:Class="WpfReportApplication.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms" Title="MainWindow" Height="350" Width="525"> <Grid> <WindowsFormsHost><rv:ReportViewer x:Name="_reportViewer"/></WindowsFormsHost> </Grid> </Window>
接著您將建立 RDLC 報表,您將在 ReportViewer 控制項中顯示該報表。
-
新項目]。
-
此時會啟動 [報表精靈] 與 [資料來源組態精靈]。
-
下一步]。
-
繼續]。
-
確定]。
-
下一步] 兩次。
-
完成]。
AdventureWorks2008R2DataSet 的 DataSet 物件。
-
-
值] 窗格。
-
這樣會建立簡單的表格式資料表,用於顯示範例資料。
-
下一步],關閉 [報表精靈]。
接著,您會加入程式碼將 ReportViewer 指向您建立的新報表,以及從 AdventureWorks2008R2DataSet 將資料加入至 ReportViewer。
-
開啟 MainWindow.xaml.cs,並將反白顯示的行加入至 MainWindow() 建構函式:
-
將下列程式碼加入至類別定義中 MainWindow() 建構函式下方:
private bool _isReportViewerLoaded; private void ReportViewer_Load(object sender, EventArgs e) { if (!_isReportViewerLoaded) { Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 = new Microsoft.Reporting.WinForms.ReportDataSource(); AdventureWorks2008R2DataSet dataset = new AdventureWorks2008R2DataSet(); dataset.BeginInit(); reportDataSource1.Name = "DataSet1"; //Name of the report dataset in our .RDLC file reportDataSource1.Value = dataset.SalesOrderDetail; this._reportViewer.LocalReport.DataSources.Add(reportDataSource1); this._reportViewer.LocalReport.ReportEmbeddedResource = "<VSProjectName>.Report1.rdlc"; dataset.EndInit(); //fill data into adventureWorksDataSet AdventureWorks2008R2DataSetTableAdapters.SalesOrderDetailTableAdapter salesOrderDetailTableAdapter = new AdventureWorks2008R2DataSetTableAdapters.SalesOrderDetailTableAdapter(); salesOrderDetailTableAdapter.ClearBeforeFill = true; salesOrderDetailTableAdapter.Fill(dataset.SalesOrderDetail); _reportViewer.RefreshReport(); _isReportViewerLoaded = true; } }
-
開始偵錯],以執行 WPF 應用程式。