Gestione stampa report con vbnet2005 mediante dataset

giovedì 16 novembre 2006 - 18.06

trinity Profilo | Guru

Salve ragazzi,
di seguito vi posto il classico codice che utilizzavo in vbnet 2003 per poter stampare un file rpt di crystalreport:

Dim ds As New DataSet
Dim da As New SqlDataAdapter
da = New SqlDataAdapter("SELECT * FROM stampe_varie", db)
da.Fill(ds, "stampe_varie")
Dim prova As New StampaArc
prova.SetDataSource(ds)
CrystalReportViewer1.ReportSource = prova

ora vorrei farlo in vbnet 2005 e penso che alla fine il codice potrebbe andare bene ma la mia docmanda è la seguente:

io vorrei utilizzare una classe ed una stored per eseguire il codice di riempimento del dataset ho pensato a questo punto di scrivere così:


Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

e poi nella form dove gestisco il crystalreport viewer prima in passato scrivevo così:
Dim prova As New StampaArc
prova.SetDataSource(ds)
CrystalReportViewer1.ReportSource = prova

ora come potrei fare gestendo tutto con la function?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

freeteo Profilo | Guru

ciao,
dal codice che hai inserito tu, hai gia una classe che ha un metodo che ti torna una dataset, quindi ti basta solo chiamare la classe per fartelo restiture gia' come datasource del report, ovvero:

prova.setdatasource( new Stampe().AnteprimaReport(..

ed il resto rimane come prima...(il codice va benissimo se passi da 2003 a 2005 nella stramaggioranza dei casi)

ps: per i post relativi a reportistica, c'e' una stanza apposita, usa quella per i prossimi, cosi' teniamo in ordine. grazie!
ciao.

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

trinity Profilo | Guru

Si ma il problema mi nasce nella form in cui vi è il crystalreportviewer,
come faccio a richiamare la classe ed attribuirgli il risultato del dataset?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

freeteo Profilo | Guru

scusami ma non ho capito, devi chiamare il report da una form diversa? nessun problema anzi, bastera' che nella form relativa chiamiamola ad esempio "FormReport" e definisci un metodo pubblico che fa quello che deve fare, ovvero carica il report e poi usando l'altra classe di prima si prende il dataset come sorgente dati.
Non so se ho capito bene cosa devi fare cmq ti basta lavorare con proprieta' e metodi "public" , quindi accessibili dall'esterno e richiamabili da dove vuoi. Ovviamente puoi spezzare il caricamento e la visaulizzazione del report su una classe e quindi un file, diversi da quello che carica i dati, sono scelte vedi te.
ciao.

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

trinity Profilo | Guru

io mi trovo in una situazione a cui non riesco a trovare una soluzione, ora ti spiego.
Mi trovo ad eseguire un ciclo for all'interno del quale richiamo una Function che esegue a sua volta una stored e la creazione di una tabella all'interno del dataset ovviamente riempiendola di dati.
Il problema non si pone se viene caricato un solo record nel dataset per il ciclo for ha effettuato un solo passaggio ma quando quest'ultimo deve eseguire due o + passaggi nel datset viene caricato sempre l'ultimo record. Il motivo l'ho capito ma non so come risolverlo. Mi potete dare una mano?

Ora vi posto il codice con vicino le spiegazioni:

Classe nella quale c'è la function:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

codice che richiamo la function:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Il problema di prima diciamo che l'ho risolto così con il codice sopra postato ma mi trovo di fronte a quest'altro problema nella for...
Mi puoi dare una mane , ti prego

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

freeteo Profilo | Guru

ciao,
dal codice che vedo non fai nessun ciclo for dentro, quindi per forza prendi sempre il primo record, non facendo nessun ciclo

Il problema sta qui:
If SqlDr.Read Then MyRow = MyTable.NewRow MyRow("CodAlb") = SqlDr.GetSqlInt32(0).Value MyRow("Codice") = SqlDr.GetSqlString(1).Value MyRow("Data_elaborazione") = SqlDr.GetSqlDateTime(2).Value MyRow("Descrizione") = SqlDr.GetSqlString(3).Value MyTable.Rows.Add(MyRow) End If
se fai l'if va solo la prima volta, devi fare un while:
While SqlDr.Read ... Wend

ciao.

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

trinity Profilo | Guru

Ok questo lo sapevo ma purtroppo il discorso è un pokino + complesso da spiegare..in altre parole io ho una listview con n record visualizzati, tenendo presente la function che ho postato(la quale è composta da codalbergo e codice) il codice albergo resta fisso ma in base ad un ciclo for sulla listview io seleziono i record che il cliente ha scelto e quindi la variabile codice che io passo alla function cambia sempre ti faccio un esempio per farti capire meglio:

For idlista = 0 To Me.ListView1.Items.Count - 1
RapportoTrasm.SetDataSource(New GestoreStampe().AnteprimaRapporto(1, Me.ListView1.SelectedItems(idlista).Text))
qui io richiamo la seguente function:
Next

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

freeteo Profilo | Guru

scusami ma allora non riesco a capire quello che devi fare, se devi generare 1report che visualizza n record, e quindi n righe di dettagli, gli devi passare 1 dataset/datatable contenente n righe, mi pare ovvio.
Quindi non capisco, perche devi chiamare il metodo che ti torna il dataset n volte?
Ribadisco, devi riempire con n righe percui deve fare n ciclie e quindi un cico while e poi il dataset risultante lo passi al report mediante "setDataSource" c'e' poco da fare...
ciao.

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

trinity Profilo | Guru

Scusami Matteo, ma ti rispondo su questo thread perchè è stato l'ultimo a cui tu mi hai dato una risposta, in quanto non saprei come contattarti.
Ricordi il thread del dataset1.xsd che ti ho detto di dargli un'occhiata e consigliarmi il metodo migliore tra i due postati. Tu mi hai giustamente detto il primo, ma ora mi trovo in una piccola difficoltà, come posso aggiungere 1 o più righe di data ad una tabella presente in un file dataset.xsd?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

freeteo Profilo | Guru

ciao,
avere un dataset tipizzato vuol dire avere la tabella con i campi "tipizzati" e quindi poterci accere da intellisense, ma i procedimenti di gestione dei tali sono gli stessi, inquanto il "dataset1" eredita da dataset, come la "rigaTabella" eredita da DataRow e via cosi'....
Quidni ad esempio , nel caso di avere un dataset che punta alla tabella di NorthWind classico, il codice è qualcosa del tipo:
DataSet1.CustomersDataTable tabella = new DataSet1.CustomersDataTable(); DataSet1.CustomersRow riga = tabella.NewRow() as DataSet1.CustomersRow; riga.Address = "indirizzo"; riga.City = "citta"; ..... ..... tabella.Rows.Add(riga);

Ovviametne adattalo alla tua situazione e controlla i vari campi nulli da settare etc...
ciao.

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

trinity Profilo | Guru

Ciao Matteo,
grazie della tua risposta e stavo pensando anche a questo codice:
mi puoi dire quale tra questo e quello tuo è il + corretto da un punto di vista di codice e di prestazioni?

Dim prova As DataRow = myDataSet.Tables("mytable").NewRow
prova(campo) = valore
...
myDataSet.Tables("mytable").Rows.Add(prova)

solo che ancora non ho provato se funziona con il file dataset.xsd

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
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