Datasource di un report (CR)

venerdì 05 maggio 2006 - 16.23

MarKonE Profilo | Guru

Ciao.
Ho creato dall'ide di VS 2005 Pro un report (myReport.rpt) che si appoggia su 3 tabelle.

Per visualizzarlo uso un CrystalReportViewer.

Alla pressione di un pulsante visualizzo il report.

Ecco il codice:

Dim connectionString As String connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\csv\modelnet.mdb" Dim oledbconnection As OleDbConnection = New OleDbConnection(connectionString) Dim stringaSQL As String stringaSQL = "SELECT * FROM Taglie" Dim dadapter As OleDbDataAdapter = New OleDbDataAdapter(stringaSQL, oledbconnection) oledbconnection.Open() Dim dtablerep As DataTable = New DataTable("TabReport") Dim mioReport As New myReport dadapter.Fill(dtablerep) mioReport.Load("C:\...\myReport.rpt") mioReport.SetDataSource(dtablerep) My.Forms.FormReport.CrystalReportViewer1.ReportSource = mioReport My.Forms.FormReport.Show()


Ho utilizzato deliberatamente la query :

stringaSQL = "SELECT * FROM Taglie"

per vedere se riesco a forzare il datasource del report da codice.... ma nulla da fare.... il report continua a comportarsi come specificato a design time e pesca i dati da tutte e 3 le tabelle.

Come posso fare per specificare un datasource che derivi da una query SQL ????


Grazie a tutti.

Ciao!

freeteo Profilo | Guru

ciao,
il datasource lo devi specificare per tutte le tabelle che compongono il report impostando:
mioreport.Database.Tables[0].SetDataSource(..
mioreport.Database.Tables[1].SetDataSource(..
mioreport.Database.Tables[2].SetDataSource(..

se hai dei sottoreport uguale...

altrimenti puoi usare le specifiche delle logoinfo:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=5078

cosi settando da codice i dati per le varie tabelle lui non va piu a cercarsele da solo con le impostazioni con cui l'hai creato e quindi dovrebbe comportarsi correttamente...


ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

MarKonE Profilo | Guru

>ciao,

Ciao, grazie per la risposta

>il datasource lo devi specificare per tutte le tabelle che compongono
>il report impostando:
>mioreport.Database.Tables[0].SetDataSource(..
>mioreport.Database.Tables[1].SetDataSource(..
>mioreport.Database.Tables[2].SetDataSource(..
>
>se hai dei sottoreport uguale...

Non ho sottoreport... ho 3 tabelle relazionate che alimentano il mio singolo report.

>
>altrimenti puoi usare le specifiche delle logoinfo:
>http://www.dotnethell.it/forum/messages.aspx?ThreadID=5078
>
>cosi settando da codice i dati per le varie tabelle lui non va
>piu a cercarsele da solo con le impostazioni con cui l'hai creato
>e quindi dovrebbe comportarsi correttamente...
>

le tre tabelle sono tutte contenute in un unico db Access.

>
>ciao.
>
Proverò.
Grazie ancora!

>Matteo Raumer
>MCAD ... .net addicted :-)
>http://blogs.dotnethell.it/freeteo

MarKonE Profilo | Guru

>ciao,
>il datasource lo devi specificare per tutte le tabelle che compongono
>il report impostando:
>mioreport.Database.Tables[0].SetDataSource(..
>mioreport.Database.Tables[1].SetDataSource(..
>mioreport.Database.Tables[2].SetDataSource(..
>

Non ho trovato il metodo SetDataSource.....
Ricordo che sto lavorando con un report di crystal e lo visualizzo su un winform tramite un CrystalReportViewer.

>se hai dei sottoreport uguale...
>
>altrimenti puoi usare le specifiche delle logoinfo:
>http://www.dotnethell.it/forum/messages.aspx?ThreadID=5078
>
>cosi settando da codice i dati per le varie tabelle lui non va
>piu a cercarsele da solo con le impostazioni con cui l'hai creato
>e quindi dovrebbe comportarsi correttamente...

ho provato con questo codice ma nisba...

Dim myTable As CrystalDecisions.CrystalReports.Engine.Table Dim logOnInfo As CrystalDecisions.Shared.TableLogOnInfo For Each myTable In mioReport.Database.Tables logOnInfo = myTable.LogOnInfo logOnInfo.ConnectionInfo.ServerName = ("127.0.0.1") logOnInfo.ConnectionInfo.DatabaseName = "miofile.mdb" myTable.ApplyLogOnInfo(logOnInfo) Next

Il codice in funzione mi fa sorgere numerosi dubbi....
Innanzi tutto il report punta già al server corretto e al DB corretto, inteso come file.
Non ho specificato utente e password di accesso perchè punto ad un database di access non protetto.

La domanda finale rimane sempre la stessa :
come posso passare una query SQL al mio report, cioè modificare a runtime la query che lo alimenta ??????

Chiedo scusa se sono duro di comprendonio ma, anche googlando alla ricerca della soluzione, non vedo la via....
>
>
>ciao.
>
>Matteo Raumer
>MCAD ... .net addicted :-)
>http://blogs.dotnethell.it/freeteo

freeteo Profilo | Guru

ciao,
ti allego 1 progettino temp dove fa la connessione apo.net e poi setta le 2 tabelle con 2 datatable relative.
Dacci 1occhiata...
ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

MarKonE Profilo | Guru

>ciao,
>ti allego 1 progettino temp dove fa la connessione apo.net e

Prima di tutto grazie mille per la tua cortesia!

>poi setta le 2 tabelle con 2 datatable relative.
>Dacci 1occhiata...

Ho dato un'occhiata... se non erro praticamente col tuo sistema "limiti" i record di ciascuna tabella, giusto ?
Quindi per "simulare" un join tra tabelle diversi le filtri tutte allo stesso modo giusto ?
Cioè se il campo che le lega è "Nome".... tu per ogni SELECT specifichi WHERE TabellaX.NOME = "pippo" ???

Potrebbe funzionare anche se mi sembra una soluzione un po' laboriosa....forse perchè sono abituato a legare le tabelle con un'unica query.

Poi non ho capito come hai fatto ad aggiungere il file DB.MDB direttamente nella cartella BIN.
L'unico elemento simile che ho trovato è stato un DB di MS-SQL vuoto....

Ho visto che la proprità "Operazione di generazione" è impostata su "Contenuto"...questo permette di avere il file mdb sempre nella stessa cartella dell'applicazione generata ?
Forse la domanda è OT ma mi sembrava eccessivo aprire un 3d apposito, no ?

>ciao.

CIAO E GRAZIEEEEEEEEEEEE

>Matteo Raumer
>MCAD ... .net addicted :-)
>http://blogs.dotnethell.it/freeteo


freeteo Profilo | Guru

ciao,
si nell'esempio ti mostro solo come faccio a settare il source a piu di 1a tabella dato che nel post precedente mi avevi detto che non trovavi il metodo "setDataSource"...cmq è 1esempio e infatti presenta delle inefficienze:
- per legare 2tabelle puoi usare direttamente come sorgente 1comando (ovvero 1a query sql) per fare la join ed avere 1a unica tabella nel report es:
select clienti.nome,fatture.importo from clienti left join fatture on clienti.nome=fatture.cliente

- fai la query su db quindi riempi 1a datatable in memoria quando potresti lavorare con le logoinfo e passare i filtri con la proprieta' "mioreport.recordSelectionFormula"

per il resto puo' andare
Il file l'ho messo li trascinandolo da esplora risorse e lo avevo fatto con access giusto per essere piu veloce...ma non è da considerare come strada, è solo perche tu potessi far girare il progettino...

ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

MarKonE Profilo | Guru

Ciao , chiedo scusa per la mia latitanza ma ho avuto problemi di salute

>ciao,
>si nell'esempio ti mostro solo come faccio a settare il source
>a piu di 1a tabella dato che nel post precedente mi avevi detto
>che non trovavi il metodo "setDataSource"...cmq è 1esempio e
>infatti presenta delle inefficienze:
>- per legare 2tabelle puoi usare direttamente come sorgente 1comando
>(ovvero 1a query sql) per fare la join ed avere 1a unica tabella
>nel report es:
>select clienti.nome,fatture.importo from clienti left join fatture
>on clienti.nome=fatture.cliente
>
>- fai la query su db quindi riempi 1a datatable in memoria quando
>potresti lavorare con le logoinfo e passare i filtri con la proprieta'
>"mioreport.recordSelectionFormula"

Questo solo se istanzio un nuovo ReportDocument, giusto ?
Perchè io ho il mio Crystal Report che si chiama myReport ....
e se faccio così :

Dim mioReport As New myReport
mioreport. <----- non trovo il metodo RecordSelectionFormula

Sbaglio ?

>
>per il resto puo' andare
>Il file l'ho messo li trascinandolo da esplora risorse e lo avevo
>fatto con access giusto per essere piu veloce...ma non è da considerare
>come strada, è solo perche tu potessi far girare il progettino...
>
>ciao.
>
>Matteo Raumer
>MCAD ... .net addicted :-)
>http://blogs.dotnethell.it/freeteo


Come sempre, mille grazie!

freeteo Profilo | Guru

ciao,
caspita è impossibile che non ci sia la proprieta' "RecordSelectionFormula" è della classe ReportDocument quindi ci deve essere...controlla bene che myReport sia 1a classe che eredita da quella li (ovvio che se lo fai con il drag&drop lui la crea giusta...)...mi sembra quasi impossibile, controlla bene che sia 1oggetto reportdocument il tuo report...

ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

MarKonE Profilo | Guru

>ciao,

ciao

>caspita è impossibile che non ci sia la proprieta' "RecordSelectionFormula"
>è della classe ReportDocument quindi ci deve essere...controlla
>bene che myReport sia 1a classe che eredita da quella li (ovvio
>che se lo fai con il drag&drop lui la crea giusta...)...mi sembra
>quasi impossibile, controlla bene che sia 1oggetto reportdocument
>il tuo report...

ora non ho il codice sotto manao..controllerò domani al lavoro... però oggi mi sembrava di aver controollato giusto.
In pratica dall'IDE ho aggiunto un nuovo oggetto crystal report (myReport.rpt) e l'ho configurato come necessario.

A questo punto da codice istanzio un oggetto in questo modo

dim mioreport as new myReport


e il metodo che suggerisci non compare.
Infatti, a cinferma di ciò, se istanzio un oggetto reportdocument il metodo recordselectionformula compare.

Spero di essermi spiegato abbastanza chiaramente.

>
>ciao.
>

Ciao e ancora grazie per il tuo preziosissimo aiuto!

>Matteo Raumer
>MCAD ... .net addicted :-)
>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