Report Viewer & report locali
Mi sembra di capire che non tutti, ancora, sappiano che è possibile utilizzare le stesse funzionalità dei Reporting Services, senza avere un server di report.
Utilizzando lo strumento Report Viewer con report locali (RDLC, RDL Client) i dati possono solo essere bindati solo da oggetti dataTable o da collezioni di oggetti di business (purchè implementino l'interfaccia IEnumerable).
Vediamo come tramite un progetto Win Forms con Visual Studio:
1. Creo un’entità che sia un oggetto collection
using System.Collections.Generic;
namespace testLocalReporting
{
class person
{
public string name { get; private set; }
public string surname { get; private set; }
public string address { get; private set; }
public person(string name, string surname, string address)
{
this.name = name;
this.surname = surname;
this.address = address;
}
}
class people
{
private List<person> _person;
public people()
{
_person = new List<person>();
_person.Add(new person("Andrea","Benedetti","via dei Pelati, 58"));
_person.Add(new person("Simone", "Benedetti", "via dei Pelati, 58"));
}
public List<person> GetPerson()
{
return _person;
}
}
}
2. Creo un report locale (file RDLC), direttamente da visual studio
- Scelgo come sorgente dati la mia entità
- Nuova sorgente dati
- Tipologia di sorgente: object
- Scelgo la mia entità

- Definisco come chiamare la mia sorgente dati (di default viene chiamata come “<nomeProgetto>_<entità>”)


c. Disegno il report come meglio credo

3. Inserisco in una win form il controllo report viewer ed un pulsante

4. Scrivo, dietro il pulsante, il codice necessario alla visualizzazione del report
private void cmdViewReport_Click(object sender, EventArgs e)
{
string reportPath = @"rptBusinessPlan.rdlc";
var p = new people();
reportViewer.LocalReport.DataSources.Clear();
reportViewer.Visible = true;
reportViewer.ProcessingMode = ProcessingMode.Local;
reportViewer.LocalReport.ReportPath = reportPath;
var reportDataSource = new ReportDataSource { Name = "testLocalReporting_person", Value = p.GetPerson() };
reportViewer.LocalReport.DataSources.Add(reportDataSource);
reportViewer.LocalReport.Refresh();
reportViewer.RefreshReport();
}
Il risultato:

Limitazioni (per elaborazioni “local mode”):
- Il controllo consente il salvataggio solo in formato Excel e PDF
- Sorgenti dati solo “object”, no query e connection string memorizzate direttamente nel report
Attenzione che il controllo report viewer non fa parte del pacchetto redistribuibile del .Net Framework.
Questo significa che gli utenti non sviluppatori (chi non ha Visual Studio, per intenderci, non ha il controllo) dovranno necessariamente installarlo per poter visualizzare report.
Oggi la versione da utilizzare è la 2008 che non consente ancora l’utilizzo delle ultime caratteristiche dei Reporting Services 2008 ma che copre, per l'utilizzo in modalità locale, diverse lacune della 2005:
- supporto stampa e preview di stampa
- esportazione in excel e pdf
Qui il pacchetto "Microsoft Report Viewer Redistributable 2008"