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
>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/