Progettare un report Crystal partendo da un DataSet creato a runtime

venerdì 10 ottobre 2008 - 20.01

zactime Profilo | Newbie

Un saluto a tutti.

Ho appena installato la versione trial di Crystal Report 2008.

Come da oggetto vorrei creare a runtime un DataSet popolato con i dati che dovranno essere stampati ma a questo punto come faccio a progettare il report ?

In VB6 in fase di progettazione del report indicavo qual'era la fonte dati (per esempio un database di Access e nello specifico una o più tabelle) e quindi posizionavo i campi da stampare prendendoli dal relativo elenco.

Ma ora con il DataSet come faccio ? Quando devo disegnare il report io la struttura del dataset non ce l'ho.

Attendo ansioso ma fiducioso chiarimenti da parte vostra.

Grazie in anticipo.

Oscar

freeteo Profilo | Guru

>Ma ora con il DataSet come faccio ? Quando devo disegnare il
>report io la struttura del dataset non ce l'ho.
come no?
Mentre stai disegnando il report->esperto database->Project Data->Ado.net Dataset->scegli il tuo dataset e il tuo report è agganciato al dataset tipizzato che hai creato nel progetto.
Poi decidi tu come popolare i dati, ma presumo tu abbia chiaro come fare con i dataAdapters.

** nota personale:
Io sconsiglio sempre i dataSet tipizzati, io spingo per l'utilizzo di modellazione a classi dei tuoi oggetti (poi se sei su sql puoi usare Linq2Sql che lo fai addirittura in un Drag&Drop) perchè ti trovi con entità pulite e non oggetti come DataTable,DataSet che poi si portano dietro altre funzionalità che sono proprie dell'oggetto che estendono (datatable/dataset appunto).
Questa scelta porta poi a farsi i vari strati dell'applicazione per "riempire" gli oggetti, sicuramente 1po di codice da scrivere inzialmente (pochissimo se usi linq2sql) ma vai molto bene se devi poi far crescere il progetto facendo estensioni di classi, modifiche di prorpietà etc...insomma "modellazione" della tua applicazione.

Parere personale, solo che mi ha portato sempre ottime riscontri via via che i progetti si complicavano, perciò pensavo di dartelo come spunto di valutazione.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

zactime Profilo | Newbie

Ciao Matteo.
Per iniziare grazie per la risposta.

>come no?
>Mentre stai disegnando il report->esperto database->Project
>Data->Ado.net Dataset->scegli il tuo dataset e il tuo report
>è agganciato al dataset tipizzato che hai creato nel progetto.
>Poi decidi tu come popolare i dati, ma presumo tu abbia chiaro
>come fare con i dataAdapters.
>

Non mi sono spiegato bene. Io volevo evitare i DataSet tipizzati. Io volevo crearlo da codice, popolarlo e poi darlo in pasto al report.
E operando in questo modo ... come si fa ?????

>** nota personale:
>Io sconsiglio sempre i dataSet tipizzati, io spingo per l'utilizzo
>di modellazione a classi dei tuoi oggetti (poi se sei su sql
>puoi usare Linq2Sql che lo fai addirittura in un Drag&Drop) perchè
>ti trovi con entità pulite e non oggetti come DataTable,DataSet
>che poi si portano dietro altre funzionalità che sono proprie
>dell'oggetto che estendono (datatable/dataset appunto).
>Questa scelta porta poi a farsi i vari strati dell'applicazione
>per "riempire" gli oggetti, sicuramente 1po di codice da scrivere
>inzialmente (pochissimo se usi linq2sql) ma vai molto bene se
>devi poi far crescere il progetto facendo estensioni di classi,
>modifiche di prorpietà etc...insomma "modellazione" della tua
>applicazione.
>
>Parere personale, solo che mi ha portato sempre ottime riscontri
>via via che i progetti si complicavano, perciò pensavo di dartelo
>come spunto di valutazione.
>

Ottimo. Purtroppo sto imparando adesso il VB.NET e a Linq2Sql non ci sono ancora arrivato
Gli darò un'occhiata.

Ti spiego come ho fatto per ora e mi dai un parere, se ti va (magari esponendomi i pregi e i difetti rispetto all'uso di Linq2Sql).

Ho aperto il mio Crystal, gli ho agganciato il mio SQL senza sicurezza integrata, ho disegnato e salvato il mio rpt. In VB da codice imposto CrystalViever e i suoi parametri, quindi gli passo la mia RecordSelectionFormula.
In termini di prestazioni come trovi questo sistema ?
Linq2Sql ti da forse il vantaggio di passare al file rpt già i soli dati necessari e quindi non si fa fare a lui il lavoro di selezione diventando più veloce ?

Ti ringrazio fin d'ora per la risposta.

Oscar

freeteo Profilo | Guru

>Non mi sono spiegato bene. Io volevo evitare i DataSet tipizzati.
>Io volevo crearlo da codice, popolarlo e poi darlo in pasto al
>report.
il tuo report lo hai definito in maniera precisa in fase di design su quale saranno i campi da visualizzare, o vuoi fare un report con campi generati a runtime?
Questa seconda cosa non è possibile, almeno con la licenza standard di Crystal.

I vari metodi li puoi trovare qui:
http://www.dotnethell.it/articles/Crystal-Reports-Integration-Windows-Form.aspx
a destra trovi anche il download dell'esempio.



>Ottimo. Purtroppo sto imparando adesso il VB.NET e a Linq2Sql
>non ci sono ancora arrivato
>Gli darò un'occhiata.
ottimo.



>Ho aperto il mio Crystal, gli ho agganciato il mio SQL senza
>sicurezza integrata, ho disegnato e salvato il mio rpt. In VB
>da codice imposto CrystalViever e i suoi parametri, quindi gli
>passo la mia RecordSelectionFormula.In termini di prestazioni come trovi questo sistema ?
direi che è accettabile se non hai tanti dati, infatti se provi ad utilizzare il profile su sql, ti accorgi che il report fa la query totale sul db, e filtra dopo i dati che ha caricato.
Ti dico, spesso non fa differenza, ma se vuoi stare tranquillo all'aumentare dei dati, devi fare la query sul db già prima di darli in pasto al report, quindi non usare la RecordFormula, ma preferisci piuttosto un utilizzo di ado.net, o cmq usa l'esperto database specificando un "comando", ovvero una query, dove specifichi anche i parametri di filtro.
Questi parametri li passi poi al report da codice, così facendo la query che lo stesso Crystal fa sul db è già con il "where".



>Linq2Sql ti da forse il vantaggio di passare al file rpt già
>i soli dati necessari e quindi non si fa fare a lui il lavoro
>di selezione diventando più veloce ?
no linq2sql ti serve per disegnare il tuo "domain-model" ovvero il tuo Dominio delle classi, direttamente da sql, quindi diciamo che ti velocizza la tipizzazione , un'evoluzione di un ORM, perchè poi lavori con collection di oggetti, e DataContext, il quale scrive le query per te...una "rivoluzione" nel mondo del software a mio avviso, perchè risparmi giornate di lavoro



>Ti ringrazio fin d'ora per la risposta.
figurati, siamo qui per questo, e cmq considera che sono solo opinioni personali, devi cmq approfondire 1po e valutare se va bene nella tua realtà.


ciao.

Matteo Raumer
[MCAD .net]
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5