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
Crystal Reports e reportistica
Stampe con PrintDialog1
venerdì 17 giugno 2011 - 15.43
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
Windows 7
|
Visual Studio 2008
|
Access (.mdb)
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
ven 17 giu 2011 - 15:43
1613_REPORT.zip
Ciao al forum,
dopo svariate ricerche sul web sono riuscito a costruirmi il codice per la stampa dei dati del mio progetto utilizzando il PrintDialog1, fin qui tutto bene, adesso ho la necessità di visualizzare nel mio report i dati raggruppati per sede come nell'esempio allegato
Pe le mie stampe uso il seguente codice:
' lancio la stampa
Private Sub StampaAllegato12() ' report allegato 12
If Not File.Exists(FILE_NAME) Then
MsgBox(FILE_NAME & " Stringa di connessione mancante.")
Return
End If
Dim sr As StreamReader = File.OpenText(FILE_NAME)
Dim sqlString As String
sqlString = sr.ReadLine()
sr.Close()
Dim Connection As New OleDbConnection(sqlString)
Dim Command As New OleDbCommand
Dim adapter As New OleDbDataAdapter
Dim Sql = "SELECT Servizi.ID, Servizi.Dal, Servizi.Al, Reparti.Reparto + ' ' + Reparti.Città AS Reparto," & _
"Servizi.Anu, Servizi.Mnu, Servizi.Gnu, Servizi.Aca, Servizi.Mca, Servizi.Gca, Servizi.Asu, Servizi.Msu," & _
"Servizi.Gsu, Servizi.Ata, Servizi.Mta, Servizi.Gta, Servizi.Apa, Servizi.Mpa, Servizi.Gpa, Servizi.Afa," & _
"Servizi.Mfa, Servizi.Gfa, Servizi.IDReparto, Servizi.IDAnagrafica FROM Servizi INNER JOIN Reparti ON Servizi.IDReparto = Reparti.ID WHERE Servizi.IDAnagrafica = '" & m_ParametroCodiceFiscale & "' ORDER BY Servizi.Al"
Connection.Open()
Command = New OleDbCommand(Sql, Connection)
adapter.SelectCommand = Command
adapter.Fill(Ds, "Servizi")
bds = New BindingSource
bds.DataSource = Ds
bds.DataMember = "Servizi"
adapter.Dispose()
Command.Dispose()
Connection.Close()
If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then ' se nella finestra di dialogo si preme ok
PrintPreviewDialog1.Document = PrintDocument1 ' si passa il contenuto di PrintDocument a PrintPreviewDialog
PrintPreviewDialog1.ShowDialog() ' che lo visualizzerà
Else ' altrimenti
Exit Sub ' esco dalla sub
End If
End Sub
' il foglio che voglio stampare
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
' Dichiarazioni generali
Dim font1 As New Font("TimeRomanNew", 14, FontStyle.Bold)
Dim font2 As New Font("TimeRomanNew", 12, FontStyle.Bold)
Dim font3 As New Font("TimeRomanNew", 9, FontStyle.Bold)
Dim font4 As New Font("TimeRomanNew", 9)
Static i As Integer ' questa variabile contiene la posizione del dataset
Dim y As Integer = 340 ' in questa invece metto la posizione di stampa
' della prima rigadei dati. ATTENZIONE questa variabile non deve essere statica,
' altrimenti i dati vengono progressivamente stampati più in basso. Fino a uscire dal foglio
Dim str As String ' in questa variabile inserisco il valore della cella del dataset
Static Pagina As Integer ' in questa registro il numero della pagina corrente
Dim Parziale As Integer ' serve per calcolare il valore per pagina
Static Incrementale As Integer ' calcolo il valore delle pagine finora raggiunte
Static Totale As Integer ' totale definitivo
'***********************************************************************************************
'INTESTAZIONE DEL DOCUMENTO
e.Graphics.DrawImage(Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "ICO\LOGO REPUBBLICA.jpg"), 50, 50, 100, 100) ' se voglio inserire un immagine
e.Graphics.DrawString("DITTA", font1, Brushes.Black, 150, 50) ' se vogio inserire una riga di testo
e.Graphics.DrawString("Allegato 12 legge................", font2, Brushes.Black, 50, 250) ' legge allegato 12
'voci intestazione colonna
e.Graphics.DrawString("DAL", font3, Brushes.Black, 50, 300)
e.Graphics.DrawString("AL", font3, Brushes.Black, 150, 300)
e.Graphics.DrawString("SEDE", font3, Brushes.Black, 400, 300)
e.Graphics.DrawString("ANNI", font3, Brushes.Black, 930, 250)
e.Graphics.DrawString("ANNI N.U.", font3, Brushes.Black, 930, 300)
'************************************************************************************************
' CORPO DEL DOCUMENTO N.B. non coincide con la linea di divisione dell'intestazione!
For i = i To i + 24 ' record inserire in ogni pagina (in questo caso 25 ogniuna)
If i < bds.Count Then
str = Ds.Tables("Servizi").Rows(i).Item(1) ' prendo il valore della cella
e.Graphics.DrawString((str.PadLeft(5, ChrW(Len(str)))), font4, Brushes.Black, 50, y) ' e la posiziono sul foglio
str = Ds.Tables("Servizi").Rows(i).Item(2) ' prendo il valore della cella
e.Graphics.DrawString((str.PadLeft(5, ChrW(Len(str)))), font4, Brushes.Black, 150, y) ' e la posiziono sul foglio
str = Ds.Tables("Servizi").Rows(i).Item(3) ' prendo il valore della cella
e.Graphics.DrawString((str.PadLeft(5, ChrW(Len(str)))), font4, Brushes.Black, 250, y) ' e la posiziono sul foglio
str = Ds.Tables("Servizi").Rows(i).Item(4) ' prendo il valore della cella
e.Graphics.DrawString((str.PadLeft(5, ChrW(Len(str)))), font4, Brushes.Black, 900, y) ' e la posiziono sul foglio
y = y + font4.GetHeight ' incremento il valore di Y in modo da stampare la riga seguente sotto la precedente
e.HasMorePages = True ' permetto di stampare la pagina successiva
Else
e.HasMorePages = False ' blocco la stampa
End If
Next i
If i > bds.Count Then ' quando supera il numero di record da stampare (vuol dire che questi sono finiti). allora stampo il totale
e.Graphics.DrawLine(Pens.Black, 650, (y + 10), 720, (y + 10)) ' tiro la linea di somma
e.Graphics.DrawString("TOTALI", font3, Brushes.Black, 580, (y + 20)) 'La scritta totali
Totale = Totale + Incrementale ' calcolo il valore
e.Graphics.DrawString(Totale, font3, Brushes.Black, 650, (y + 20)) ' e lo stampo
End If
' ********************************************************************************************************
' PIE DI PAGINA DEL DOCUMENTO
e.Graphics.DrawLine(Pens.Blue, 50, 830, 750, 830) ' per visualizzare un elemento grafico
Pagina += 1 ' incremento il numero di pagina
e.Graphics.DrawString("Pagina" & Pagina, font2, Brushes.Black, 600, 850)
End Sub
Come faccio a creare stampe come per sede di servizio?
Grazie in anticipo
Mau67
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
mer 22 giu 2011 - 17:40
Ciao,
il fatto è che devi fare tutto a codice se usi un oggetto PrintiDocument...ma perchè non pensi di includere un report? Perchè ci sono strumenti nati appositamente per queste cose, che ti semplificano notevolmente la vita
Magari includi quelli di SqlReporting (ReportViewer =>
http://www.gotreportviewer.com
) invece di Crystal che è più pesante...
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
ven 24 giu 2011 - 16:29
Ok ma se voglio che in ogni pagina mi inserisca un certo numero di righe? come faccio?
Vedi un report fattura dove magari gli articoli sono 100 e io ne voglio inserire 25 per pagina.
Grazie
Mau67
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
sab 25 giu 2011 - 12:58
Ciao,
guarda qui:
http://msdn.microsoft.com/en-us/library/ms251668
(VS.80).aspx in particolare nella sezione "Page Breaks", fa proprio un esempio di questo tipo.
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
Mau67
Profilo
| Expert
917
messaggi | Data Invio:
sab 25 giu 2011 - 13:34
Ok grazie prverò ad usare questo tipo di report.
Grazie alla prossima
Mau67
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 !