Report multipli con lo stesso report viewer

mercoledì 11 luglio 2012 - 16.17
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows 7  |  Windows Vista  |  Windows XP  |  Visual Studio 2010  |  SQL Server 2008 R2

Spartacus Profilo | Newbie

Ciao a tutti,
Ho un problema che non sono riuscito a risolvere nemmeno cercando e ricercando sul web, quindi siete la mia ultima spiaggia
Sto scrivendo una Windws Application basata su .net framework 4 con VS2010, nella mia applicazioni devo fare larghissimo uso di report molto diversi tra loro, per esempio 1 report mi deve riportare un elenco di operatori, un altro report un eleco di trattamenti, un altro ancora un report di aziende.
A questo punto la mia idea era: mi creo un file .rdlc per ogni report che devo mostrare, nella mia applicazione creo una windowsform di nome reporter in cui all'interno ho inserito un controllo reportviewer, al momento della chiamata passo un parametro alla mia form, e quindi al reportviewer che mi dice quale file .rdlc devo caricare e quindi mostrare all'utente.
E' possibile fare quello che ho descritto sopra, se si, qualcuno mi potrebbe fornire qualche dritta, magari frammenti di codice, utile ad implementare quanto ho richiesto?

Grazie a tutti !!!

freeteo Profilo | Guru

Ciao Spartacus, perdona il ritardo nella risposta.
Ti rispondo nel caso avessi ancora il problema da risolvere:
puoi fare tranquillamente quello che hai in mente, è una soluzione corretta per avere un'unica maschera che decide cosa deve mostrare, chiaramente con tutti i dettagli del caso (caricamento dati etc...).
La cosa è fattibile con un codice banale di questo tipo:
... LocalReport report = viewer.LocalReport; report.LoadReportDefinition(); IEnumerable<...> dati = GetDati(); ReportDataSource source = new ReportDataSource("#NOME#", dati) report.DataSources.Add(source); viewer.RefreshReport(); ...

dove:
- "viewer" è il tuo reportViewer che hai nella form
- "#NOME#" è il nome della datasource che hai dato in fase di design del report
- GetDati è la funzione che torna una Collection<T> di tuoi oggetti, oppure la cambi e metti che ti torna un DataTable se vai meglio, è lo stesso.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

Spartacus Profilo | Newbie

Ciao Freeteo,
per prima cosa grazie mille per la tua risposta, anche perchè effettivamente non ero ancora riuscito a risolvere la cosa, per fortuna non sono solo il progettista e lo sviluppatore di questo software ma sono contemporaneamente committente e principale utilizzatore .
comunque sia bando alla ciance, immagino che la posizione ideale per il codice che mi hai inserito sia nel costruttore della classe della mia windows form, che ovviamente eredita da System.windows.forms, un'altra cosa che immagino possa andare bene è se al posto della tua funzione GetDati() metto una Query sql, che ritorna un datatable, oppure una stored procedure che ho settato nel mio DB.
Ti prego di correggermi se ho scritto qualche castroneria, ma la questione è che con i report sono proprio al primissimo approccio.
Ciao e di nuovo Grazie mille

Cristian

freeteo Profilo | Guru

Ciao Spartacus,
figurati siamo qui per questo, fai bene a porre tutte le domande che hai, così magari riusciamo insieme a trovare la soluzione completa a quello che stai cercando.

>un'altra cosa che immagino possa andare bene è se al posto della
>tua funzione GetDati() metto una Query sql, che ritorna un datatable,
>oppure una stored procedure che ho settato nel mio DB.
benissimo, infatti è proprio come dici, puoi mettere quello che vuoi basta soltanto che la struttura dei dati (colonne<=>proprietà e soprattutto i tipi di dato che ci metti dentro) siano esattamente uguali a quelli con cui hai costruito il report a designer.
Quindi se hai una stored già fatta, benissimo, usa quella dentro a quel metodo, ma attento sempre alla struttura dei campi...se magari non ti torna quello che il report si aspetta, allora in quel caso, ti conviene farti un'entita di appoggio, con quelle proprieta (tipo e nomi uguali come ti dicevo) e rimappare quello che ti serve...e quindi come ti avevo ipotizzato io fartela tornare come Collection<T>...queste "traduzioni" che aiutano a mantenere la retrocompatibilità mi capita di farle.

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5