[VB.NET] Creare un report

lunedì 22 ottobre 2007 - 07.38

x69asterix Profilo | Junior Member

ciao,
allora stò provando a creare un report con crystal, quello integrato con vs 2005, incontro due difficoltà, la procedura che eseguo è quella guidata.
La prima difficoltà è:
esporto il dataset in un file xml:
dataSet.WriteXml(Application.StartupPath + "\Dati.xml", XmlWriteMode.WriteSchema)
la tabella è stata esportata in un file xml, eseguo il wizard del report, è come collegamento al database eseguo file di database è seleziono il file dati.xml precedentemente esportato. Da lì in poi continuo con la crezione del CrystalReport1.rpt. Bene il report lo carico così:

da un button :

Form3.CrystalReport11.Refresh() Form3.CrystalReportViewer1.Refresh() Form3.CrystalReportViewer1.RefreshReport() Form3.ShowDialog()
il report mi viene visualizzato.
Adesso prendo l' intero progetto è lo trasferisco in un altrp PC, all' apertura del

Form3.CrystalReport11.Refresh() Form3.CrystalReportViewer1.Refresh() Form3.CrystalReportViewer1.RefreshReport() Form3.ShowDialog()
questo mi richiede un' atenticazione per la connessione al db, ma a questo non riesco a venirne fuori!!, come si procede?

Secondo caso collego il report al Dataset precedentemente creato con il Bindingsource, il report in progettazione ed in anteprima mi viene visualizzato, ma quento eseguo la compilazione, questo mi viene resituito vuoto??
a voi .....

MI date una mano per favore

freeteo Profilo | Guru

ciao,
quando visualizzi un report, tipicamente gli devi passare i dati da visualizzare, necessariamente quando sposti i dati o cmq fai il deploy dell'applicativo, inquanto tutti i percorsi cambiano ovviamente.

Nel tuo caso, ti basta passare tramite il metodo "SetDataSource" i dati caricati dal file su una dataTable, in questo modo:

ReportDocument report = new ReportDocument(); report.Load(@"C:\...\xmlreport.rpt"); DataTable tabella = new DataTable(); tabella.ReadXml(@"C:\...\Dati.xml"); report.Database.Tables[0].SetDataSource(tabella); crystalReportViewer1.ReportSource = report;


questo usa il mio tipico approccio di fare anche il load del file in modo da essere agili anche quando dovessi gestire delle personalizzazioni, cmq nel tuo caso potrebbe bastare usare direttamente la variabile che crea visual studio, nel tuo caso "CrystalReport11".
ciao.

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

x69asterix Profilo | Junior Member

ciao,
prima di tutto grazie per il tuo interesse, io stò sviluppando in in vb.net credo che la tua risposta riguarda in c#?


bo....
io ho provato con :
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
e questo è il file xml:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

risultato:

3350x3340 172Kb


freeteo Profilo | Guru

>ciao,
>prima di tutto grazie per il tuo interesse, io stò sviluppando
>in in vb.net credo che la tua risposta riguarda in c#?
si ti ho postato del codice che ho usato io in qualche progetto, quindi in c#, ma passare da c# a vb.net è assolutamente semplicissimo, tanto che ci sono anche traduttori gia' fatti come questo:
http://www.carlosag.net/Tools/CodeTranslator/Default.aspx



>bo....
>io ho provato con :
il codice mi sembra giusto, infatti è quasi identico a quello che ti ho postato io, pero' l'immagine che hai allegato non si vede bene, puoi riallegarla? cosi' dal messaggio magari riesco a capire dove sta l'inghippo...
ciao.

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

x69asterix Profilo | Junior Member

http://images.upload2world.com/get-10-2007-upload2world_com_zkvho.PNG

premetto che se aggiungo al CrystalReportViewer1 scegli un report oltre a questo messaggio mi chiede sempre l' autenticazione, se invece escludo scegli un report ottengo:

Impossibile stampare la sezione di questo gruppo. il campo di condizione non esiste o non è valido. Formattare la sezione per scegliere un altro campo di condizione.
errore nel file C:\DOCUME 1\User\IMPOS 1\Temp\CrystalReport1
{84B1ABD0-B6E6-4AEC-8960-E21ADBDBA8BB}.rpt:
Condizione di gruppo non valida

vedi:

http://images.upload2world.com/get-10-2007-upload2world_com_avwcp.JPG

freeteo Profilo | Guru

ciao,
sembra che i dati che gli vengono passati non abbiano la struttura che lui chiede, e il messaggio del campo sbagliato è proprio perche' non lo trova fra i suoi dati.
Ti allego un progetto semplice semplice, in c# (ma farai prestissimo a convertirlo in vb.net magari aiutato da un tool come questo: http://www.carlosag.net/Tools/CodeTranslator/Default.aspx)

nell'esempio probabilmente c'e' da ritoccare il path del db nel codice, ma cmq puoi vedere il concetto che è di passare i dati uguali a quelli con cui costruisci il report stesso...se cambiano totalmente (di struttura intendo) allora il report va rifatto (o cmq riverificato il db)
ciao.

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

x69asterix Profilo | Junior Member

ciao,
grazie per il tuo intervento, allora il problema stà nel fatto che io non stò usando il file mdb, ma sono costretto ad usare un file xml. Quindi penso che il progetto che hai sviluppato sia diverso dal mio problema. Però non capisco una cosa, se il file xml non è compatibile con la struttura del report, allora perchè se aggiungo da crystalReportViewer1 "scegli un report" quando carico il form me lo visualizza correttamente?
Il problema si presenta solo quando sposto l'applicativo in un' altra directory!!

freeteo Profilo | Guru

ciao,
ho capito infatti la cosa non dovrebbe avere nessun problema, se usi il codice che ti ho postato qualche risposta fa, dove leggo l'xml in un datatable, non puo' succedere che non si visualizzi piu', se i dati nella datatable ci sono non puo' essere che al report non gli vadano piu' bene...c'e' un errore da qualche parte.

Prova a postare la parte relativa al solo report con dei dati "finti" cosi' capisco meglio dove sta l'inghippo....
ciao.

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

x69asterix Profilo | Junior Member

allora ti posto il codice che riguarda sia la connessione e la creazione del file.xml
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

x69asterix Profilo | Junior Member

sembra che il problema sia:

Dim mioreport As New CrystalDecisions.CrystalReports.Engine.ReportDocument()
Dim tabella As New DataTable()
mioreport.Load(Application.StartupPath + "\CrystalReport7.rpt")
tabella = New DataTable()
tabella.ReadXml(Application.StartupPath + "\Bancomat.xml")
mioreport.Database.Tables(0).SetDataSource(tabella)
CrystalReportViewer1.ReportSource = mioreport

invece:

Dim mioreport As New CrystalDecisions.CrystalReports.Engine.ReportDocument()
Dim tabella As New DataTable()
mioreport.Load(Application.StartupPath + "\CrystalReport7.rpt")
tabella = New DataTable()
tabella.ReadXml(Application.StartupPath + "\Bancomat.xml")
mioreport.Database.Tables(0).SetDataSource(tabella.DataSet)'<-----I
CrystalReportViewer1.ReportSource = mioreport

però se cambio dir mi punta sempre al file di origine?
perchè?

freeteo Profilo | Guru

nel report hai piu' di una tabella? se si allora devi leggere/salvare tutto il dataset tramite i suoi metodi "WriteXml"/"ReadXml"...
Poi quando cambi il path, ti basta passarlo come variabile al metodo, e non ci sono problemi di puntamento al file vecchio, dato che poi gli passi tutto tramite il metodo "SetDataSource"...

ciao.

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

x69asterix Profilo | Junior Member

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
ciao,
prima di tutto mi scuso se stò monopolizzando,
nel report hai piu' di una tabella? "NO"
Ma allora che cribbio è che mi punta sempre al vecchio file??
il file xml è:
http://www.dotnethell.it/forum/ShowCode.aspx?MessageID=75928&Frag=1
non ci stò capendo più nulla!!

x69asterix Profilo | Junior Member

Scoperto l' Arcano!!

Dim mioreport As New CrystalDecisions.CrystalReports.Engine.ReportDocument()
Dim tabella As New DataSet '<-----------
mioreport.Load("CrystalReport1.rpt")
tabella = New DataSet '<--------
tabella.ReadXml(Application.StartupPath + "\DB\Bancomat.xml")
mioreport.Database.Tables(0).SetDataSource(tabella)
CrystalReportViewer1.ReportSource = mioreport

freeteo Profilo | Guru

ok, risolto il problema, non gli passavi la stessa struttura con la quale hai costruito il report...ok dai dopo 1po di peripezie, siamo riusciti
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