Local reportViewer come crearlo dall'inizio

venerdì 21 maggio 2010 - 16.06

giaarcix Profilo | Newbie

Ciao a tutti,
grazie innanzitutto ai curatori del forum per la pazienza con cui vi occupate dei thread ed aiutate immediatamente gli utenti.
Mi trovo a fare qualche prova con report viewer in un'applicazione windows sviluppata con vb.net 2005.
Ho capito come fare in modo che il report legga i dati da un file xml e li stampi. Ho fatto qualche test creando a runtime il file xml e passandolo al report e tutto funziona.
Solo che....

La mia applicazione legge i dati da un sql server, quindi mi sembra inutile ed oneroso dover leggere dall'sql, creare l'xml, e passarlo al report.
Sto cercando di capire come fare per caricare direttamente nel report un dataset riempito da una query su sql, senza passare in pratica attraverso l'xml.
Ora, nel caso dell'xml io inserivo nel mio report con un drag & drop direttamente i campi presi da un oggetto dataset creato con l'editor grafico con una sua datatable e tutti i suoi campi. Quel dataset veniva riempito a runtime con i dati del mio xml con queste due istruzioni:

dsTempReport.ReadXml("file.xml")
dsReport.Tables(0).Merge(dsTempReport.Tables(0)

La mia domanda è questa: anche se voglio leggere da sql devo creare comunque un oggetto dataset con l'editor grafico per inserire i campi nel report? Devo comunque creare una datatable, ecc.ecc. graficamente all'interno dell'oggetto dataset?
Mi è sembrato di capire di no perchè l'oggetto dataset me lo devo creare io a runtime più o meno così:

Dim ds As New DataSet
Dim mioreport As LocalReport = ReportViewer1.LocalReport
Dim conn As New SqlConnection("xxxxxxxx")
Dim query As String = "select * from tabella"
Dim da As New SqlDataAdapter(query, conn)
da.Fill(ds)
ReportViewer1.ProcessingMode = ProcessingMode.Local
ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("nome", ds))
ReportViewer1.RefreshReport()

Ma se è così che si fa come collego al report i campi che voglio stampare (quelli che prima inserivo con un drag & drop)?
E poi, nel codice che ho inserito sopra (ditemi se è corretto!) che nome devo dare dove c'è l'istruzione:

ReportViewer1.LocalReport.DataSources.Add(New ReportDataSource("nome", ds))

??
Probabilmente riuscirò tramite le vostre risposte a comprendere meglio e poi a spiegarmi meglio a mia volta... perchè ho idea che mi manchi qualche passaggio di fondo!
Grazie mille,

Giacomo

freeteo Profilo | Guru

Ciao,
non è necessario che passi attraverso il file xml, ti basta creare il report facendolo puntare direttamente a sql, e poi passargli i dati da codice:
... LocalReport report = reportViewer1.LocalReport; report.ReportPath = "c:...\report.rdlc"; ReportDataSource ds = new ReportDataSource("...nome...", GetDati())); report.DataSources.Add(ds); reportViewer1.RefreshReport(); } private DataTable GetDati(string tabella) { DataTable table = new DataTable(); using (SqlConnection cn = new SqlConnection("...ConnectionString")) { SqlCommand cmd = cn.CreateCommand(); cmd.CommandText = "SELECT ... FROM ..."; cn.Open(); SqlDataReader rd = cmd.ExecuteReader(); table.Load(rd); } return table; }


attenzione al nome della datasource che hai nel report (verificalo da design).

Ti consiglio di dare un'occhiata a questo sito,che ha molto esempi utili:
http://www.gotreportviewer.com

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
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