本篇博客將介紹如何在WPF中使用ReportViewer控件。
1. 環境准備:下載安裝最新版ReportViewer(PS:需要安裝Microsoft SQL Server System CLR Types package);如果您的開發工具是Visual Studio 2015,記得安裝Microsoft SQL Server Tools,因為需要安裝ReportViewer報表設計器。
2. 下面我們通過一個例子(示例圖書品種報表)來演示,
1). 新建一個WPF項目WPFBooksReport,
2). 添加Entities文件夾,並添加Book類,
public class Book { public string Name { get; set; } public string Author { get; set; } public string ISBN { get; set; } public decimal Price { get; set; } }
3). 添加名稱為BookReport的RDLC報表,
報表設計器主界面
修改報表屬性:
4. 新建DataSet,名稱BookDataSet,然后新建DataSource,DataSource的數據來源於Object,因為在示例程序中為了降低復雜度,直接使用Book類作為數據來源了。
這樣,RDLC報表的數據源便設置成功了。下一步設計報表的樣子。
5). 在報表中插入一個Table,然后設置數據源,
6). 新建WPF UserControl,BookReportCtrl.xaml,在項目中添加Microsoft.ReportViewer.WinForms和WindowsFormsIntegration引用
BookReportCtrl.xaml
<UserControl x:Class="WPFBooksReport.BookReportCtrl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms" xmlns:local="clr-namespace:WPFBooksReport" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300"> <Grid> <WindowsFormsHost> <rv:ReportViewer x:Name="bookReportViewer"/> </WindowsFormsHost> <local:MaskLayer x:Name="maskLayer" Visibility="Collapsed"/> </Grid> </UserControl>
Code:
public BookReportCtrl() { InitializeComponent(); this.Loaded += BookReportCtrl_Loaded; this.bookReportViewer.RenderingComplete += BookReportViewer_RenderingComplete; } private void BookReportCtrl_Loaded(object sender, RoutedEventArgs e) { maskLayer.Visibility = Visibility.Visible; // 模擬一個DataTable DataTable dt = new DataTable(); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Author", typeof(string)); dt.Columns.Add("Price", typeof(decimal)); dt.Columns.Add("ISBN", typeof(string)); DataRow dr = dt.NewRow(); dr["Name"] = "C# In Depth"; dr["Author"] = "Jon Skeet"; dr["Price"] = 72.0m; dr["ISBN"] = "B3456123"; dt.Rows.Add(dr); ReportDataSource reportDataSource = new ReportDataSource(); reportDataSource.Name = "BookDataSet"; reportDataSource.Value = dt; bookReportViewer.LocalReport.ReportPath = Directory.GetCurrentDirectory() + "\\BookReport.rdlc"; bookReportViewer.LocalReport.DataSources.Add(reportDataSource); bookReportViewer.RefreshReport(); } private void BookReportViewer_RenderingComplete(object sender, Microsoft.Reporting.WinForms.RenderingCompleteEventArgs e) { maskLayer.Visibility = Visibility.Collapsed; }
6. 新建BookReportWindow.xaml來承載報表。
7. 運行程序,
到這里,這個示例程序就完成了。
代碼點擊這里下載。
感謝您的閱讀。