2013-07-17 2 views
8

Я добавил ReportViewer в приложение WPF через конструктор XAML моего главного окна, и я хотел бы добавить к нему существующий файл rdlc.Как добавить файл rdlc в ReportViewer в проектах WPF

Я хочу, чтобы мой диспетчер отчетов отображал пустой файл rdlc (без параметров) при запуске, а затем при выборе строки из моего datagrid (привязанного к наблюдаемому коллективу) соответствующим образом менял свои параметры и показывал, от пустой.

Я сделаю кнопку с выбранной строкой в ​​качестве командного параметра и соответствующих событий и всего остального, мне просто нужно будет передать данные в отчет. Я понимаю, что это непростой вопрос, поэтому я попытаюсь упростить:

  1. Как добавить существующий файл rdlc в ReportViewer (MVVM, WPF)?
  2. Я нажимаю кнопку -> соответствующая команда получает элемент из моего наблюдаемого коллекционирования в качестве параметра (строка в моем datagrid) -> Как передать части данных этого элемента незаполненным (или перезаписывать, если заполнено, конечно) части Отчет?

Надеюсь, я был ясен. Спасибо за ответ заранее!

ответ

3

После того, как вы установили свой initilizeMethod с правильным путем к отчету и набору данных, введите что-то вроде этого.

private void initializeReport() 
     { 
      this.mform_components = new System.ComponentModel.Container(); 
      Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 = new Microsoft.Reporting.WinForms.ReportDataSource(); 

      this.ProductBindingSource = new System.Windows.Forms.BindingSource(this.mform_components); 
      ((System.ComponentModel.ISupportInitialize)(this.ProductBindingSource)).BeginInit(); 

      reportDataSource1.Name = "DataSet4"; 
      reportDataSource1.Value = this.ProductBindingSource; 

      this.viewerInstance.LocalReport.DataSources.Add(reportDataSource1); 
      this.viewerInstance.LocalReport.ReportEmbeddedResource = "YourReport.rdlc"; 
      this.viewerInstance.ZoomPercent = 95; 
      this.windowsFormsHost1.Width = 680; 

      ((System.ComponentModel.ISupportInitialize)(this.ProductBindingSource)).EndInit(); 
    } 

Единственное, что следует оставить, это указать объект, который вы хотите разместить в своем отчете.

private System.Windows.Forms.BindingSource ProductBindingSource; 
     private void startReport() 
     { 
      YourClass item = (YourClass)DataGridView.SelectedItem; 
      this.ProductBindingSource.DataSource = item; 

      this.viewerInstance.RefreshReport(); 
      this.viewerInstance.Refresh(); 
     } 
+0

О, боже мой! Работает как шарм! Спасибо, что закончили мои страдания! –

+0

Без проблем :) – Labrinths

1

A развивался примерно так несколько месяцев назад. Однако это много кода для публикации здесь, но посмотрите на его завершенный образец с исходным кодом. Advanced-Report-Viewver Codeproject

+0

Спасибо, это было очень полезно! –

+0

Могу ли я задать вам еще один вопрос? Вот распечатка моего отчета: [link] (http://s8.postimg.org/3nahbg285/report.jpg) Как я могу передавать данные из моего «ObservableCollection» в выделенную часть моего DataSet4 и, в конечном итоге, в каждую часть ? Благодаря! –

Смежные вопросы