Пошаговое руководство. Использование ReportViewer в приложении WPF

Для использования элемента управления ReportViewer в приложении WPF необходимо добавить сборку ReportViewer в проект и настроить ее программным способом. WPF поддерживает элементы управления Windows Forms, но элемент управления ReportViewer не обеспечивает автоматическую настройку в WPF, подобную выполняемой в приложении Windows Forms.

В приложении WPF элемент управления ReportViewer размещается в элементе управления WindowsFormsHost. Элемент управления WindowsFormsHost требует полного уровня доверия от вызывающего кода, что соответствует уровню доверия в клиентском приложении WPF в Windows. В приложении браузера WPF приложение по умолчанию работает в условиях частичного уровня доверия. Необходимо выполнить следующие действия (дополнительные сведения см. в разделе Обзор приложений браузера XAML WPF).

  • Настроить приложение браузера WPF на запуск в режиме полного уровня доверия.

  • Убедиться, что веб-сайт развертывания находится в браузере клиента в зоне локальной интрасети или доверенных сайтов.

В этом пошаговом руководстве описывается создание приложения WPF, которое отображает локальный отчет, используя образец базы данных AdventureWorks2008R2.

Обязательные компоненты

Использование элемента управления ReportViewer в приложении WPF

  1. В меню Файл укажите команду Создать и выберите пункт Проект.

  2. В диалоговом окне Создать проект выберите тип проекта WPF Application, введите имя проекта и нажмите кнопку ОК.

  3. Перетащите из области элементов элемент управления WindowsFormsHost в рабочую область MainWindow.xaml. При этом требуемые для WindowsFormstHost сборки будут добавлены в проект.

  4. В обозревателе решений щелкните проект правой кнопкой мыши и выберите Добавить ссылку.

  5. На вкладке .NET диалогового окна Добавить ссылку выберите сборку Microsoft.ReportViewer.WinForms и нажмите кнопку ОК.

  6. В представлении XAML добавьте следующие выделенные строки:

    <Window x:Class="WpfReportApplication.MainWindow"
            xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="https://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.

  14. В мастере отчетов нажмите кнопку Далее. На странице Размещение полей перетащите все доступные поля на панель Значения. При этом создается простая таблица для отображения образцов данных. Затем трижды нажмите кнопку Далее, чтобы закрыть мастер отчетов.

    После этого необходимо добавить код, указывающий на ReportViewer, в созданный отчет и добавить данные из AdventureWorks2008R2DataSet в ReportViewer.

  15. Откройте файл MainWindow.xaml.cs и добавьте выделенную строку в конструктор MainWindow():

    public MainWindow()
    {
        InitializeComponent();
        _reportViewer.Load += ReportViewer_Load;
    }
    
  16. Добавьте следующий код под конструктором 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;
        }
    }
    
  17. Чтобы запустить приложение WPF, в меню Отладка выберите команду Начать отладку.

См. также

Другие ресурсы

Образцы и пошаговые руководства