Rerporting services e origine dati

mercoledì 25 ottobre 2006 - 21.59

squilibrio Profilo | Expert

Ciao, ho creato un nuovo progetto "Progetto Server Report" (dato che non ho visual studio) ho usato il tool gratuito

ho inserito la mia query nella scheda "dati" e disegnato il mio report

a questo punto ho i seguenti dubbi:

- come posso includere il mio report nel mio progetto originale in Visual Web Dev? (dato che non ho Vistual Studio, ho dovuto creare i due progetti, uno col tool, l'altro con web dev, ma ora devo usare il report nel mio progetto originale, come lo includo???)
- nel mio caso è stato molto facile creare la query (l'ho inserita nella scheda "dati" senza alcuna condizione where ....), ma se dovessi gestire dei parametri passati da codice alla query, come potrei generare l'origine dati da passare al report?
- per visualizzare i report è necessario installare qualche cosa? (sui client per le web application e nelle win forms)


Grazie

freeteo Profilo | Guru

>Ciao, ho creato un nuovo progetto "Progetto Server Report" (dato
>che non ho visual studio) ho usato il tool gratuito
presumo tu intenda quello che ti installa sql express toolkit


>- come posso includere il mio report nel mio progetto originale
>in Visual Web Dev? (dato che non ho Vistual Studio, ho dovuto
>creare i due progetti, uno col tool, l'altro con web dev, ma
>ora devo usare il report nel mio progetto originale, come lo
>includo???)
diciamo che dovresti rifarlo inquanto i report che puoi integrare nei progetti win32 o web hanno estensione RDLC (non RDL) e sono 1po diversi.Pero' in realta' puoi usare il metodo "a mano", dato che il linguaggio di definizione del report è smepre XML e quindi riesci a fare la migrazione senza problemi.
In poche parole ti basta rinominare il file del report coin estensione RDLC e copiarlo dentro al tuo progetto, e usare l'editor che ti da webdev.L'unica cosa che cambia è che integrando il report dentro ad 1applicativo devi specificare il DATASOURCE del report (cosa che fai da menu)

ps: questo punto pero' lo devi fare dopo che hai installato il pacchetto di supporto ai report per web dev:
http://msdn.microsoft.com/vstudio/express/vwd/download/
in fondo alla pagina, scarica e installa l'addin per i report



>- nel mio caso è stato molto facile creare la query (l'ho inserita
>nella scheda "dati" senza alcuna condizione where ....), ma se
>dovessi gestire dei parametri passati da codice alla query, come
>potrei generare l'origine dati da passare al report?
fai tutto da design e poi lo setti da codice:
LocalReport mioreport = ReportViewer1.LocalReport; mioreport.ReportPath = MapPath("Report.rdlc"); mioreport.DataSources.Add(new ReportDataSource("mioDataSet", miatable)); .... List<ReportParameter> mioArr = new List<ReportParameter>(); mioArr.Add(new ReportParameter("mioparametro", "ciao ciao")); mioreport.SetParameters(mioArr); ...

>- per visualizzare i report è necessario installare qualche cosa?
>(sui client per le web application e nelle win forms)
si appunto controlla il primo punto


>Grazie
spero di esserti stato utile


ciao.

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

squilibrio Profilo | Expert

Grazie per l'aiuto!

Ti chiedo alcuni dettagli prima di iniziare ....


> In poche parole ti basta rinominare il file del report coin estensione RDLC e copiarlo dentro
> al tuo progetto, e usare l'editor che ti da webdev.L'unica cosa che cambia è che
> integrando il report dentro ad 1applicativo devi specificare il DATASOURCE del report (cosa > che fai da menu)

Ma nel futuro li creerò in Visual Web Dev col tool che mi hai inviato, oppure dovrò crearli sempre con questa procedura?
Non ho visto dove impostare il DataSource? (ma quindi devo crearmi una query per il datasource? e se questa query avesse dei parametri?? potresti farmi un semplice esempio?)

> http://msdn.microsoft.com/vstudio/express/vwd/download/
OK questo c'è ;-)


>fai tutto da design e poi lo setti da codice:
>LocalReport mioreport = ReportViewer1.LocalReport;
>mioreport.ReportPath = MapPath("Report.rdlc");
>mioreport.DataSources.Add(new ReportDataSource("mioDataSet", miatable));
>List<ReportParameter> mioArr = new List<ReportParameter>();
>mioArr.Add(new ReportParameter("mioparametro", "ciao ciao"));
>mioreport.SetParameters(mioArr);

Io avevo visto che in ogni report (con la prima soluzione) era possibile passare i parametri in modo "visuale"... però forse non è possibile farlo con visual web dev, ecco perchè mi consigli questa solzuione; in ogni caso non è questo il problema, quello che purtroppo non ho capito è come "collegare" DataSource + Query con parametri + Passaggio dei parametri . Potresti farmi un semplice esempio del giro completo??

>spero di esserti stato utile

Di piu, utilissimo

freeteo Profilo | Guru

>Grazie per l'aiuto!
di niente

>Ma nel futuro li creerò in Visual Web Dev col tool che mi hai
>inviato, oppure dovrò crearli sempre con questa procedura?
assolutamente no, questo è il modo per non perdere il lavoro che avevi gia' fatto, ma se lavori con webdev quando apri dentro 1 report puoi fare li la costruzione dello stesso

>Non ho visto dove impostare il DataSource? (ma quindi devo crearmi
>una query per il datasource? e se questa query avesse dei parametri??
>potresti farmi un semplice esempio?)
devi impostare 1datasource da design, guarda nel menu "report" quando hai aperto 1file rdlc


>Io avevo visto che in ogni report (con la prima soluzione) era
>possibile passare i parametri in modo "visuale"... però forse
>non è possibile farlo con visual web dev, ecco perchè mi consigli
>questa solzuione;
no no, è il modo di passare i parametri, a runtime ovviamente perche' come ti dicevo sopra, finche lo costruisci puoi farlo dal menu e poi lo trovi dentro normalemente


>che purtroppo non ho capito è come "collegare" DataSource + Query
>con parametri + Passaggio dei parametri . Potresti farmi
>un semplice esempio del giro completo??
se devi usare i parametri per modificare le query, purtroppo questo non si puo' fare, è prerogativa del report server.
Pero' dato che il file RDLC si attacca ad 1datasource di ado.net, puoi tranquillamente filtrare la query chge ti riempie 1a datatable o dataset, (direttametne da codice ado.net) e poi passarlo come ti ho indicato prima


ciao.

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

squilibrio Profilo | Expert

Ok ... piano piano ci sto arrivando

per meglio capire la logica ho deciso di rifare il mio report, almeno la prima volta capisco strada corretta

- Ho inserito in una pagina ASP l'oggetto ReportViewer
- Ora devo creare un DataSource per il mio report all'interno della pagina ASP.NET? Potresti farmi un semplice esempio di un data source strutturato correttamente (anche con parametri per poi alimentare il mio report)
- Attraverso "l'angolino" ho scelto design new report, aggiungo la mia tabella, come visualizzo in un campo della tabella il contenuto di un campo della query?

Grazie ancora

freeteo Profilo | Guru

ciao,
scaricati il file che ti allego, dove viene passato 1parametro.
Li dentro non ce il datasource ma come capirai sicuramente il passo è breve, a design time, dal menu report scegli la sorgente dati e poi glielo passi al report usando il codice che ti ho postato prima.
Il tutto deve essere fatto in "match" passando il datatable/dataset come source del report e ricordati di usare lo stesso nome.
ciao.

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

squilibrio Profilo | Expert

Scusami ma non ho capito

Sto facendo un po' di confusione, non capisco come integrare il tutto

allora .... al click del pulsante passo i parametri, se fossero piu di uno:

ReportParameter mioPar1 = new ReportParameter("Report_Parameter_0", TextBox1.Text + " : " + DateTime.Now.ToLongTimeString());
ReportParameter mioPar2 = new ReportParameter("Report_Parameter_1", TextBox2.Text + " : " + DateTime.Now.ToLongTimeString());
ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { mioPar1 });

e mioPar2 (quindi i parametri successivi al primo) come lo passo??

dubbio:

ma questi sono i parametri della query che andrà ad alimentare il report? lo chiedo perchè non capisco la differenza tra questi parametri e quelli che dovrò inserire nella query che utilizzo per creare del DataTable/DataSet che andrà ad alimentare il report.

collegato a questo, non capisco come gestire un DataSet/DataTable per alimentare il report con i relativi parametri

Scusa se rompo ma potresti farmi un esempio completo?

squilibrio Profilo | Expert

Un aiutino...

Sono 5 giorni che faccio prove e non capisco come arrivare ad un report funzionante!

freeteo Profilo | Guru

ciao,
come ti ho gia detto prima, purtroppo con i report RDLC non puoi settare i parametri come "filtri" della query del report, devi passare tramite ado.net e poi settare la sorgente dati a questa tabella che hai riepito da codice (e quindi filtrata lei).
I parametri del report sono solo oggetti da usare dentro al report come campi testo o per operazioni.

Cmq ti allego 1progetto che fa tutto da 0,controlla i percorsi del db e del report, nell'app.config e nel sorgente.

Per i tuoi dubbi su come filtrare la query di ado.net ti rimando ai link del framework:
http://msdn2.microsoft.com/it-it/library/system.data.oledb.oledbparametercollection.aspx
http://quickstart.developerfusion.co.uk/QuickStart/howto/doc/adoplus/overviewcontents.aspx#

ps: l'esempio usa oledbxxx per comodita' dato che ti ho allegato anche l'mdb, ma per sql è praticamente lo stesso basta adattare solo gli oggetti...
ciao.

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

squilibrio Profilo | Expert

Ti ringrazio per l'aiuto!!! Oggi mi dedico a questo !!!

Mi aveva confuso il termine "parametri" e non capivo la differenza tra i parametri del command (parameters) usati in ADO.NET e quelli del report (rcdl) ... ora cmq mi è chiaro che i miei parametri me li devo gestire nel datatable e nient'altro!!!

Grazie ancora per tutto l'aiuto!

squilibrio Profilo | Expert

Ho un problemino

Ho creato il dataset tipizzato, con la mia stringa di connessione e con i parametri fill e getdata(), a questo punto non riesco ad associarlo al mio reportviewer... o meglio: ho visto che tu hai un dbReport ma non capisco come e dove l'hai definito, io non riesco ad associare il datasource, se nel reportviewer scelgo "Choose Data Sources" non vedo nulla, nel tuo caso invece c'è dbreport

Dove sbaglio?

squilibrio Profilo | Expert

Uffff non capisco da dove salta fuori quel DbReport nel tuo esempio

freeteo Profilo | Guru

quando apri il report a design time, vai su:
menu report->datasources

li dentro hai le sorgenti dati del report, li dentro decidi il nome e da codice vai a fare il match tra quella datasource e 1 datatable di ado.net....
ciao.

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

squilibrio Profilo | Expert

Ahhhh non avevo visto il menu! Azzz mi era sfuggito mentre ero preso a provare tutto il resto!!

Quindi è obbligatorio creare un DataSet tipizzato vero? Io invece pensavo di poter lavorare col datatable creato, passando direttamente quello!

Ora provo cmq

squilibrio Profilo | Expert

Grazie per tutto l'aiuto! Ora sono riuscito! Vorrei solo chiederti un ultima info: vorrei non utilizzare un DataSet tipizzato ma non riesco a trasformare la tua soluzione in una simile ma senza DataSet tipizzato! E' possibile?

Grazie

freeteo Profilo | Guru

in che senso? tu crei il report facendo 1a struttura e poi da codice invece carichi dei dati diversi se vuoi tanto passi per ado.net...
Cmq quando aggiungi 1datasource puoi andare a prendere 1a query invece di 1 dataset, cmq sia diciamo che è sempre "tipizzata" perche lavori con la finestra "data source" e il report deve sapere con quali campi visualizzare...
ciao.

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

squilibrio Profilo | Expert

Intendevo questo: nel tuo esempio hai creato un dataset tipizzato

Infatti nel report rdcl nel Menu Report - DataSource ho dovuto selezionare il dataset tipizzato

io invece vorrei ottenere lo stesso risultato senza creare un dataset tipizzato, quindi non vorrei creare il file relativo al dataset tipizzato in solution explorer! esiste una soluzione alternativa?

Grazie

freeteo Profilo | Guru

ciao,
penso proprio di no, inquanto devi creare 1a struttura con cui creare il report, anche se tanto ti fa poca differenza perche' tanto poi lo riempi cmq da codice.
Probabilmente tu vorresti essere piu' agile per costruire la query da codice, ma purtroppo con i file RDLC, questo è possibile solo con i report che vanno poi elaborati sul server di report
ciao.

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

squilibrio Profilo | Expert

Ok capisco... quindi devo sempre creare un dataset tipizzato da utilizzare nel report (e verrà cmq utilizzato solo per questo)

In ogni caso se in fase di creazione del DataSet tipizzato (nel wizard) scelgo una stringa di connessione, il dataset resta sempre legato a quella stringa? indipendentemente dal DB a cui essa punta?

E se successivamente cambio dei campi nel mio DB? Come faccio ad apportare le stesse modifiche al dataset tipizzato?

Grazie ancora

freeteo Profilo | Guru

>Ok capisco... quindi devo sempre creare un dataset tipizzato
>da utilizzare nel report (e verrà cmq utilizzato solo per questo)
è obbligatorio creare il dataset tipizzato, puoi lavorare anche e solo con una datasource che pesca ad un database, e poi da codice passargli una DataTable riempita da codice, pero' sinceramente se integri anche un dataset tipizzato hai anche altri guadagni, primo fra tutti il fatto di non avere errori di elaborazione a runtime, inquanto i tipi vengono verificati in compilazione

>In ogni caso se in fase di creazione del DataSet tipizzato (nel
>wizard) scelgo una stringa di connessione, il dataset resta sempre
>legato a quella stringa? indipendentemente dal DB a cui essa
>punta?
si ok, come ti dicevo sopra, tu crei qualcosa che ti serve per fare il debug dell'applicazione e provarla in locale.
A runtime poi ti basta cambiare la stringa di connessione se la struttura è la stessa, altrimenti te ne freghi e gli passi tu i dati al report che non sa da dove provengano, l'importante è che abbiano quella struttura


>E se successivamente cambio dei campi nel mio DB? Come faccio
>ad apportare le stesse modifiche al dataset tipizzato?
Se hai modificato il database e devi riportare le modifiche nel progetto (e quindi anche nel report) devi "Refreshare" a livello di designer il dataset tipizzato, ed eventualmente ritoccare dove ti da errore sempre in fase di compilazione, e quindi te ne accorgi subito e ti togli errori difficili da trovare a runtime...

>Grazie ancora

ciao.

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

Polosolo Profilo | Newbie

Ragazzi: grazie!
dopo mille ricerche su web, il vostro botta e risposta (e gli esempi allegati) finalmente mi hanno fatto capire come "smanettare" con 'sti report e come passargli i dati che voglio io!
Grazie ancora, ciao!
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