Stampa selvaggia datagridview su più pagine

mercoledì 30 settembre 2009 - 18.15

Fraxx Profilo | Newbie

Scusate sono disperato, è 5 ore che sto battendo la testa con questo
maledetto e.HasMorePage. Devo stampare una datagridview e non riesco a dargli
il cambio pagina, questo è il mio stupido codice.

==========================
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As
System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

Dim drawFont As New Font("Verdana", 12, FontStyle.Regular)
Dim i, x As Integer
Dim distanza As Integer = 30 ' distanza fissa righe

i = Me.DataGridView1.Rows.Count - 1 'conto il numero di righe del datagrid

For x = 0 To i 'il datagrid contiene 3 colonne (nella parentesi dopo item vengono indicati il numero della colonna, la riga che scorre con x)
e.Graphics.DrawString(Me.DataGridView1.Item(0, x).Value, drawFont, Brushes.Black, 30, 10 + (x * distanza))
e.Graphics.DrawString(Me.DataGridView1.Item(1, x).Value, drawFont, Brushes.Black, 150, 10 + (x * distanza))
e.Graphics.DrawString(Me.DataGridView1.Item(2, x).Value, drawFont, Brushes.Black, 400, 10 + (x * distanza))
Next x

End Sub

====================================
Tramite questo banale codice stampo una datagridview
Il problema è che non riesco a capire come implementare il comando
e.HasMorePage per dargli l'interupt della pagina vorrei che dopo 30 righe saltasse alla pagina dopo.

Mi potete aiutare per favore?
Grazie!

luigidibiasi Profilo | Guru

Ciao,

>==========================
>Private Sub PrintDocument1_PrintPage(ByVal sender As Object,
>ByVal e As
>System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
>
>Dim drawFont As New Font("Verdana", 12, FontStyle.Regular)
> Dim i, x As Integer
> Dim distanza As Integer = 30 ' distanza fissa righe
>

>i = Me.DataGridView1.Rows.Count - 1 'conto il numero di righe
>del datagrid
>

Il problema nasce qui ... il metodo PrintPage lo devi immaginare come il metodo di scrittura sul foglio... (e basta.. quindi devi evitare di dichiaraci quella variabile FONT perché ne istanzi una ad ogni pagina che stampi).

Lo devi pilotare da fuori la routine non da dentro... per far subito ti consiglio di dichiarati una variabile globale esterna al metodo in cui mantenere il numero di riga stampata...

dim NRIGA as integer = 0 ' prima del metodo

successivamente nel printpage fai partire la stampa tramite questa NRIGA modificando il for x

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
>dopo item vengono indicati il numero della colonna, la riga che
>scorre con x)
>e.Graphics.DrawString(Me.DataGridView1.Item(0, x).Value, drawFont,
>Brushes.Black, 30, 10 + (x * distanza))
>e.Graphics.DrawString(Me.DataGridView1.Item(1, x).Value, drawFont,
>Brushes.Black, 150, 10 + (x * distanza))
>e.Graphics.DrawString(Me.DataGridView1.Item(2, x).Value, drawFont,
>Brushes.Black, 400, 10 + (x * distanza))

Dopo aver stampato ogni riga scrivi
NRIGA += 1 ( così al prossimo hasMorePage parte dalla prox riga )

prima del next scrivi

if NRIGA mod 30 = 0 then e.hasMorePage = true >>exit sub è importante per farlo passare subito alla pagina successiva end if
In questo modo ogni 30 righe parte una nuova pagina...

> Next x


>Mi potete aiutare per favore?
>Grazie!
>
fammi sapere come và...
credo ci sia bisogno di un controllo all'inizio di printpage per essere sicuri che non ci siano altre righe altrimenti ti stampa una pagina vuota alla fine...
if NRIGA = i
exit sub
end if


Luigi Di Biasi
http://blogs.dotnethell.it/luigidibiasi/
http://www.dibiasi.it/
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