2013-07-17 20 views
8

Ho aggiunto un ReportViewer in un'applicazione WPF tramite il designer XAML della mia finestra principale e vorrei aggiungere un file rdlc esistente.Come aggiungere il file rdlc a ReportViewer nei progetti WPF

Mi piacerebbe che il mio reportviewer mostrasse un file rdlc vuoto (senza i parametri) all'avvio, e dopo aver selezionato una riga dal mio datagrid (associato a una raccolta di dati observable) modifica i suoi parametri di conseguenza e mostra invece la definizione del report compilato di quello vuoto.

Farò un pulsante con la riga selezionata come commandparameter e gli eventi rilevanti e tutto, devo solo essere in grado di passare i dati al report. Mi rendo conto che non è una domanda facile quindi cercherò di semplificare:

  1. Come aggiungere un file rdlc esistente a un ReportViewer (MVVM, WPF)?
  2. Premendo un pulsante -> comando corrispondente recupera l'elemento dalla mia raccolta di osservazioni come parametro (una riga nel mio datagrid) -> Come passare le parti di dati di questo elemento alle parti non riempite (o sovrascrive se riempite naturalmente) di il rapporto?

Spero di essere stato chiaro. Grazie per la risposta in anticipo!

risposta

3

Dopo aver impostato initilizeMethod con il percorso corretto per il report e il nome del set di dati qualcosa come questo.

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(); 
    } 

L'unica cosa che deve essere lasciata è specificare l'oggetto che si desidera vedere nel report.

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

Oh mio dio! Funziona come un fascino! Grazie per aver terminato la mia sofferenza! –

+0

Nessun problema :) – Labrinths

1

A stava sviluppando qualcosa del genere un paio di mesi fa. Tuttavia è molto codice per postare qui, ma dare un'occhiata a questo suo esempio completato con codice sorgente. Advanced-Report-Viewver Codeproject

+0

Grazie, questo è stato molto utile! –

+0

Posso avere un'altra domanda? Ecco una schermata del mio rapporto: [link] (http://s8.postimg.org/3nahbg285/report.jpg) Come posso passare i dati dal mio 'ObservableCollection' alla parte evidenziata del mio DataSet4 ed eventualmente ad ogni parte ? Grazie! –