Caricare report e sottoreport con dataset

giovedì 18 febbraio 2016 - 06.42
Tag Elenco Tags  VB.NET  |  .NET 2.0  |  Windows 7  |  Visual Studio 2008

basicdany Profilo | Expert

ciao a tutti attualmente ho sempre caricato report con i dataset cosi:

cn = New OleDbConnection(ConnString)

cn.Open()

Dim oleAdapter As New OleDbDataAdapter
oleAdapter.SelectCommand = New OleDbCommand(Sql4, cn)

Dim ds As New DSSchedaImmobile
ds.Clear()
oleAdapter.Fill(ds, "SchedeImmobile")

Dim rep As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rep.Load(Application.StartupPath & "\RtpScheda.rpt")
rep.SetDataSource(ds)
CRV.ReportSource = rep
cn.Close()

Come carico un sottoreport di nome "ReportNote" che prende dati da una tabella contenuto in un dataset di nome "note" ?

GRAZIE A TUTTI

ysdemarc Profilo | Expert

rep.OpenSubreport("nomedelmiosubreport").SetDataSource(mieidati)
Vincenzo
Programmatore sbilenco

basicdany Profilo | Expert

ciao e grazie, ho inserito cosi il codice ma appare report vuoto:

cn = New OleDbConnection(ConnString)
cn.Open()

Dim oleAdapter As New OleDbDataAdapter
oleAdapter.SelectCommand = New OleDbCommand(SqlSchede, cn)
Dim ds As New DSSchedaImmobile
ds.Clear()
oleAdapter.Fill(ds, "SchedeImmobile")


Dim oleAdapter2 As New OleDbDataAdapter
oleAdapter2.SelectCommand = New OleDbCommand(SqlNote, cn)
Dim ds2 As New DSSchedaImmobile
ds2.Clear()
oleAdapter2.Fill(ds2, "NoteImmobile")


Dim rep As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rep.Load(Application.StartupPath & "\RtpScheda.rpt")


rep.OpenSubreport("RtpNote.rpt").SetDataSource(ds2)

rep.SetDataSource(ds)
CRV.ReportSource = rep
cn.Close()

ciao grazie attendo aiuto

ysdemarc Profilo | Expert

Io do per buono che i tuoi adapter tirino i dati fuori correttamente.
mi concentro più su queste righe:

Dim rep As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rep.Load(Application.StartupPath & "\RtpScheda.rpt")
rep.OpenSubreport("RtpNote.rpt").SetDataSource(ds2)

Controlla che il nome del subreport "RtpNote.rpt" sia corretto, o meglio la proprietà subreportname del report principale. (Comunque credo di si altrimenti ti avrebbe dato un errore come oggetto non trovato o simile).

Verifica i LINK tra il report principale ed il subreport, che siano corretti e dello stesso formato.

Inoltre io lavorerei con le copie dei dataset (ds.Copy() e ds2.Copy()), poichè, non so perchè a volte alla chiusura della connessione se il report è lento a caricarsi possono aversi dei problemi chiudendo la connessione prima della fine caricamento.

Comunque le istruzioni per caricare i dati nel report e nel subreport sono corrette. Il problema della non visualizzazione è altrove. In caso allega il file rpt.

Ciao
Vincenzo
Programmatore sbilenco

basicdany Profilo | Expert

Ciao, grazie per la risposta, ho corretto
Il percorso del sottoreport ma comunque visualizzo
Il report vuoto:


cn = New OleDbConnection(ConnString)
cn.Open()

Dim oleAdapter As New OleDbDataAdapter
oleAdapter.SelectCommand = New OleDbCommand(SqlSchede, cn)
Dim ds As New DSSchedaImmobile
ds.Clear()
oleAdapter.Fill(ds, "SchedeImmobile")


Dim oleAdapter2 As New OleDbDataAdapter
oleAdapter2.SelectCommand = New OleDbCommand(SqlNote, cn)
Dim ds2 As New DSSchedaImmobile
ds2.Clear()
oleAdapter2.Fill(ds2, "NoteImmobile")


Dim rep As New CrystalDecisions.CrystalReports.Engine.ReportDocument
rep.Load(Application.StartupPath & "\RtpScheda.rpt")


rep.OpenSubreportApplication.StartupPath & "RtpNote.rpt").SetDataSource(ds2)

rep.SetDataSource(ds)
CRV.ReportSource = rep
cn.Close()

Le query sqlnote e sqlschede non sono altro che semplici query select.

Se elimino le :

rep.OpenSubreportApplication.StartupPath & "RtpNote.rpt").SetDataSource(ds2)

Mi visualizza perfettamente il report principale con i dati.

Grazie se puoi aiutarmi

ysdemarc Profilo | Expert

Ma io ti ho suggerito l'open al subreport diversa da quella che hai postato.
Prova per come ti ho già scritto in precedenza. Io le uso in quel modo ed hanno sempre funzionato.

E poi ricordati di verificare i LINK tra report e subreport.
Vincenzo
Programmatore sbilenco

basicdany Profilo | Expert

ciao, ho preparato un progetto con solo questa gestione dei report con sottoreport, posso giraterlo? in modo che verifichi direttamente nel progetto.

grazie

ysdemarc Profilo | Expert

certo..allegato alla discussione
Vincenzo
Programmatore sbilenco

basicdany Profilo | Expert

Ciao ti allego progetto vs 2008 con access 2010 "studio sottoreport con dataset"


grazie

ysdemarc Profilo | Expert

Non riesco a scaricarlo.. ho questo errore:

404 - File or directory not found.
The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.

Ok.. ho aggiunto zip alla fine del collegamento e si scarica... ora ci guardo

ysdemarc Profilo | Expert

Allora credo che non ci siamo tanto compresi nel forum.

Il progetto modificato non riesco ad allegarlo, mi da sempre errore. Al momento l'ho messo nel mio googledrive e condiviso all'interno ho scritto pure i miei commenti.

lo puoi scaricare da qui: https://drive.google.com/file/d/0B6wB7cwKZb1iZGFmZlNNam1sQ2s/view?usp=sharing

Qui quindi abbrevio:

L'errore che avevi era nello sbagliare a caricare il subreport. Infatti il subreport fa parte del report padre quindi lo devi richiamare con il valore della proprietà Subreportname.

quindi ho tolto il tuo
rep.OpenSubreport(Application.StartupPath & "RtpNote.rpt").SetDataSource(ds2)
e modificato con la proprietà del subreportname in
rep.OpenSubreport("RtpNote.rpt").SetDataSource(ds2)

ed a questo punto ho avuto questo risultato:

670x412 18Kb


Ma ancora ci sono dimenticanze.

Infatti ho notato che caricavi con una where per prendere solo una scheda immobile.
Ma non ho visto i link di collegamento tra report e subreport.

in questo caso basta cliccare col destro del mouse sul subreport e scegliere la voce "Modifica collegamenti sottoreport":

509x346 44Kb

e a questo punto ho scelto l'unico campo che metta in relazione i report padre e figlio e quindi "NumeroSchedaImmobile".

Volendo stampare più schede immobili quindi ho modificato le query togliendo le where
inserito un gruppo nel report con "NumeroSchedeImmobile" ed impostato il salto pagina.

Poi per far notare che cambiando il subreport il report da cui deriva non cambia ho impostato anche il testo in blu,
ed ecco il risultato:

798x487 65Kb

Vincenzo
Programmatore sbilenco

basicdany Profilo | Expert

ciao, istruzione che mancava era : rep.OpenSubreport("RtpNote.rpt").SetDataSource(ds2). funziona!

grazie tanto per supporto e aiuto
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