Stampa: invece che aprire l'anteprima, mi ricarica la pagina del repor...

mercoledì 17 dicembre 2008 - 15.20

ellis Profilo | Newbie

Ciao a tutti,
il mio problema è che non riesco più a stampare i report con reportviewer.

Purtroppo sono nuovo di crystal report su asp.net, quindi ho riscontrato alcuni problemi. Nel cercare di risolverli ho scoperto che la stampa non funzionava più. Ma procediamo con ordine:
1) Stamattina il report si apriva in visualizzazione con reportviewer, si aggiornava, stampava e esportava. Il problema è che queste 2 ultime funzionalità (stampa ed esportazione) restituivano il report coi dati al suo interno salvati, anche se avevo appena aggiornato lo stesso.
2) per risolvere il problema ho fatto 2 cose:
a. Ho aggiunto un reportSource. A quest'ultimo ho fatto puntare il datasource del reportviewer. Successivamente ho modificato il codice in modo che passasse il report al Source invece che al Viewer.
b. fatto questo, al termine del processo di renderizzazione del riport, salvo lo stesso, in modo da avere sempre il report con gli ultimi dati aggiornati. (ovviamente quando lancio l'aggiornamento del report, al termine, scateno anche l'evento posteriore prerender, di conseguenza lo aggiorno coi dati aggiornati)

A questo punto il salvataggio del report funziona bene, ma ho scoperto che non riesco più a stampare i report, ne ad esportarli. Quando clicco su uno dei 2 pulsanti, mi apre la relativa finestra delle opzioni, ma quando confermo, all'interno della finestra, mi riapre la pagina dei report, invece dell'anteprima.

allego un po' di codice in modo che sia più chiaro:
.ascx (si tratta di un controllo che ho creato in modo da poterlo riutilizzare in + pagine):

...
<%@ Register Assembly="CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %>
...
...
<CR:CrystalReportViewer ID="crvReportViewer" runat="server" AutoDataBind="true" HasRefreshButton="True" Height="1103px" ReuseParameterValuesOnRefresh="True" Width="350px" ReportSourceID="crsReportSource" />
<CR:CrystalReportSource ID="crsReportSource" runat="server" />
...

.ascx.vb:
...
' Imposto il ReportDocument del ReportSource
crsReportSource.ReportDocument.FileName = objFileInfo.PhysicalPath
crsReportSource.DataBind()
...

' Salvo il report dopo il prerender del report
crsReportSource.ReportDocument.SaveAs(crsReportSource.ReportDocument.FileName, True)

Qualche idea su come risolvere?

grazie

Ellis

freeteo Profilo | Guru

>1) Stamattina il report si apriva in visualizzazione con reportviewer,
>si aggiornava, stampava e esportava. Il problema è che queste
>2 ultime funzionalità (stampa ed esportazione) restituivano il
>report coi dati al suo interno salvati, anche se avevo appena
>aggiornato lo stesso.
probabilmente non gli passi i dati tu, o cmq i parametri di connessione, quindi lui non sapendo dove prenderli, per default si tiene quello che ha in cache, che spesso sono i dati con cui lo hai costruito.



>b. fatto questo, al termine del processo di renderizzazione del
>riport, salvo lo stesso, in modo da avere sempre il report con
>gli ultimi dati aggiornati. (ovviamente quando lancio l'aggiornamento
>del report, al termine, scateno anche l'evento posteriore prerender,
>di conseguenza lo aggiorno coi dati aggiornati)
io tipicamente uso passare i dati al report via codice (metodo SetDataSource() ) o cmq impostargli i parametri di connessione (LogonInfo) quindi sono sicuro che i dati se li va a prendere ogni volta che serve dalla sorgente dati.
Il codice è quello mostrato qui, in entrambi i casi (vedi tu quale dei 2 ti è preferibile usare) :
http://www.dotnethell.it/forum/messages.aspx?ThreadID=21962
anche se è fatto per Win32 è lo stesso codice che puoi usare su asp.net, cambia solo il fatto che dovresti metterlo nel Load della pagina.



>A questo punto il salvataggio del report funziona bene, ma ho
>scoperto che non riesco più a stampare i report, ne ad esportarli.
>Quando clicco su uno dei 2 pulsanti, mi apre la relativa finestra
>delle opzioni, ma quando confermo, all'interno della finestra,
>mi riapre la pagina dei report, invece dell'anteprima.
questo non so cosa possa essere dovuto, come ti dicevo prima non lo uso mai perchè preferisco avere controllo via codice su cosa viene visualizzato...se vuoi provare a seguire la mia strada e vedere se si risolve.

Ciao.

Matteo Raumer
[MVP Visual C#]
http://blogs.dotnethell.it/freeteo

ellis Profilo | Newbie

Ciao,
anzitutto grazie per la risposta. Nel frattempo ho risolto il problema, ma non so perchè, il forum, non mi permetteva di rispondere al mio stesso messaggio.

Il problema, che in parte continuo a non spiegarmi, è che ricaricava il report ad ogni chiamata (quindi anche in fase di stampa o esportazione). Passando dinamicamente il report, tramite un panelbar laterale, mi dava errore perchè non tenevo traccia del report stesso. Avevo scartato questa ipotesi in quanto, prima delle ultime modifiche, non si comportava così.

Comunque scoperto il problema, ho provveduto a tener traccia dell'ultimo report selezionato dall'utente.

Relativamente a quello che dici, trovo più corretto e interessante, il tuo modo per mantenere aggiornato il report (passare ogni volta i dati aggiornati). Per mancanza di tempo ho cercato di fare la cosa "apperentemente" più veloce, anche perchè CrystalReport lo conosco poco, però ripensandoci non ho fatto una buona analisi.

Il prossimo step sarà quello di fare l'aggiornamento automatico del report, senza salvarlo.

Grazie mille
Ellis

freeteo Profilo | Guru

>Ciao,
>anzitutto grazie per la risposta. Nel frattempo ho risolto il
>problema, ma non so perchè, il forum, non mi permetteva di rispondere
>al mio stesso messaggio.
eh infatti dovresti andare in modifica di quello stesso messaggio, magari scrivendo in maiuscolo "EDIT" oppure "RISOLTO" in modo che balzi all'occhio.


>Il problema, che in parte continuo a non spiegarmi, è che ricaricava
>il report ad ogni chiamata (quindi anche in fase di stampa o
>esportazione). Passando dinamicamente il report, tramite un panelbar
>laterale, mi dava errore perchè non tenevo traccia del report
>stesso. Avevo scartato questa ipotesi in quanto, prima delle
>ultime modifiche, non si comportava così.
oddio non so come sia impostata la tua applicazione, ma tieni presente che HTML (e quindi asp.net dato che gira lato server, ma alla fine il browser riceve ed invia come se fosse pure HTML) è un protocollo passivo, quindi di fatto viene ricostruita tutta la richiesta ogni volta (ecco il motivo per cui passa sempre sul "page_load") e tramite alcuni meccanismi (il primo è il "viewstate", ma anche "session" o "cookies") viene ricostruito lo "stato" appunto della chiamata, ossia "a che punto eravamo rimasti?"
Questo ovviamente non succede in applicazioni che girano lato client, come Win32, che sfruttano la memoria della macchina, e tutto gira in quella istanza, tenendo sempre attivo lo stato intrinsecamente.



>Comunque scoperto il problema, ho provveduto a tener traccia
>dell'ultimo report selezionato dall'utente.
ok


>Relativamente a quello che dici, trovo più corretto e interessante,
>il tuo modo per mantenere aggiornato il report (passare ogni
>volta i dati aggiornati). Per mancanza di tempo ho cercato di
>fare la cosa "apperentemente" più veloce, anche perchè CrystalReport
>lo conosco poco, però ripensandoci non ho fatto una buona analisi.
nessun problema vedi tu come si comporta, anche in fase di sovraccarico se il tutto è abbastanza reattivo, la tua soluzione può andare bene lo stesso



>Il prossimo step sarà quello di fare l'aggiornamento automatico
>del report, senza salvarlo.
ok


Ciao.

Matteo Raumer
[MVP Visual C#]
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5