Discrepanza dati in CR

venerdì 15 giugno 2007 - 11.46

mickoz Profilo | Newbie

Salve a tutti.
Sto sviluppando una Windows Application in C# nella quale c'è una sezione di ricerca. Devo passare i risultati di questa ricerca a Crystal Report in modo da permettere all'utente l'esportazione e/o la stampa.

Il metodo che utilizzo è questo:
1. Creo un report con Crystal Report, usando le tabelle e facendo le varie join necessarie.
2. Controllo se i dati del report sono corretti.
3. In Visual Studio creo una pagina con un oggetto CrystalReportViewer vuoto a cui non associo nessun sorgente.
4. Nella pagina di codice ho scritto questo:

public PageReportTipoUffici(object obj, SqlConnection conn)
{
InitializeComponent();
BindingSource tempBs = (BindingSource)obj;
System.Collections.IList lista = tempBs.List;

MessageBox.Show("Gli elementi sono " + lista.Count);

ReportDocument documento = new ReportDocument();
documento.Load("C:\\ReportTipoUffici.rpt");
documento.SetDataSource(lista);
crystalReportViewer1.ReportSource = documento;

crystalReportViewer1.DisplayGroupTree = false;

//Inizializzo il report fornendo i dati per la connessione
TableLogOnInfo credenziali = new TableLogOnInfo();
credenziali.ConnectionInfo.UserID = "user";
credenziali.ConnectionInfo.Password = "password";
crystalReportViewer1.LogOnInfo.Add(credenziali);

crystalReportViewer1.Refresh();
}

Visto che l'utente può filtrare i dati in qualsiasi modo, ho deciso di passare il BindingSource dal quale ottengo gli elementi voluti.

Ora, ho due report che funzionano nello stesso modo. In entrambi i casi ottengo i dati dalla join di due tabelle.
Ma in un caso ottengo risultati corretti.
Nell'altro caso, invece, se visualizzo il report in Crystal Report (anteprima) ho risultati corretti. Se visualizzo il report all'interno della mia Windows Application ottengo tutte le possibili combinazioni tra le due tabelle (17 pagine o qualcosa di simile).

Da notare: nel codice c'è una MessageBox dalla quale ottengo il numero degli elementi della lista, che è sempre corretto.

Allora mi chiedo: perchè diavolo mi crea un recordset sballato???
Dove sbaglio? Grazie mille per l'aiuto.

Nico

freeteo Profilo | Guru

ciao,
sinceramente non mi spiego la cosa, i report dovrebbero funzionare entrambi correttamente.

Ma guardando il codice mi nasce una domanda, perche' se gli setti i dati con il metodo "SetDataSource" poi gli specifchi anche i parametri di connessione?
Le due cose dovrebbero andare in mutua esclusione, ovvero nel caso in cui tu voglia passargli determinati dati filtrati (che è proprio il tuo caso), usi quel metodo, altrimenti gli passi i parametri di connessione al server e il report fa tutto da solo.

Non è che magari hai piu' di una tabella nel report e fai questa cosa perche' vuoi che alcuni dati siano passati da te ed altri presi da lui?
In ogni caso cmq io proverei a uniformare la tipologia di accesso ai dati del report, o tutti passati da te o tutti caricati da lui tramite LogonInfo...
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