Home Page Home Page Articoli Costruire Report con ASP.NET e Crystal Reports

Costruire Report con ASP.NET e Crystal Reports

Vedremo in questo semplice Tutorial le istruzioni base che ci permetteranno di costruire un report avanzato usando ASP.NET e l'oggetto CrystalReportViewer integrato in questa versione di Visual Studio .NET.
Autore: David De Giacomi Livello:
Introduzione alla reportistica
Lo sviluppatore è sempre stato abituato nel tempo a lavorare sulla business logic delle proprie applicazioni, alla gestione dei dati nei database e alla programmazione dell'interfaccia utente per semplificarne l'uso.
Da un po' di tempo a questa parte i Database stanno effettivamente "scoppiando" nel senso che la mole di dati che viene inserita continua ad aumentare giorno per giorno e giustamente il cliente (di solito gli alti gradi) vuole avere dei resoconti dettagliati in formato cartaceo o elettronico in cui vengono raggruppati tutti i dati in modo logico elaborati e visualizzati.
E' questo un caso in cui potrebbe venire comodo un Report.

Crystal Reports e Visual Studio .NET
Nelle precedenti versioni degli strumenti di sviluppo il supporto alla produzione di Report avanzati è sempre stato molto debole quasi la sua presenza non si avvertiva neanche.
Finalmente con l'avvento di Visual Studio .NET abbiamo a disposizione un vero prodotto per la produzione di Report avanzati.
Il prodotto in questione che è integrato nell'ambiente si chiama Crystal Reports e guardando gli assemblies pare di capire che sia la versione 9.1.
Crystal Reports è un prodotto di Crystal Decisions molto conosciuta perchè da anni investe su prodotti dedicati alla reportistica.
Le librerie e i controlli offerti da Crystal sono veramente potenti permettono addirittura di integrare e offrire report:

  • In applicazioni Windows Forms

  • In applicazioni Web quindi usufruibili dal browser

  • E addirittura sottoforma di Web Services


I risultati che si ottengono sono stupefacenti e si raggiungono in poco tempo come potete vedere nell'immagine qui sotto:

Un report via Web
Un report via Web


Creazione Report tramite Wizard
Allora prima di cominciare il nostro esempio volevo solo ricordavi alcuni requisiti di cui abbiamo bisogno. Useremo come base di dati il classico Northwind su SQL Server. Per ora quindi ci collegheremo a SQL ma prossimamente vedremo anche come collegarci ad Access, anche se la procedura è simile e ognuno di voi capirà da solo come fare! :)

Si parte costruendo semplicemente un progetto di tipo Web con linguaggio C# (se preferite potete usare anche VB.NET).
Premendo con il tasto destro sul nome del nostro progetto nel "Solution Explorer" scegliete "Add" e di seguito "Add New Item...". Dalla finestra che compare andremo a scegliere il tipo di file "Crystal Report" che hanno estensione .rpt e gli diamo come nome Report.rpt.

Aggiunta di un Report al progetto
Aggiunta di un Report al progetto


Diamo ok alla finestra, automaticamente verranno aggiunte diverse references al progetto di Crystal Decisions, verrà aggiunto il nostro file Report.rpt al progetto e apparirà uno Wizard per la composizione del progetto. (Assieme allo Wizard di solito appare anche una form di registrazione, è sufficiente cliccare in fondo a destra "Register Later").
La situazione in questo momento dovrebbe essere quella rappresentata dall'immagine qui sotto:

Il Wizard di composizione Report
Il Wizard di composizione Report


Nel nostro report avremo un riepilogo degli stati che hanno effettuato almeno un ordine del periodo di riferimento (l'ultimo quadrimestre) e un grafico a torta o a barre che riassume la situazione in modo da rappresentare gli stati che hanno fatto più ordini. (Useremo una View apposita già presente nel DB chiamata Quarterly_Orders)

NOTA: La procedura seguente è da seguire alla lettera, non potendo rappresentare qui tutti gli stati del Wizard.

Diamo Ok alla finestra principale del Wizard, comparirà una sequenza di passi e linguette (Data, Fields, Group, ecc.) che dovremo compilare come vedete qui sotto:

I vari passi del Wizard
I vari passi del Wizard


Linguetta Data: E' qui che effettuiamo la connessione al nostro database SQL. Aprite dove c'è scritto "OLE DB (ADO)" e fate doppio click su "Make New Connection", scegliete dalla finestra che apparirà il driver "Microsoft OLEDB Provider for SQL Server" e proseguito compilando il nome del database da utilizzare e le credenziali da usare.
Terminata questa procedura sarà aggiunta come connessione disponibile appena sotto "Make New Connection", da lì potete aprire i nodi fino ad arrivare alle viste, scegliete la vista "Quarterly_Orders" e premete "Insert Table".

I vari oggetti del Database
I vari oggetti del Database


Linguetta Fields: Proseguiamo con il nostro Wizard. In questa linguetta sceglieremo i campi che andranno a comporre il nostro Report. Li inseriamo tutti per questo esempio.

Linguetta Group: Questa è una linguetta di fondamentale importanza. E' qui che scegliamo come raggruppare i dati, secondo quale campo. Abbiamo detto che vogliamo un dettaglio in base alle nazioni quindi aggiungiamo il campo "Quarterly_Orders.Country"

Linguetta Total: Da qui possiamo tenere traccia e calcolare totali e subtotali, anche in questo caso selezioniamo e aggiungiamo il campo Country che ci servirà poi anche per il grafico a torta. Un piccolo dettaglio qui, però, vedete che in basso a destra c'è "Summary Function" ossia la funzione da utilizzare per conteggiare i subtotali, di default viene scelto Sum ma noi abbiamo bisogno della "Count" quindi provvedete a sostituire.

Linguetta Chart: Saltate subito a questa linguetta e scegliete il grafico che più vi aggrada, consiglio a barre orizzontali o a torta. Io scelgo il tipo "Doughnut" molto carino, sembra una ciambella, un grafico a torta bucato in pratica. Da questa linguetta potete anche personalizzare altre cose come il titolo del grafico e così via.

Direi che può bastare per ora, potete premere sul pulsante "Finish" per terminare il Wizard.
Il risultato sarà simile a quello mostrato qui sotto.

Il Designer di Crystal integrato in VS .NET con il nostro Report
Il Designer di Crystal integrato in VS .NET con il nostro Report


Se qualcuno ha già usato le funzioni di Reportistica di Microsoft Access noterà che è molto simile. Infatti ci sono sul form i campi che abbiamo selezionato (non valorizzati). Il grafico sarà popolato così come i dati successivi solo durante il runtime dell'applicazione.

Integrazione del Report dentro la pagina ASP.NET
Andremo ora a vedere come inserire o far leggere il nostro Report al Server Control che inseriremo nella pagina Web. Aprite pure la pagina Webform1.aspx in modalità "Design" creata di default dall'ambiente.
Sulla sinistra apriamo la finestrella "ToolBox" dove ci sono gli oggetti disponibili, andiamo sulla categoria "WebForms" e trasciniamo sulla Form il controllo "CrystalReportViewer".

Passiamo ora al codice. Innanzitutto, è necessario aggiungere (sempre che non sia già presente) il riferimento al namepspace CrystalDecisions.Shared; in questo modo:


using CrystalDecisions.Shared;


Continuiamo nel nostro percorso, ora è necessario aggiungere un handler per l'evento Init della nostra WebForm.
E' da notare che nonostante l'accesso al Database sia già stato effettuato precedentemente durante la composizione del report, nel file .rpt non restano immagazzinate le credenziali quindi bisognerà ridefinirle nel codice.
Nel namespace CrystalDecisions.Shared c'è appunto una classe TableLogOnInfo di cui creeremo un'istanza, specifichiamo tutti i dati fondamentali per l'accesso al database e alla fine la aggiungeremo tramite il metodo Add al nostro Crystal Report Viewer.
In questo modo eviteremo un problema molto comune, che appare sottoforma di messaggio "User Login Failed". Il codice è il seguente:


private void WebForm1_Init(object sender, System.EventArgs e)
{
//Instanziamo la classe e creiamo un nuovo oggetto
TableLogOnInfo credentials=new TableLogOnInfo();

//Completiamo le proprietà con i nostri parametri per l'accesso a SQL
credentials.ConnectionInfo.DatabaseName="Northwind";
credentials.ConnectionInfo.UserID="sa";
credentials.ConnectionInfo.Password="sa";
credentials.ConnectionInfo.ServerName="DELL";
credentials.TableName="Quarterly_Orders";

//Aggiungiamo le credenziali al Report Viewer
CrystalReportViewer1.LogOnInfo.Add(credentials);

//Indichiamo al Report Viewer di caricare il Report creato (Report.rpt)
CrystalReportViewer1.ReportSource=Server.MapPath("Report.rpt");

}



Siamo al termine del nostro esempio, ora per farlo funzionare è sufficiente premere Play in VS.NET.
Il risultato sarà simile a questo:

Il report in esecuzione via Web
Il report in esecuzione via Web


Come potrete notare il Server Control di Crystal è molto potente. Addirittura c'è la possibilità di fare un drill-down sui dati. Ossia cliccando sulla sinistra, dove c'è la lista degli Stati, si potranno vedere solo i dati relativi allo stato selezionato, cosa possibile anche cliccando sulle varie aree colorate nel grafico a torta!
Nella parte superiore del controllo c'è anche una toolbar (che si può anche nascondere) per scorrere avanti e indietro le pagine, salire di livello quando si effettua un drill-down oppure fare degli zoom addirittura a diverse gradazioni.

Conclusioni
Mi sembra di aver messo sufficiente carne sul fuoco per questo articolo. Come vedete la potenza di Crystal Reports è veramente incredibile. In poco tempo e poche istruzioni si riescono ad ottenere risultati di successo.

NOTA: Come vedrete la qualità delle immagini dei grafici è piuttosto bassa, proprio per risparmiare byte che durante trasferimenti via Web possono risultare lenti. Infatti vengono salvate a 96dipi. Nel box qui sotto degli articoli collegati ci sono le istruzioni su come migliorarne la qualità ed altri riferimenti su come produrre altri tipi di report per esempio in Excel.
Potete scrivere eventuali commenti sempre nel box qui sottostante qualora aveste problemi.
Voto medio articolo: 4.0 Numero Voti: 31

File allegati


87_webreport.zip (21 Kbyte)
David De Giacomi

David De Giacomi

MVP Program Logo Approda al mondo dell'informatica nell' Aprile del 1994. Un amico gli fa conoscere il Quick Basic del DOS. E' cosi che inizia la sua attività di sviluppatore. Prosegue il suo percorso con altri linguaggi (Visual Basic, Pascal, Java, ANSI C), fino ad arrivare a .NET. Per un certo periodo affianca all'attività ... Profilo completo

Articoli collegati

Garantire l'univocità di una colonna ammettendo valori NULL multipli
Chi sviluppa in ambito professionale o per puro diletto prima o poi si troverà ad affrontare tematiche nuove ed avvincenti. In questo articolo cercherò di illustrare tre tecniche con i relativi pregi e difetti per permettere con SQL Server di garantire l'univocità di una colonna senza alcuna limitazione sui valori NULL
Autore: Lorenzo Benaglia | Difficoltà:
Integrare Crystal Reports con una Windows Form
Ecco come sfruttare in modo semplice e rapido le funzionalità offerte dal tool di reportistica Crystal Reports di Business Objects all'interno di una Windows Form .NET, dalla crazione del Report al Binding dei dati.
Autore: Matteo Raumer | Difficoltà: | Commenti: 2
Il Logging con Integration Services 2005
Perchè si è bloccata la mia applicazione ? Che errori si sono verificati ? Perchè il flusso d'esecuzione non procede nel modo corretto ? Cerchiamo di capire come possono esserci utili le funzionalità di logging offerte da SQL Server e gli Integration Services per rendere più affidabili e consistenti le nostre applicazioni.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 3
Utilizzare i SQL Server Agent Proxies con i Package SSIS
Chi utilizza frequentemente i SSIS Packages e accede a risorse esterne a SQL Server non può fare a meno di conoscere ed utilizzare i Proxy Account (o SQL Server Agent Proxies). Vediamo che cosa sono e come si utilizzano in modo proficuo.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 4
SQL Server 2005 - La Import/Export utility
Chi lavora sui Database si ritrova quasi quotidianamente a dover importare o esportare dati. SQL Server 2005 agevola notevolmente il compito tramite l'Import/Export Utility (ex DTS Import/Export di SQL 2000). Vediamo come funziona.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 14
Visual Studio 2005 Team System for Database Professionals
Scopriamo questo nuovo e potente Tool della famiglia Visual Studio 2005 Team System per creare, sviluppare, testare e gestire con più facilità e flessibilità i database di SQL Server.
Autore: Marco Caruso | Difficoltà:
Parallelismo tra SSIS e DTS, due prodotti a confronto
In questo articolo un'analisi sulle novità dei SQL Server 2005 Integration Services rispetto ai DTS di SQL Server 2000.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 2
Overview dei SQL Server Integration Services (SSIS)
Scopriamo i nuovi Sql Server Integration Services presenti in SQL Server 2005 che sostituisco i DTS aggiungendo delle nuove funzionalità davvero interessanti
Autore: Alessandro Alpi | Difficoltà: | Commenti: 6 | Voto:
Leggere un file XML con SQL Server 2005
Scopriamo in questo articolo alcune potenzialità offerte dal nuovo database SQL 2005, tra cui il nuovo data type XML, e le Stored Procedures per importare e gestire all'interno del database file testuali in formato XML.
Autore: Lorenzo Benaglia | Difficoltà: | Commenti: 5
ExcelDataSetLib, una libreria .NET per esportare dati in formato Excel
In questo articolo verrà dimostrato come derivare la classe DataSet e integrare funzionalità per esportare in formato Excel XLS, XML o CSV i dati provenienti da un base dati qualsiasi.
Autore: David De Giacomi | Difficoltà: | Commenti: 3 | Voto:
Microsoft Application Blocks Data Access
Quante volte vi è capitato di riscrivere decine di volte lo stesso pezzo di codice all'interno di un progetto ? Scopriamo in questo articolo l'utilità dei Microsoft Application Blocks che vi permettono di ottimizzare il vostro codice evitando ripetizioni e vi facilitano la lettura.
Autore: Marco Caruso | Difficoltà:
Comprimere e decomprimere files ZIP con .NET e #ZipLib
Visualizzare il contenuto di un file Zip da una applicazione vi sembra una Mission Impossibile? Oppure la vostra azienda ha fatto un mutuo per pagare il componente che vi aiuta nel lavoro? Ecco un articolo che parla della libreria sharpZipLib, libreria Open Source per la gestione dei formati compressi.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 7
Rivoluzione nel campo dei Reports con i SQL Reporting Services
Finalmente Microsoft ci mette a disposizione uno straordinario tool per la produzione di Report perfettamente integrato con l'architettura .NET. Fino ad ora siamo sempre stati abituati ad utilizzare il buono seppur limitato Crystal Report. Vediamo cosa cambia da ora in poi.
Autore: David De Giacomi | Difficoltà: | Commenti: 6 | Voto:
Scopriamo cosa sono gli Office XP PIA
Vediamo in quest'articolo una dettagliata introduzione dei PIA gli assemblies che permettono ad un'applicazione .NET di interagire e di dialogare con i prodotti della suite Microsoft Office XP.
Autore: David De Giacomi | Difficoltà: | Commenti: 6
Migliorare la qualità dei grafici nei Crystal Reports
In questo breve articolo vedremo come aumentare la qualità dei grafici prodotti da Crystal Reports durante il rendering tramite Web con ASP.NET e all'interno di applicazioni WinForms.
Autore: David De Giacomi | Difficoltà:
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5