2009-05-19 17 views
6

Come integrare ReportViewer nel progetto asp.net MVC?Origine dati Reportviewer in asp.net-mvc

Desidero aggiungere oggetti business dello spazio dei nomi MVCProject.Model. ReportViewer consente gli oggetti business di DataSet.

È possibile scegliere un'altra origine dati, ad esempio LinqDataSource o Oggetto diretto per oggetti di classe LINQ-to-SQL?

Quale sarebbe la soluzione migliore per aggiungere report in un progetto MVC?

risposta

1

Sarà dura. Innanzitutto, è necessario ViewState, quindi è necessario ospitare il report in una normale pagina WebForms. Questo non è poi così male - WebForms e MVC funzionano bene affiancati.

La parte difficile è vincolante per gli oggetti IEnumerable reali e non per quelle ObjectDataSources phoney-baloney.

Il primo passaggio consiste nella creazione di un modello di dati del report. Puoi farlo nel codice, con le domande, qualunque cosa, comunque tu voglia. Una struttura simile a questa (ma ovviamente molto più grande) è tipico:

public class ReportSource 
{ 
    public Floogle[] Floogles { get; set; } 
} 

public class Floogle 
{ 
    public Doodad[] Doodads { get; set; } 
    public string Text { get; set; } 
} 

public class Doodad 
{ 
    public int Number { get; set; } 
} 

Il trucco è quello di utilizzare un controllo BindingSource nel report e impostare la proprietà DataSource per typeof(ReportSource) - sì, la fonte dei dati è il tipo di modello di rapporto.

Quando si progetta il report non si otterrà molta ricchezza, ma sarete in grado di farlo.

Per quanto riguarda le soluzioni di reporting di terze parti, abbiamo trovato che Telerik è l'opzione migliore.

+0

Dove esattamente utilizzo questa BindingSource ?? – AndreMiranda

+0

Prima di tutto, mi dispiace che tu debba lavorare con questo strumento orribile. BindingSource è un "controllo" che puoi "trascinare" sulla superficie del designer. –

+0

MVC non è progettato per i controlli associabili con trascinamento della selezione.Certo, puoi "hackerarli" con MVC (dato che MVC è ancora costruito sulla stessa base dei Webform) ma va contro il paradigma MVC, quindi non è raccomandato. La risposta di Shiraz è buona se hai rapporti esistenti che devi utilizzare con MVC. –

2

Un modo alternativo per eseguire questa operazione è generare il report sul server di report, quindi eseguirne il flusso nell'app mvc come PDF.

0

Ho un piccolo progetto che ho lanciato su codeplex che è un progetto mvc con un report.

http://mvctaskmanagement.codeplex.com/

In pratica da quando faccio dev su una scatola di XP, il mio modulo web doveva avere spinto ad un progetto separato. Dal momento che ho un proj del livello di servizio, l'ho bloccato lì.

Da lì chiamo il mio rapporto tramite un post ajax che riprende i parametri nella pagina del report, che poi lo passa allo stesso livello di servizio utilizzato per generare l'anteprima.

Buona fortuna!

2

Ho un'idea che non è stata testata ma potrebbe funzionare. 1- Posizionare il controllo del visualizzatore di report in una pagina del modulo Web ASP.Net standard (ad esempio ReportViewer.aspx) 2- Sotto il proprio MVC, aggiungere un iframe che faccia riferimento a questa pagina ReportViewer.aspx 3- Passare i parametri alla pagina utilizzando le sessioni o query stringhe

Fammi sapere se funziona

+0

Questa è la mia idea attuale - orribile. Sono sicuro che funzionerebbe, ma preferirei avere qualcosa di più elegante. – vbullinger