Problemi tra Dataset e Report

lunedì 11 settembre 2006 - 15.55

LucaDD Profilo | Newbie

buon pomeriggio a tutti,
vi spiego qual'e' il mio problema, devo fare un report con Crystal report passandogli un DataSet, ma non ci riesco, o meglio l'ho faccio ma il report vede vuoto il dataset pieno che io gli passo....e quindi i ll mio report risulta vuoto....che cosa sbaglio...sto facendo un win application in c#

grazie mille

freeteo Profilo | Guru

ciao,
ma come gli passi il dataset? come in questi thread?:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=8681
http://www.dotnethell.it/forum/messages.aspx?ThreadID=5078
ciao.

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

LucaDD Profilo | Newbie

grazie e buongiorno,
non prorpio anche perche quello é ASP.NET e ma serve una windows application.
cmq ti spiego i passi che ho fatto:
-praticamente ho creato un DataSet facendo add->new Item->DataSet
-successivamente ho riempito il Dataset con l'oggetto TableAdapter che ho riempito con ció che mi serviva
-poi ho creato un Report e gli ho passato il DataSet, il report vede il nome dei campi ma risultana tutti pieni mentre il DataSet risulta --con i dati

visto che non l'ho mai fatto sicuramente non sara il metodo piú giusto, quindi va bene un qualsisi metodo sono qui per imparare,

grazie ancora

Luca

freeteo Profilo | Guru

>grazie e buongiorno,
>non prorpio anche perche quello é ASP.NET e ma serve una windows
>application.
non importa quello che cambia è solo l'ambiente ma il codice è esattamente lo stesso anzi risparmi l'istruzione "dataBind()" che in asp.net devi dare.

>-poi ho creato un Report e gli ho passato il DataSet, il report
>vede il nome dei campi ma risultana tutti pieni mentre il DataSet
>risulta --con i dati
ma che oggetto usi, e che oggetti imposti come sorgente del viwer? io ti consiglio di lavorare con 1oggetto nuovo, caricare il file e e poi pasarlo al visualizzatore, tralasciando la classe che ti genera lui in background (il classico oggetto CrystalReport1), io farei in questo modo:


ReportDocument mioreport = new ReportDocument();
mioreport.Load (...c:\c....);
mioreport.SetDatasource = miodataset;
CrystalReportViewer.ReportSource= mioreport;

>visto che non l'ho mai fatto sicuramente non sara il metodo piú
>giusto, quindi va bene un qualsisi metodo sono qui per imparare,
c'e' sempre da imparare, ottimo approccio!

>grazie ancora
di niente spero di essere stato utile
ciao.

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

LucaDD Profilo | Newbie

grazie mille per la delucidazione...
la cosa che non ho capito e dove devo mettere i dati per riempire il report...
dunque ho un DB e vorrei fare un report dove con al suo interno la quello che esce da una query(ecco perché credevo fosse giusto usare un Dataset).

grazie mille e scusa se ti rompo

freeteo Profilo | Guru

figurati siamo qui per questo!
Cmq ti conviene caricare 1 dataset con i dati che arrivano dalla query usando ado.net, cosi' sei sicuramente piu agile, se devi solo passarli al report (e quindi nn ti interessa essere tipizzato...).

Ecco qui 1 esempio:

------------------------------------------------------------

//---- leggo da database
OleDbConnection miaConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=...");
OleDbDataAdapter miaDataAdapter = new OleDbDataAdapter("select * from tabella", miaConn);
DataTable miaTab = new DataTable("tab");
miaDataAdapter.Fill(miaTab);


//---- setto la sorgente del report
ReportDocument mioReport = new ReportDocument();
mioReport.Load(AppDomain.CurrentDomain.BaseDirectory + @"reports\report.rpt");
mioReport.SetDataSource(miaTab);


crystalReportViewer1.ReportSource = mioReport;

------------------------------------------------------------
ciao.

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

LucaDD Profilo | Newbie

buon pomeriggio
scusa se sono sparito ma mi hanno messo a fare altro, sono tornato sui i report ho fatto come mi hai detto ma mi da un eccezione.

dopo aver creato un crystalReportViewer e un CrystalReport vuoto ho scritto il seguente codice:
void RptForm_Load(object sender, System.EventArgs e)
{
try
{
SqlConnection MyConn = new SqlConnection(ConfigurationSettings.AppSettings.Get("Prod_Connection"));
SqlDataAdapter miaDataAdapter = new SqlDataAdapter("SELECT * FROM IS_DataInput", MyConn);
DataSet miaTab = new DataSet("IS_DataInput");
miaDataAdapter.Fill(miaTab);

//---- setto la sorgente del report
ReportDocument mioReport = new ReportDocument();
mioReport.Load(@"C:\Documents and Setting\My Documents\Visual Studio 2005\Projects\IS\InputSystem\Reports\test.rpt");\\ questo é il report vuoto che mi sono creato facendo add new item>crystal report
mioReport.SetDataSource(miaTab);

crystalReportViewer1.ReportSource = mioReport;
}
catch (Exception ex)
{
string c = ex.ToString();
}

ma mi da la se queste eccezione:

CrystalDecisions.CrystalReports.Engine.DataSourceException: The report has no tables.
at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(DataSet dataSet)
at Reports.RptForm.RptForm_Load(Object sender, EventArgs e) in C:\Documents and Settings\My Documents\Visual Studio 2005\Projects\IS\InputSystem\Reports\RptForm.cs:line 55

non rieco proprio a capire cosa c'é che non va scusa se ti ho scritto tutto ma forse cosí si capisce.....

grazie in anticipo a tutti

C#Guru Profilo | Newbie

Ciao a tutti, mi intrometto perchè ho un post simile aperto.
Fino ad adesso ho sempre visto frammenti di codice con query semplici del tipo:
"SELECT * FROM Tabella";

ma avendo due tabelle relazionate?

"SELECT * FROM Tabella1,Tabella2 WHERE Tabella1.ID = Tabella2.ID";

Il Dataset come si carica?

Con la prima query mi funziona tutto perfettamente, con la seconda, il report risulta vuoro.

Qualcuno ha qualche idea?

Ciao.

LucaDD Profilo | Newbie

se riuscissi a far funzionare la prima ti aiuterei volentieri....se potete aiutarmi

grazie mille

freeteo Profilo | Guru

ciao ragazzi,

x LucaDD :
l'errore mi sembra parlante, "The report has no tables" indica che nel costruire il report non hai agganciato nessuna tabella.
Pero' potrebbe essere che passandogli i dati non gli passi tutte le tabelle, hai provato a farne 1o semplice con 1a sola tabella e passargliela? oppure impostare le "LogonInfo" come suggerivo qui: http://www.dotnethell.it/forum/messages.aspx?ThreadID=5078 ?

x C#Guru:
quando fai 1a query che ritorna dei dati gia' linkati (come hai fatto tu, hai fatto 1a "equal join") il risultato è cmq 1a sola tabella
quindi non devi preoccuparti, basta che gli passi 1a sola DataTable, non ti serve nemmeno il dataset.
Se invece hai costruito il report con 2 tabelle linkate, allora devi passargli 2tabelle linkate direttamente nel dataset :

//---- aggiungo al dataset DataSet mioDataSet = new DataSet("classe-tipo"); mioDataSet .Tables.Add(tabella1); mioDataSet .Tables.Add(tabella2); //----- aggiungo la relazione tra le tabelle mioDataSet .Relations.Add("rel", mioDataSet .Tables[0].Columns[0], mioDataSet .Tables[1].Columns[0]); mioDataSet .Relations[0].Nested = true;

dova "tabella1" e "tabella2" sono 2 datatable preventivamente caricati...e poi ovviamente lo passi al report, dovrebbe bastare...


ciao.

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

C#Guru Profilo | Newbie

Grazie della risposta.
Provo e poi ti faccio sapere.

Ciao

LucaDD Profilo | Newbie

grazie mille per i consigli...adesso peró ho un'altro problema...ho messo in produzione il mio bel report ma gli utenti non riscono a loggarsi autamaticamente al report...e gli da il logon failed...mentre nel mio PC anche con altre utenze funziona, che cosa potrebbe essere...

grazie milleeeee

Luca
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