WPF中使用ReportViewer報表


本篇博客將介紹如何在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. 運行程序,

到這里,這個示例程序就完成了。

代碼點擊這里下載。

感謝您的閱讀。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM