Maledetti Crystal Report

mercoledì 23 maggio 2007 - 07.21

tarabasch84 Profilo | Junior Member

Salve, sto realizzando un piccolo programmino in Visual c#. Sto avendo da qualche giorno seri problemi con l'utilizzo dei Crystal Report.
Il problema è che non riesco a capire come caricare dati dalla sorgente dati quale database sqlserver2005. Ho inserito questo codice all'interno del form Load in cui risiede il CrystalReportViewer. Probabilmente il problema è il codice ma ricercando un po' su internet grossomodo ho notato che una cosa del genere potrebbe andare...
Spero mi potiate essere d'aiuto.


SqlConnection Database = new SqlConnection(ConfigurationManager.AppSettings["ConnString"]);
SqlDataAdapter da = new SqlDataAdapter("Select Nominativo, Indirizzo, Città, CAP From Azienda", Database);
DataSet ds = new DataSet();
da.Fill(ds, "Stampa");

Stampa_Report Report = new Stampa_Report();
Report.SetDataSource(ds);
crystalReportViewer1.ReportSource = Report;

freeteo Profilo | Guru

ciao,
il tuo codice non è sabgliato, fa proprio il caricamento dei dati con "SetDAtaSource" , dati che vengono riempiti via ado.net.
Ma che errore hai tu?

Se la tua invece è solo una domanda teorica, non ha errori particolari, allora ti posso dire che solitamente hai 2 metodi:
- fare come hai fatto tu ovvero caricare i dati in un dataset/datatable e poi passarli al report
- impostare al report le logoninfo e demandare il caricamento e la connessione a lui stesso

Quale dei 2 sia meglio, diciamo che dipende se hai i dati che servono anche per altro, allora ado.net va bene perche' cmq ce li hai gia' in memoria, li puoi caricare quando e come vuoi.
Se invece devi solo fare operazioni di stampa dei dati allora va meglio che sia il repotr a farsi tutto il lavoro.

Cmq se cerchi sul forum ci sono parecchi messaggi che parlano di questa cosa, con anche esempi di codice...io solitamente suggerisco questo:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=8681
che mostra i 2metodi, li si parlava di usare un webservice o cmq una classe che ti faccia la collection che ti serve, ma cmq il concetto è quello...

ciao.

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

tarabasch84 Profilo | Junior Member

Ciao,
ora ti spiego un po' meglio la situazione. In pratica il report è costituito da una serie di oggetti che io con il drag and drop ho inserito all'interno della finestra di progettazione report. Per fare in modo che tali oggetti potessero ricevere dati, nel form_load della pagina che contiene il crystalreportviewer ho inserito il codice che ti ho postato. Durante il debug, succedono due cose:
1) I dati non vengono caricati;
2) Il debug non mi da nessun errore;

freeteo Profilo | Guru

ciao,
scusa forse ho dato per scontato una cosa, dopo che hai settato il ReportSource del viewer, gli chiami anche il metodo "DataBind()" ?
Altrimenti non va, il databind serve proprio per fare in modo che l'oggetto si crei il render effettivo, percio' nel tuo caso:
.... codice di prima.... crystalreportviewer1.ReportSouce = Report crystalreportviewer1.DataBind()
ciao.

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

tarabasch84 Profilo | Junior Member

Al crystalreportviewer non è associata nessuna funzione dal nome Databind()..

freeteo Profilo | Guru

ciao,
perdonami, avevo pensato tu fossi su pagina asp.net....se sei si win32 allora si il DataBind è da escludere.
Hai provato a dare i vari datasource direttamente alle varie tabelle del report, senza passare tutto il dataset?

Intendo questo codice:

report.Database.Tables[0].SetDataSource(dataset.Tables[0]);

e via via per tutte le tabelle del report, dando le rispettive "DataTable" ...

ciao.

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

tarabasch84 Profilo | Junior Member

Ma quando dici "alle varie tabelle del report", cosa intendi? Cioè dovrei associare al report dei datatable invece che un dataset? Ho modificato il codice in questo modo:

SqlConnection Database = new SqlConnection(ConfigurationManager.AppSettings["ConnString"]);
SqlDataAdapter da = new SqlDataAdapter("Select Nominativo, Indirizzo, Città, CAP From Azienda", Database);
DataSet ds = new DataSet();
da.Fill(ds, "Stampa");

Report_Crystal Report = new Report_Crystal();
Report.Database.Tables[0].SetDataSource(ds.Tables[0]);
crystalReportViewer1.ReportSource = Report;

...ma niente.
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