Connettere un Dataset istanziato da codice al tool di reportistica CrystalReport

Ciao a tutti,
nel post di oggi voglio introdurre un metodo piuttosto semplice per legare oggetti DataSet istanziati da codice, al tool di reportistica CrystalReport 2008.
CrystalReport è un potente strumento che consente facilmente di creare dei report riguardanti i dati trattati nel codice delle nostre applicazioni .NET.

Di seguito riporto i passi necessari per creare la reportistica di un dataset utilizzato nella nostra applicazione:
1. Innanzitutto da VisualStudio creiamo una nuova Form, che useremo per la visualizzazione del report (Add -> Windows Form)
2. Nella nostra nuova Form aggiungere in modalità grafica, dal pannello “toolbox”, un oggetto CrystalReportViewer
3. Aggiungere al nostro progetto in VisualStudio, tramite Data -> Add new Datasource, un nuovo oggetto datasource vuoto avente le stesse struttura del dataset che vogliamo andare a rappresentare. Nel caso che si tratti di dati presenti su un database, sarà sufficiente selezionare le tabelle e gli attributi che si intendono rappresentare. Verrà quindi creato un nuovo file “xsd”.
4. Aggiungiamo un oggetto CrystalReport al nostro progetto. Tasto destro del mouse sul nostro progetto e scegliere Add new Item -> Crystal Report. Nella finestra modale che comparirà scegliere il modello Standard, e nella pagina successiva dello Wizard scegliere il dataset creato nel punto precedente (in questo modo indichiamo a CrystalReport la struttura dati sulla quale dovrà lavorare)
5. Procedere alla costruzione grafica della pagina di CrystalReport tramite VisualStudio
6. Tasto destro sulla form creata al punto 1, scegliere la voce “Choose a crystal report”, e qui selezionare il report da noi creato nei punti 4 e 5.
7. Cancellare eventualmente dal nostro progetto il file .xsd, visto che non ci sarà più utile
8. Aggiungere le seguenti righe di codice alla Form creata al punto 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public partial class Frm_Prova : Form
    {
        public Frm_Prova(DataSet dati)
        {
            InitializeComponent();
            CryReport1.SetDataSource(dati);
        }

        //
        //           Rilascio della memoria alla chiusura dell'applicazione
        //

        private void Frm_Prova_FormClosed(object sender, FormClosedEventArgs e)
        {
            CryReport1.Dispose();
            this.Dispose();
        }

    }

dove “CryReport1” è l’istanza dell’oggetto CrystalReport aggiunto al punto 6

9. Supponendo di voler creare il report di alcuni dati presenti su un nostro DB, alla pressione di un tasto, dovremo andare a inserire le seguenti righe di codice in corrispondenza dell’evento Click sul tasto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void buttonPrintReport_Click(object sender, EventArgs e)
        {

        //Retrive DB data
                SqlDataAdapter adapter = new SqlDataAdapter();
                DataSet Our_Data = new DataSet();
                string query;

                Our_Data.Tables.Add();

                query = "SELECT * FROM TABLE_NAME";
                adapter.SelectCommand = new SqlCommand(query, DBConnection);

                adapter.Fill(Our_Data.Tables[0]);
                Our_Data.Tables[0].TableName = "TABLE_NAME";

                Frm_Prova Report = new Frm_Prova(Our_Data);
                Report.ShowDialog(this);

        }

In questo esempio, al punto 3 avremo dovuto creare un file xsd con la struttura della tabella “TABLE_NAME”.

Alla pressione del tasto “buttonPrintReport”, comparirà a video una form contenente l’anteprima di stampa del nostro report, rappresentante i dati contenuti nel nostro dataset “Our_Data”.