Report Viewer & report locali

Published 07 ottobre 08 10.50 | abenedetti

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à

clip_image002

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

clip_image004

clip_image006

c. Disegno il report come meglio credo

clip_image008

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

clip_image010

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:

clip_image012

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"

Comments

# AlessandroD said on ottobre 8, 2008 04.13 :

Vorrei aggiungere solo 1 cosa: chi fa i report per poi renderizzarli sempre o quasi come PDF, tenga presente che (attualmente almeno) i PDF generati dal controllo LocalReport sono ben più grossi di quelli che escono dai RS (ricordo un mio caso dove un PDF generato con LocalReport occupava 2,2MB mentre lo stesso report dato in pasto ai RS veniva restituito in formato PDF con una dimensione di 300KB).

Nella documentazione sta scritto che una delle novità appiccicate a VS2008 è quella di prevedere la generazioni di PDF compressi, solo che poi si è capito che l'algoritmo è ben più scarso di quello incluso nei RS... :-)

# ReportViewer Stampa da button nel form. - MasterDrive.it - Information Technology Developers Community said on gennaio 9, 2009 11.56 :

Pingback from  ReportViewer Stampa da button nel form. - MasterDrive.it - Information Technology Developers Community

# ReportViewer Stampa da button nel form. - MasterDrive.it - Information Technology Developers Community said on gennaio 9, 2009 11.57 :

Pingback from  ReportViewer Stampa da button nel form. - MasterDrive.it - Information Technology Developers Community

# Il blog di Andrea Benedetti said on febbraio 19, 2009 12.06 :

Il controllo report viewer, come ho già scritto qui , consente la visualizzazione di report, in modalità

This Blog

Syndication