Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
ReportViewer
domenica 06 marzo 2011 - 12.12
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 4.0
|
Windows 7
|
Windows XP
|
Visual Studio 2008
|
Access (.mdb)
LucaGP
Profilo
| Newbie
3
messaggi | Data Invio:
dom 6 mar 2011 - 12:12
Ciao a tutti ragazzi!
Sono uno sviluppatore esperto di VB6 e sto passando piano piano a .NET ma l'impresa è ardua e molto scoraggiante.
Ho un problema serio ed abbastanza frustrante con la creazione un semplice report. In VB6 ci si impiega per farlo... un 2 minuti al max! Qui ha due giorni che leggo info sulla rete, scarico esempi allucinanti di pagine e pagine che nemmeno si eseguono per via di errori sconosciuti..
Allora:
1) Immaginiamo di avere un Database Access su c:\ chiamato "DB1.mdb". Tale Database è la sorgente dei dati da stampare.
Questo Database contiene una tabella alla volta (su due totali che ne sono previste). Può contenere la tabella "TAB1" o "TAB2" a seconda di cosa sceglie di stampare l'utente a runtime.
la TAB1 è composta da sole 3 colonne: A, B, C di semplice testo;
la TAB2 è composta da sole 2 colonne: W, Q di semplice testo;
2) Non voglio creare nulla a design time (tranne la grafica del report) poichè noto che eventuali dataset e adapter creati in progettazione mi limitano la flessibilità del codice (magari sono io);
Quindi...
Apro VS 200x
Nuovo progetto Windows
Importo una copia di DB1 nel progetto;
Scelgo form1 vuota;
le incollo su un bel ReportViewer1
Aggiungo un nuovo elemento.. scelgo generico Report1.rdlc (che si aprirà quando la form1 capisce che l'utente vuol stampare la TAB1)
nel corpo metto una tabella con 3 colonne senza associare nulla. Bella, mi piace.
Chiudo tutto e salvo.
Torno a Form1, evento Form_LOAD
'con una function vedo se nel DB c'è TAB1 o TAB2..
Dim Tabella as string = CosaEsserciLi()
if Tabella="TAB1" then
' apro report1..
dim conn1 as oledb.oledbconnection = "Provider=microsoft...;Data Source=db1.mdb"
dim cmd as new oledbcommand("Select * from TAB1",conn1)
dim ADP1 as new oledbdataadapter
dim DS1 as new system.data.Dataset
dap1.selectcommand= cmd
ds1.clear 'svuoto sempre il dataset per evitare che eventuali aggiornamenti dell'ultimo minuto si perdano
dap1.fill(DS1,"TAB1")
'adesso che ho il mio dataset con la tabella "TAB1" caricata voglio associarlo al file Report1.rdlc e qui vengono i guai
'COME SI FAAAA ????
' ci vorrebbe qualcosa tipo:
"report1.rdlc".table1.datasouce = DS1
"report1.rdlc".table1.colonna1.datafield = "A"
"report1.rdlc".table1.colonna2.datafield = "B"
"report1.rdlc".table1.colonna3.datafield = "C"
form1.reportviewer1.datareport= "report1.rdlc"
form1.reportviewer1.show
else
' apro report2... faccio le associazioni come per il report1 usando la tabella TAB2
form1.reportviever1.datareport = "REPORT2.RDLC" ' disegnato in progettazione con una table di sole 2 colonne questa volta.
end if
Potete aiutarmi con un esempio funzionante? Ve ne prego perchè in rete non c'è niente di questo genere.. non penso sia chiedere tanto.. mah!
Vi ringrazio di cuore
gaetanodimatteo
Profilo
| Newbie
12
messaggi | Data Invio:
lun 7 mar 2011 - 02:11
Ciao,
ho trovato anche io le tue stesse difficoltà nel passaggio al .net e se vuoi evitarne altre
ti consiglio di procurarti un buon manuale.
Per la stampa dovresti utilizzare il controllo reportviewer.
Sono disponibili diverse soluzioni per la stampa, io ho scelto la seguente:
1) creo una form di anteprima, con un reportviewer, che accetta un parametro nel costruttore
di tipo datatable che dovrebbe contenere i dati da stampare.
2) inserisco il seguente codice nell'evento load della form :
Dim report As New Microsoft.Reporting.WinForms.LocalReport
report = ReportViewer1.LocalReport
Dim fdati As New Microsoft.Reporting.WinForms.ReportDataSource("PrimaNotaDS_PrimaNota", dt)
report.DataSources.Add(fdati)
ReportViewer1.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.Percent
ReportViewer1.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout)
ReportViewer1.ZoomPercent = 100
Me.ReportViewer1.RefreshReport()
devi solo fare attenzione al nome del datasourse che hai impostato (in questo caso PrimaNotaDS_PrimaNota)
2) associo il report rdlc al reportviewer tramite la combobox nella finestra "attività del controllo"
3) dalla form principale recupero il datatable con i dati da stampare
4) richiamo la form di anteprima
Spero di essere stato utileù
Ciao
Gaetano Di Matteo
LucaGP
Profilo
| Newbie
3
messaggi | Data Invio:
lun 7 mar 2011 - 10:22
Ti ringrazio tantissimo Gaetano,
appena arrivo a casa a pranzo provo subito il codice!
Ascolta, tu sai come impostare una label a runtime dentro un foglio di report (*.rdlc) ??
Ad esempio, nell'intestazione del report ho una label1 con scritto: "PERIODO DI ESTRAPOLAZIONE : "
vorrei che dal codice stesso prima di dare il comando:
form1.reportviewer1.show (o simile, non ricordo ora la sintassi) si potesse inserire qualcosa del tipo:
** report("foglio1.rdlc").Section("intestazione").Label1.text = "PERIODO DI ESTRAPOLAZIONE : " & DATE_DAL() & " AL " & DATE_AL() **
Sai come procedere per tale problematica?
ps: il manuale lo possiedo eccome, ho comprato Microsoft VB.NET per i database di Access, ASP.NET 2.0, SQL SERVER ecc..
li ho letti ma nessuno parla dei report con questo controllo (ne tantomeno Crystal, questo sconosciuto!!!). E' semplicemente ridicola la mancanza di qualunque accenno in merito! Conosci un testo da consigliarmi? Però ecco.. mi sembra eccessivo un testo nuovo solo per fare cose elementari come questa.. oddio in VB6 ci sono andato al 90% ad intuito.. :-/ Ad ogni modo.. forza e coraggio dico sempre, no? :-p
Spero in una tua dritta per la domanda appena postata.. Ciao!!!
gaetanodimatteo
Profilo
| Newbie
12
messaggi | Data Invio:
lun 7 mar 2011 - 15:46
Ciao,
ricordo anche io la flessibilità del vb6 con i report e ti confesso che mi manca molto.
In .net non è previsto l'accesso diretto ai controlli delle specifiche rdlc.
In casi disperati, per configurare manualmente la posizione dei controlli in un file rdlc,
ho dovuto creare una routine di modifica del file di definizione.
Per modificare solo il valore del controllo "label" nel report
devi utilizzare i parametri che trovi nel menu "Report/Parametri report" se hai
VS2008, se utilizzi VS2010 puoi accerevi tramite "Visualizza/Dati rapporto",
definisci i parametri di cui necessiti, li assegni alle label e utilizzi la routine
seguente nell'evento load della form di anteprima:
Private Sub AssegnaParametri()
Dim parms As New List(Of Microsoft.Reporting.WinForms.ReportParameter)
parms.Add(New Microsoft.Reporting.WinForms.ReportParameter("Data1", _Data1))
parms.Add(New Microsoft.Reporting.WinForms.ReportParameter("Data2", _Data2))
parms.Add(New Microsoft.Reporting.WinForms.ReportParameter("TotEntrate", _totEntrate))
parms.Add(New Microsoft.Reporting.WinForms.ReportParameter("TotUscite", _totUscite))
parms.Add(New Microsoft.Reporting.WinForms.ReportParameter("Differenza", _Differenza))
ReportViewer1.LocalReport.SetParameters(parms)
End Sub
Naturalmente i miei consigli sono frutto delle mie esperienze e non rappresentano procedure
assolute, magari qualcuno più esperto di me potrà consigliarti soluzioni più adeguate.
Ciao
Gaetano Di Matteo
LucaGP
Profilo
| Newbie
3
messaggi | Data Invio:
lun 7 mar 2011 - 16:24
Azz... ok, vedro' di capire quest'altra cosa grazie ai tuoi esempi!
Ps. Tornando a casa ho avuto una mezz'oretta per ricostruire il progetto "ReportSample" di cui stiamo parlando (almeno fino all'associazione di un report vuoto).. ho capito come evitare il passaggio obbligato di assegnare il report (*.rdlc)tramite il passaggio "ComboBox" della "finestra attività" del controllo ReportViewer! Ti interessa il codice? In caso posto tutto stasera..
Pensi che il datasource di una tabella inserita nel corpo del file di report si possa associare da codice solo con i parametri?
Altra cosa.. una volta che creo il mio bell'eseguibile.. il file di report non viene "inglobato" dentro l'exe come succedeva per VB6 ? Ho avuto questa sensazione perchè provando il programmino e sbagliando il percorso del file rdlc assegnato da stringa... mi dice: "Nessun report1.rdlc in c:\SampleReport\SampleReport\x86\debug\bin ecc. ecc.". Credo che lo voglia sempre come risorsa esterna.. è vero?
Luca.
gaetanodimatteo
Profilo
| Newbie
12
messaggi | Data Invio:
mar 8 mar 2011 - 01:36
Ciao,
il file di report non viene inglobato nell'exe perchè non lo assegni tramite progettazione ma a run time (almeno credo).
Torna su
Stanze Forum
Elenco Threads
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 !