2011-09-12 20 views
5

Passando Parametri report a sottoreport in VS 2010 RDLCPassando Parametri report a sottoreport in VS 2010 RDLC

sto avendo qualche problema di definire e passando parametri del report a sottoreport in VS 2010. Nel VS 2008 in vista di disegno I è stato in grado di fare clic con il pulsante destro del mouse e definire il parametro del report e farlo passare.

In VS 2010 manca questo prompt. Quindi la mia domanda è, come posso passare un valore da un rapporto genitore a un sottoreport in VS 2010?

Inoltre, questo è ciò che viene visualizzato nella finestra di dialogo Proprietà report all'interno di VS 2010:

Per il momento ho definito manualmente il parametro nel sottoreport nel XML ma sto ricevendo un errore dal rapporto principale quando tento di passare un parametro di qualsiasi tipo al sottoreport.

L'errore è:

An error occurred during local report processing. 

Value cannot be null. Parameter name: value 

Dove non ho un valore di parametro denominato definito da nessuna parte.

risposta

13
  • Goto SubReport ->Relazione riquadro Dati ->Parametri e aggiungere il parametro che si desidera ricevere.

  • Goto MainReport ->destro del mouse SubReport - Proprietà>sottoreport ->Parametri e aggiungere lo stesso nome paramter e scegliere il relativo valore dall'elenco a discesa.

  • Gestire l'evento SubreportProcessing e impostare l'origine dati per il sottoreport. Nel mio caso l'origine dati del report principale era di tipo List<Order> e il parametro era OrderID. Esempio di codice qui sotto.

ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SetSubDataSource); 
public void SetSubDataSource(object sender, SubreportProcessingEventArgs e) 
{ 
    var mainSource = ((LocalReport) sender).DataSources["MainDataSet1"]; 
    var orderId = int.Parse(e.Parameters["OrderID"].Values.First()); 
    var subSource = ((List<Order>)mainSource.Value).Single(o => o.OrderID == orderId).Suppliers; 
    e.DataSources.Add(new ReportDataSource("SubDataSet1", subSource)); 
} 
+1

** Molto importante ** Il nome del 'ReportDataSource' in' metodo e.DataSources.Add' deve corrispondere al nome di origine dati nel sottoreport ESATTAMENTE. –

+0

Un'alternativa alla definizione di subSource come quella che sta usando questo tag: Questo farà la stessa cosa e ti farà risparmiare anche quelle 3 linee di codice. –

0

var sorgente secondaria = ((List) mainSource.Value) La singola (o => o.OrderID == OrderId) .Suppliers;

cosa significa

Problemi correlati