Crystal Report con ASP.NET 2.0

mercoledì 12 settembre 2007 - 11.12

SharKMaN Profilo | Newbie

Ciao a tutti,
tramite VS2005 ho generato un applicativo, ora sono arrivato alla fine... ovvero stampare il report dei dati che il Cliente ha ordinato.

Ho provato installando una stampante PDF sul server senza però ottenere risultati, quando invio la stampa dal Client al Server mi dice operazione terminata con successo... ma la stampa non esiste.

Per cui ora sto provando Crystal Report

Allora... nella GridView ho una query un pò complessa... va a prendere i dati da 4 tabelle... la mia domanda è ... c'è la possibilità in Crystal Report di "copiare" la stessa SQL ? ... Oppure c'è la possibilità di "passare" i dati dalla GridView a Crystal Report ?

In pratica ho la necessità di stampare il riepilogo del Cliente... Ma... non so come affrontare ciò... per cui se qualcuno mi da consiglio o dritta ne sarei grato.

Grazie a tutti
Daniele

freeteo Profilo | Guru

> ... Oppure c'è
>la possibilità di "passare" i dati dalla GridView a Crystal Report?
certo, ti basta costruirti un report con quei campi che hai nella gridview e poi passare i dati che hai come "datasource" della gridview al report.

Per costruire il report con quei dati, intendo aggiungere al progetto un file di Report di Crystal, andare tramite wizard a selezionare una sorgente dati che abbia gli stessi campi che ci sono nella gridview, e poi disporli dove ti interessa.
Fatto questo puoi usare un di questo tipo:

ReportDocument report = new ReportDocument(); report.Load(MapPath("../report.rpt")); report.SetDataSource(#tuaDatagridview#.DataSource); #tuoReportViewer#.ReportSource = report; #tuoReportViewer#.DataBind();
il punto sta nel fatto che la tua sorgente dati della griglia sara' probabilmente una DataTable o u DataSet o qualche Collection<T>, ad ogni modo una struttura che deve essere usata per creare il report a design, in modo che poi tu decidi i filtri che vuoi e i dati risultanti vengano impaginati e pronti a stampare nel report...
ciao.

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

SharKMaN Profilo | Newbie

Ciao Matteo e grazie per la risposta...

Ti pongo una domanda OT... nel momento in cui ho generato la mia stampa... perchè in "locale" mi funziona tutto perfettamente senza l'ausilio del CR, sul Server ho installato una stampante che crea il PDF, il programma invia correttamente la stampa a tale stampante... ma poi... come faccio a farmi restituire tale stampa sul Client?

Ciao e grazie... ora provo anche con il tuo metodo del CR.
Buona giornata
Daniele

SharKMaN Profilo | Newbie

>Per costruire il report con quei dati, intendo aggiungere al
>progetto un file di Report di Crystal, andare tramite wizard
>a selezionare una sorgente dati che abbia gli stessi campi che
>ci sono nella gridview, e poi disporli dove ti interessa.

OK. Questo credo di averlo fatto ho inserito un nuovo file nel progetto Report.rpt tramite wizard mi sono collegato al DB del Server (tutto ok) ed ho inserito le 3 tabelle che sono presenti anche nella GridView

>Fatto questo puoi usare un di questo tipo:
>
>ReportDocument report = new ReportDocument();
>report.Load(MapPath("../report.rpt"));
>report.SetDataSource(#tuaDatagridview#.DataSource);
>
>#tuoReportViewer#.ReportSource = report;
>#tuoReportViewer#.DataBind();

OK. Fatto anche questo

>il punto sta nel fatto che la tua sorgente dati della griglia
>sara' probabilmente una DataTable o u DataSet o qualche Collection<T>,
>ad ogni modo una struttura che deve essere usata per creare il
>report a design, in modo che poi tu decidi i filtri che vuoi
>e i dati risultanti vengano impaginati e pronti a stampare nel
>report...
>ciao.

Credo di aver fatto tutto in maniera corretta... solo che quando faccio per visualizzare il ReportViewer mi dice Caricamento non riuscito...
Dove sto sbagliando ?

Ciao Matteo e grazie
Daniele

SharKMaN Profilo | Newbie

Ho portato il tutto sul Server... Report.rpt e le nuove funzioni sulla Pagina ASPX solo che mi da un errore:

Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.

Parser Error Message: Could not load file or assembly 'CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified.

Source Error:

Line 1: <%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Ordine.aspx.vb" Inherits="Utente_Ordine" title="Gestione Ordine" %>
Line 2:
Line 3: <%@ Register Assembly="CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
Line 4: Namespace="CrystalDecisions.Web" TagPrefix="CR" %>
Line 5: <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

Source File: /Utente/Ordine.aspx Line: 3

Assembly Load Trace: The following information can be helpful to determine why the assembly 'CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' could not be loaded.

WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

Come posso rimediare?

freeteo Profilo | Guru

ciao,
devi installare il runtime del report di Crystal sul server web, in modo che le librerie che usa per far girare i report siano presenti.
Ti basta installare il runtime che trovi come CRRedist2005_x86.msi basta che lo cerchi sulla tua macchina dove hai visual studio e poi lo installi sul server web, ti registra anche il comportamento web su IIS.

Se vuoi qualcosa di piu' "ufficiale" lo trovi in questo documento:
http://support.businessobjects.com/communitycs/technicalpapers/deploying_cr10_net.pdf
ciao.

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

SharKMaN Profilo | Newbie

Ciao Matteo e grazie e come sempre :)
Ho risolto tutto ieri ed è esattamente come mi hai descritto tu...

Lo diciamo a tutti se capita nuovamente ciò.

Per chi utilizza un proprio server web ed esce il messaggio:

Parser Error Message: Could not load file or assembly 'CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified.

Le operazioni da eseguire sono:

1. Cartella: C:\Programmi\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\CrystalReports
2. Copiare il File CRRedist2005_x86.msi sul proprio Web Server ed eseguirlo
3. Per controllare che sia stato installato correttamente bisognerà andare su START - PROGRAMS - ADMINISTRAIVE TOOLS - Microsoft .NET Framework 2.0 Configuration
4. Si aprirà sulla Vs. sinistra un Menù a Tendina... premete su My Computer e Assembly Cache ed infinte premete su View Cache alla voce Crystal troverete tutto ciò che server al Framework per utilizzare Crystal Report (noterete anche nella colonna Version, la Version che vi indicava durante l'errore)

5. Ultima operazione da eseguire... aprite il web.config, noterete che qualcosa è cambiato... prendete il pezzo cambiato ed inseritelo nel web.config sul Vs. Server..

E il gioco è fatto :)

Ciao
Daniele

---------------------------------
Matteo ti faccio sapere se riesco a fare il report dal server... altrimenti ti chiederò ancora aiuto :)
Grazie ancora

SharKMaN Profilo | Newbie

Allora... qualcosa di nuovo si comincia a vedere...

Ho creato tutto il report collegato al DB del SERVER per fare una prova ho selezionato tutti i campi di tutte le tabelle... infatti quando vado a fare l'Anteprima del Report Principale da Locale si collega al DB del Server e mi visualizza tutti i dati... Perfetto!

Invece... se eseguo l'applicativo dal Server... nel momento in cui richiedo il Report mi dice Caricamento non riuscito... c'è da dire una cosa.. quando eseguo tale istruzione:

Report.SetDataSource(GridView2.DataSource)

Ovvero che prendo i dati dalla GridView... nella GridView c'è da dire che è una SQL abbastanza complessa... e a seconda di determinate situazioni la GridView rende visibile o invisibile determinate colonne... ciò può interagire con il fatto che al Report abbia richiesto di estrarre TUTTI i campi ?

L'SQL della GridView è questa....

SELECT TBL_QUANTITA.ID_ARTICOLO, TBL_ARTICOLO.ART_1, TBL_ARTICOLO.ART_3, TBL_ARTICOLO.ART_4, TBL_ARTICOLO.ART_5, TBL_ARTICOLO.ART_6, TBL_ARTICOLO.ART_7, TBL_ARTICOLO.ART_8, TBL_QUANTITA.ARTORD_1 FROM TBL_LOCALE INNER JOIN TBL_UTENTE ON TBL_LOCALE.ID_LOCALE = TBL_UTENTE.ID_LOCALE INNER JOIN TBL_ORDINE ON TBL_UTENTE.ID_UTENTE = TBL_ORDINE.ID_UTENTE INNER JOIN TBL_QUANTITA ON TBL_ORDINE.ID_ORDINE = TBL_QUANTITA.ID_ORDINE INNER JOIN TBL_ARTICOLO ON TBL_QUANTITA.ID_ARTICOLO = TBL_ARTICOLO.ID_ARTICOLO WHERE (TBL_LOCALE.ID_LOCALE = @ID_LOCALE) AND (TBL_UTENTE.ID_UTENTE = @ID_UTENTE) AND (TBL_ORDINE.ID_ORDINE = @ID_ORDINE)

La GridView riesce a far visualizzare SOLO 4 Campi...

Non riesco a capire come interagisce il Report sulla GridView spero in un tuo amico per terminare questo app che mi sta facendo impazzire :)

Grazie Matteo
Daniele

freeteo Profilo | Guru

ciao,
si nel report devi passargli la stessa struttura del report altrimenti lui va in errore, non importa se i dati ci sono, ti basta solo che per ogni riga che lui visualizza ci sia la stessa struttura di campi con cui hai fatto il report.
Quindi innanzitutto prova a ricreare il report con i soli 4 campi che puoi passi a runtime, poi vediamo se il problema del messaggio è relativo a questa incogruenza o a qualcos'altro...
ciao.

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

SharKMaN Profilo | Newbie

Seguito tutto ciò che mi hai detto...
Inserito nel Report SOLO i 4 campi che visualizzo anche nella GridView... ma senza avere esito positivo...

Caspita che fatica questo CR

Grazie tante Teo
Daniele

SharKMaN Profilo | Newbie

Ribaltiamo la situazione....
Come faccio con il ReportViewer a leggere un file di testo situato sul server ?

A questo punto ho deciso di crearmi un TXT e poi leggerlo ed infine stamparlo... Credo sia più semplice visto che stampare sul server o con il CR ho difficoltà :)

Ciao Teo
Dani

freeteo Profilo | Guru

>Ribaltiamo la situazione....
>Come faccio con il ReportViewer a leggere un file di testo situato
>sul server ?
non puoi, il reportviwer si aspetta un reportSource quindi un oggetto ReportDocument per visualizzarlo non ci sono altre strade.


>A questo punto ho deciso di crearmi un TXT e poi leggerlo ed
>infine stamparlo... Credo sia più semplice visto che stampare
>sul server o con il CR ho difficoltà :)
beh se vuoi fare qualcosa di semplice puoi leggerti il file con il metodo "File.ReadAllLines(...)" e poi giri per tutte le stringhe (che sono le righe) che ti torna e poi crei una stringona di "div" con dentro i contenuti, 1po come vuoi.
Fatta la stringa la puoi fare uscire nel render della pagina con "Response.Write(...)".


Anche se segui la strada di farti le cose a mano, non risolvi il problema, e quidni potrebbe tornarti fuori in futuro.Chiaro che se devi consegnare l'applicativo e non hai tempo ulteriore puo' essere una scelta valida.

Cmq sia 2do me il problema sta nel fatto che gli passi un set di dati che nn va bene, hai provato a fare qualcosa di semplice e vedere se va? Per "semplice" intendo ti fai la tua connection di ado.net, il tuo command, la tua query magari su un datatable che poi passi al report etc...

ps: ma come datasource della gridview hai un oggetto Data come "SqlDataSource" ? in quel caso allora non andra' mai, devi farti fare tornare il risultato della "Select" su una struttura che poi passi al report, direttamente non andra' mai perche' sono oggetti differenti...
ciao.

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

SharKMaN Profilo | Newbie

Ciao Teo e grazie come sempre...
Guarda ti allego entrambi i file con il Report...

Se mi spieghi come fare con il CR prendo la strada del CR... se non ci riesco pazienza... cercherò di farlo con il TXT...

Che poi domanda...
Nel momento in cui io mi sono creato il TXT ... questo TXT non posso visualizzarlo sul web ? Esattamente come si apre un txt che è stato uploadato... In questo modo potrei far "leggere" il TXT al Cliente tramite browser e successivamente se lui vorrà se lo stamperà con la CommonDialog del Browser... so che è una soluzione lontana... ma non riuscendo con CR è l'unica che mi viene in mente...

Spero tu possa darmi una mano con il CR

A presto e buona giornata
Daniele
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5