本文转自:http://msdn.microsoft.com/zh-tw/library/hh273267

若要在 WPF 應用程式中使用 ReportViewer 控制項,您需要將 ReportViewer 組件加入至專案,並且以程式設計方式設定該組件。

WPF 支援 Windows Form 控制項,但是 ReportViewer 控制項不對 WPF 提供任何自動組態,如同在 Windows Form 應用程式中一樣。

在 WPF 應用程式中,您會在 WindowsFormsHost 控制項內主控 ReportViewer 控制項。

WindowsFormsHost 控制項對呼叫程式碼要求完全信任,也就是 Windows 中 WPF 用戶端應用程式的信任層級。

在 WPF 瀏覽器應用程式中,應用程式預設會以部分信任執行,而且您必須執行下列操作 (如需詳細資訊,請參閱 WPF XAML 瀏覽器應用程式概觀):

  • 將 WPF 瀏覽器應用程式設定為在完全信任的環境下執行。

  • 確定部署網站在用戶端瀏覽器中是 [近端內部網路] 或 [信任的網站區域]。

在本逐步解說中,您將建立一個 WPF 應用程式,此應用程式會使用 AdventureWorks2008R2 範例資料庫顯示本機報表。

在 WPF 應用程式中使用 ReportViewer

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

  2. 在 [新專案] 對話方塊中,選取 [WPF 應用程式] 專案類型,為您的專案命名,然後按一下 [確定]。

  3. 從 [工具箱] 將 [WindowsFormsHost] 控制項拖曳到 MainWindow.xaml 的設計介面上。                              這樣會將 WindowsFormstHost 所需的組件加入至專案。

  4. 在 [方案總管] 中,以滑鼠右鍵按一下您的專案,然後選取 [加入參考]。

  5. 在 [加入參考] 對話方塊的 [.NET] 索引標籤中,選取 [Microsoft.ReportViewer.WinForms] 組件,然後按一下 [確定]。

  6. 在 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>

    這樣會在 XAML 頁面中建立名為 _reportViewer 的 ReportViewer 執行個體。接著您將建立 RDLC 報表,您將在 ReportViewer 控制項中顯示該報表。

  7. 在 [方案總管] 中,以滑鼠右鍵按一下專案,指向 [加入],然後選取 [新項目]。

  8. 在 [加入新項目] 對話方塊中,選取 [報表精靈],保留預設名稱,然後按一下 [加入]。                              此時會啟動 [報表精靈] 與 [資料來源組態精靈]。

  9. 在 [資料來源組態精靈] 中選取 [資料庫],按 [下一步],選取 [資料集],然後再次按 [下一步]。

  10. 按一下 [選擇您的資料連接] 頁面上的 [新增連接]。                              如果您看見 [選擇資料來源] 對話方塊,請選取 [Microsoft SQL Server] 並按一下 [繼續]。

  11. 在 [伺服器名稱] 方塊中,輸入裝載 AdventureWorks2008R2 資料庫的伺服器名稱,然後在 [選取或輸入資料庫名稱] 中,選取 [AdventureWorks2008R2],再按一下 [確定]。

  12. 按 [下一步] 兩次。

  13. 展開 [選擇您的資料庫物件] 頁面上的 [資料表] 節點,然後選取 [SalesOrderDetail (Sales)] 資料表的核取方塊,再按一下 [完成]。

    現在您的專案中已建立稱為 AdventureWorks2008R2DataSet 的 DataSet 物件。

  14. 在 [報表精靈] 中,按 [下一步]。

  15. 在 [排列欄位] 頁面中,將所有可用的欄位拖曳到 [值] 窗格。

  16. 這樣會建立簡單的表格式資料表,用於顯示範例資料。

  17. 接著按三次 [下一步],關閉 [報表精靈]。

    接著,您會加入程式碼將 ReportViewer 指向您建立的新報表,以及從 AdventureWorks2008R2DataSet 將資料加入至 ReportViewer。

  18. 開啟 MainWindow.xaml.cs,並將反白顯示的行加入至 MainWindow() 建構函式:

    public MainWindow()
    {
    InitializeComponent();
    _reportViewer.Load += ReportViewer_Load;
    }
  19. 將下列程式碼加入至類別定義中 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;
    }
    }
  20. 在 [偵錯] 功能表中選取 [開始偵錯],以執行 WPF 應用程式。

最新文章

  1. 《Web开发中块级元素与行内元素的区分》
  2. POJ 2752 Seek the Name, Seek the Fame [kmp]
  3. Android安全开发之ZIP文件目录遍历
  4. 关于线上的bug什么时候修复的思考
  5. Session的SqlServer模式的配置
  6. mac xcworkspace xcodebuild
  7. javaee基本环境搭建
  8. PostgreSQL wiki
  9. HDU 5748 最长上升子序列的长度nlogn(固定尾部)
  10. hadoop2.2编程:自定义hadoop map/reduce输入文件切割InputFormat
  11. js中如何把字符串转化为对象
  12. 添加redo日志组和添加日志组多元化
  13. Haproxy配置文件(2)
  14. cookie session区别
  15. js 利用 ajax 加载 js ,显示加载进度 ,严格按照js的顺序先后加载到页面
  16. 2019.04.09 电商24 订单模快 ORM
  17. [Spark]What&#39;s the difference between spark.sql.shuffle.partitions and spark.default.parallelism?
  18. 【Leetcode】82. Remove Duplicates from Sorted List II
  19. 企业规范化管理系统iClap前生后世全解析
  20. cocos2dx 3.0 编译工程

热门文章

  1. 为Unity的新版ugui的Prefab生成预览图
  2. 零基础学习Linux培训,应该选择哪个培训班?
  3. 移动端rem布局 js
  4. Day 12 字符串和正则表达式
  5. json和pickle的序列化
  6. 我的FPGA
  7. Array的内置方法思维导图整理(JavaScript)
  8. How To:配置Linux iSCSI客户端
  9. Luogu P3901 数列找不同
  10. (C/C++学习)4.C++类中的虚函数表Virtual Table