Visualizzare o stampare un Report

domenica 05 luglio 2009 - 23.17

Peppino Profilo | Junior Member

Ciao a tutti, sono un principiante ed ho iniziato a costruire una piccola applicazione con ADO.NET Visual Basic 2005 express edition e con database Access, con risultati accettabili. Il problema stà nella stampa dei dati. Ho provato con i report di Access, semplici da costruire e stampare, ma però il fatto di operare al di fuori dell'applicazione "almeno per quello che è il mio grado d'apprendimento fino adesso", penso che sia poco gradito e non solo a me. Dietro vostro consiglio mi sono procurato Crystal Report 2008, ma il problema è rimasto lo stesso. Tra le varie ricerche fatte e articoli letti, ho notato che il problema è risolvibile con Visual Studio "almeno penso" con il quale è integrato una versione di Crystal Report. Allora mi sono procurato ed installato Visual Studio 2008, quindi ho aperto la mia piccola applicazione con Visual Studio e tramite degli articoli del Forum, forse sono riuscito a creare un report, non con il database di esempio "Northwind" ma con il mio database, ma non sono riuscito a creare il modo di visualizzarlo e stamparlo, anche perchè l'esempio dell'articolo è scritto in "C" e fàriferimento al database di esempio, o almeno per quello che sono riuscito a capire io. Quello che io vorrei, per non tornare a chiedere di nuovo sull'argomento, è un aiutino con un percorso da seguire e magari con un esempio di codice "scritto in VB", a far sì che possa realizzare questo benedetto report per la stampa dei dati. Ripeto l'applicazione è costituita con i Dataset e DataGridView. Forse ho scritto un giornale, ma ho cercato di spiegare il più possibile il mio quesito. Ringrazio anticipatamente. Saluto tutti. Ciao.
Peppino

Jeremy Profilo | Guru

Ciao Peppino.
Se sei riuscito a costruire il report ed a popolarlo di dati ..... il gioco è praticamente fatto.
Non ti resta che inserire, all'interno di un form, un controllo CrystalReportViewer, valorizzare la proprietà ReportSource con il nome del tuo Report (a design-time .... a run-time il discorso si complica un pochino .... ma non molto) ed aprire il form contenente il CrystalreportViewer.
Per la stampa .... capirai da solo.
Ad ogni modo ... se hai bisogno ....siamo qui

Facci sapere...
Ciao

DomA Profilo | Expert

Ciao,
fermo restando quanto detto da Jeremy ti posto il codice che utilizzo per l'apertura del report:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Come vedi, oltre alla connessione al report devi passare i dati (ovvero popolarlo con le varie tabelle del db, che nel mio caso sono: Articoli, cliente etc.).
Il codice è in vb.

Domenico

Peppino Profilo | Junior Member

Ciao a tutti, credo di aver seguito le vostre istruzioni e cioè, oltre al fatto di credere di aver creato un report. Ho aperto una form, ho trasportato dalla casella degli strumenti sul form "CrystalReportViewer". L'applicazione "Cantieri Edili" si trova nella cartella Documenti, il database "Cantieri.mdb", le tabelle inserite "Società, ClientiLavoro e Uscite" e il report fatto da me "Report.rpt" sono nella cartella "Cantieri Edili". Il codice uguale al vs. esempio variato con i dati del mio database è comunque riportato di seguito.
Public Class frmReport
Private Sub frmReport_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strProvider As String = "Provider = Microsoft.Jet.OLEDB.4.0;"
'Dim NomePerc As String = CStr(Me.txtNomePerc.text)
Dim strOrigine As String = "Data Source=" & Application.StartupPath & "\Cantieri.mdb"
Dim strConnessione As String = strProvider & strOrigine
Dim Conn As OleDb.OleDbConnection
Conn = New OleDb.OleDbConnection(strConnessione)

Dim cmdSocietà As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM Società", strConnessione)
Dim objTable As New DataTable()
cmdSocietà.Fill(objTable)

Dim cmdClientiLavoro As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM ClientiLavoro", strConnessione)
Dim objTableClienti As New DataTable()
cmdClientiLavoro.Fill(objTableClienti)

Dim cmdUscite As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM Uscite", strConnessione)
Dim objTableUscite As New DataTable()
cmdUscite.Fill(objTableUscite)

Dim RepPath As String = Application.StartupPath & "\Report.rpt"
Dim Report = New CrystalDecisions.CrystalReports.Engine.ReportDocument()

Report.Load(RepPath) ' ********************************
Report.SetDataSource(objTable)

Report.DataBase.Tables("Società").SetDataSource(objTable)
Report.DataBase.Tables("ClientiLavoro").SetDataSource(objTableClienti)
Report.DataBase.Tables("Uscite").SetDataSource(objTableUscite)

Me.CrystalReportViewer1.ReportSource = Report
End Sub
End Class

All'avvio dell'applicazione e quindi del ReportViewer il programma si ferma sulla riga contrassegnata con le asterische con il messaggio di errore "Caricamento Report non riuscito". Dove stà l'errore o c'è da fare qualche altro passaggio?. Considerate il fatto che sono un principiante, quindi non meravigliatevi se l'errore fosse una cosa per voi banalissima, ma io non riesco. Grazie anticipate come sempre. Saluto.
Ciao. Peppino.

Anonimo Profilo | Senior Member

Ciao Peppino.
Allora siccome il mio thread è praticamente uguale, ed io l'ho aperto una settimana fa, e non ho ottenuto risposte, per non stare fermo ho cercato dappertutto e ho trovato, proprio su questo sito, quest'articolo che tratta CrystalReports.

http://www.dotnethell.it/articles/CrystalReportsASPNET.aspx

L'esempio usa del codice c#, però potresti capirlo perché è abbastanza semplice, e poi di codice c'è ben poco. Spero d'esserti stato d'aiuto.


EDIT: Ho letto adesso che ti sei già rivolto all'articolo del forum. Sorry.
Allora ti spiego come ho fatto io:
1) ho importato sulla pagina i due controlli interessati, CrystalReportViewer e CrystalReportSource.
2) dopodiché, con quest'ultimo controllo, ho fatto "Configura l'origine report".. E da lì dovrebbe essere semplice per te. Devi impostare il tipo di report, dove prendere i dati.. ecc ecc
3) prova poi a mettere, nel codice asp.net, questo:
<CR:CrystalReportSource ID="CrystalReportSource1" runat="server"> <Report FileName="C:\percorso completo"> </Report> </CR:CrystalReportSource>
Ti dovrebbe poi risolvere il problema..
Temo di non essermi spiegato tanto bene però.

-------------------
| X-RayStyle |
-------------------

Peppino Profilo | Junior Member

Ciao a tutti. Per quella che è la mia poca conoscenza in materia, ho provato a cambiare qualcosa ma il risultato è sempre lo stesso "riferimento l'esempio di codice sopra riportato", cioè "caricamento report non riuscito". Ho provato a deselezzionare le righe iniziando dalla riga contrassegnata dalle asterische più le successive 4 righe. Allora avvio l'applicazione, l'errore non me lo dà, mi apre la form di CrystalReportViewer però mi dà "percorso del file del report non valido". Ma se nelle proprietà del form di progettazione CrystalReportViewer, alla voce "ReportSouce", gli dò il percorso del report e me lo visualizza, lo stesso percorso scitto nel codice mi dice che il percorso non è valido, come mai?. Ringrazio tutti. Saluto.
Ciao. Peppino.

Jeremy Profilo | Guru

Ciao Peppino.
Attenzione che, impostando l'origine dati con il metodo SetDataSource, l'istanza del report che assegni alla proprietà ReportSource del CrystalreportViewer, deve essere una nuova istanza del tipo di report che hai progettato.
Quindi, queste righe di codice:
Dim RepPath As String = Application.StartupPath & "\Report.rpt" Dim Report = New CrystalDecisions.CrystalReports.Engine.ReportDocument() Report.Load(RepPath) ' ******************************** Report.SetDataSource(objTable)
si ridurrebero a:
Dim mioReport = New ReportDiProgettazione mioReport.SetDataSource(objTable) Me.CrystalReportViewer1.ReportSource = mioReport

Facci sapere...
Ciao

Peppino Profilo | Junior Member

Ciao a tutti, non so se la procedura è giusta, ma sembra aver intrapreso quella per risolvere il problema. Ho azzerato nell'applicazione tutto quello che riguardava la reportistica ed ho iniziato dall'inizio. Ho aperto una Form, dalla casella degli strumenti ho trasportato CrystalReportViewer, con il tasto destro del mouse ho scelto crea nuovo Report, ho collegato il database, ho scelto una tabella e i dati da visualizzare nel Report e confermato, senza scrivere un rigo di codice, avvio l'anteprima e mi visualizza i dati senza nessun errore, avvio l'applicazione dal menù apro il Report e mi visualizza i dati. Allora voi dite il problema è risolto, e invece no. Se nella costruzione del Report passo una sola tabella, va tutto bene, se invece passo più di una tabella, non mi dà nessun errore, ma mi visualizza i nomi delle variabili al posto dei dati. Che cosa manca o cosa rimane da fare?. se a questo punto serve qualche riga di codice in "VB", "quale?". Ringrazio tutti veramente di cuore, per la tempestività e la disponibilità. Spero di non essere un rompi.....
Saluto. Ciao. Peppino

Jeremy Profilo | Guru

In che senso ti visualizza il nome delle variabili ??? te lo chiedo perchè se lo fa in progettazione è normale!!.
Nel senso che ... quando fai l'anteprima del Report,in progettazione, le datatable vengono popolate con dei valori casuali.

Facci sapere....
Ciao

Peppino Profilo | Junior Member

Ciao Jeremy, una volta passate le tabelle e dato l'OK, in progettazione mi visualizza in intestazione di pagina il nome della variabile formato Testo, e nei dattagli il nome della variabile formato stringa, numero ecc.., faccio l'anteprima e mi visualizza solo le variabile formato Testo. Per quanto riguarda i nomi casuali o dati insignificanti, è vero ho verificato visualizzazione del genere, ma nelle tante prove che ho fatto e che onestamente non ricordo come e quando, adesso ripeto con una sola tabella funziona, con più tabelle mi visualizza come descritto. Saluto. Ciao. Peppino

Jeremy Profilo | Guru

Ciao Peppino.
non capisco cosa intendi con
>passo una sola tabella
io lo interpreto così:
mioReport.SetDataSource(objTable)
tu cosa intenderesti dire???

Facci sapere...
Ciao

Peppino Profilo | Junior Member

Ciao Jeremy scusami se non riesco a esporre bene la situazione. Il passaggio delle tabelle consiste nel fatto che quando faccio la connessione del database al report, mi visualizza le tabelle del database, allora se per esempio devo creare un report di una fattura, ho bisogno di passare le tabelle "Società, Cliente e DatiFattura", almeno per come è strutturato il mio database, così facendo non mi visualizza i dati di nessuna tabella, mentre se per esempio passo solo la tabella "DatiFattura", funziona. Spero di essere riuscito a fare un quadro chiaro del problema. Tenedo presente che fino a questo punto non ho scritto una riga di codice, il tutto avviene per passaggi automatici. Saluto. Ciao. Peppino.

Peppino Profilo | Junior Member

Ciao Jeremy, scusami ma forse ho capito il problema. Nei vari passaggi che effettuavo, trascuravo la relazione tra le tabelle, ecco perchè con una sola tabella funzionava non avendo bisogno di nessuna relazione, mentre con più tabelle è necessario dargli la relazione. Avrei ancora qualcosa da chiedere ma per il momento vorrei approfondire su quello fatto fino a questo momento. Comunque grazie ma tante grazie veramente a tutti. A risentirci. Saluto. Ciao. Peppino.

DomA Profilo | Expert

Ciao,
se ho capito bene il tuo problema risiede nel report. Hai settato bene i collegamenti nel report?
Mi spiego meglio nelle tabelle (tutte le tabelle) dovresti inserire una sorta di indice (es. n° fattura). Fatto ciò, e registrato l'indice stabilito per ogni record, nel report devi creare i collegamenti (come le relazioni in access) tra le varie tabelle. I collegamenti si creano dal menù Database --> esperto database.
Spero di essere stato chiaro.
Fammi sapere.
Domenico

Peppino Profilo | Junior Member

Ciao Domenico, infatti il problema stava proprio nelle relazioni delle tabelle, purtroppo lo avevo fatto provando con i report di access, metre con le prove che facevo con Crystal di VS purtoppo trascuravo questa impostazione. Quindi per il momento penso che il problema sia risolto. Avrei ancora qualcosa da chiedere, ma mi sebra di aver letto qualcosa a riguardo se non mi è chiaro mi faro sentire. Ringrazio tutti per la tempestività e disponibilità. Saluto. Alla prossima. Ciao. Peppino.

DomA Profilo | Expert

Ciao Peppino. Se non ci sono problemi possiamo chiudere il thred.
Se invice vuoi postare siamo qui per questo.
Alla prossima.
Domenico

Peppino Profilo | Junior Member

Ciao a tutti, veramente non so se chiudere questo e aprire un altro o continuare con questo Threads. Il problema precedente sembra per il momento risolto, anche se c'è qualcosa che a volte non è chiara. Adesso una cosa che non riesco a trovare la strada è che nel report devo "aggiungere" un campo che non fà parte di quelli inerenti l'origine dati, ma uno che vado ad inserire io, che dovrebbe darmi come risultato la divisione di 2 campi. Nei report access, un click con il tasto destro del mouse sul campo e gli scrivo la formula direttamente, mentre con crystal non è possibile, a parte i campi tipo testo non accetta l'input diretto. Dove devo intervenire per procurarmi questo risultato?. Poi mi fate sapere se per questo post conviene aprire un nuovo Threads o continuare con questo. Saluto tutti. Ciao. Peppino

Jeremy Profilo | Guru

Ciao Peppino.
Ogni volta che l'oggetto della richiesta cambia, conviene aprire un nuovo thread.

DomA Profilo | Expert

Dovresti aprire un nuovo thread comunque ti rispondo qui.
Per fare operazioni devi usare le formule. Crea una nuova formula e fai le operazioni che vuoi con i campi del report o del db, non tutti i campi devono essere necessariamente inseriti nel report. A questo punto basta trascinare il campo formula nel report ed il gioco è fatto.
Se ci sono problemi dovresti chiudere il thread ed aprirne uno nuovo.
Ciao
Domenico
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