Io cerco di stampare un report utilizzando PrintDocument.
Tralascio tutto il codice per disegnare i vari oggetti grafici concentrandomi sul codice che analizza i record contenuti in un datagridview e li passa a PrintDocument.

codice:
'Questa variabile contiene la posizione nel dataset
Static z As Integer

'In questa invece si mette la posizione di stampa della prima riga dei dati.
Dim Y As Integer = 135


'Inizio a ciclare i record
'In questo punto decido quanti record inserire in ogni pagina (in questo caso 25 ognuna)
For z = z To z + 70    
                                                             
                If z < DataGridView1.RowCount Then

                    'QUANTITA (In unità)
                    Quantita = FormatNumber(DataGridView1.Rows(z).Cells(2).Value, 2)
                    'TotQuantita = TotQuantita + Quantita

                    'PREZZO (In €uro)
                    Prezzo = FormatNumber(DataGridView1.Rows(z).Cells(3).Value, 2)

                    'SCONTO1 (In termini percentuali)
                    Sconto1 = FormatNumber(DataGridView1.Rows(z).Cells(4).Value, 2)

                    'SCONTO2 (In termini percentuali)
                    Sconto2 = FormatNumber(DataGridView1.Rows(z).Cells(5).Value, 2)

                    'SCONTO3 (In termini percentuali)
                    Sconto3 = FormatNumber(DataGridView1.Rows(z).Cells(6).Value, 2)
                   
                    'IVA (In termini percentuali)
                    Iva = FormatNumber(DataGridView1.Rows(z).Cells(7).Value, 2)
   
                    'VALORE (Comprensivo di iva)
                    Valore = FormatNumber(DataGridView1.Rows(z).Cells(8).Value, 2)

                    e.Graphics.DrawString(Quantita, Font3, Brushes.Black, e.MarginBounds.Left + 256, Y)
                    e.Graphics.DrawString(Prezzo, Font3, Brushes.Black, e.MarginBounds.Left + 310, Y)
                    e.Graphics.DrawString(Sconto1, Font3, Brushes.Black, e.MarginBounds.Left + 364, Y)
                    e.Graphics.DrawString(Sconto2, Font3, Brushes.Black, e.MarginBounds.Left + 418, Y)
                    e.Graphics.DrawString(Sconto3, Font3, Brushes.Black, e.MarginBounds.Left + 472, Y)
                    e.Graphics.DrawString(Iva, Font3, Brushes.Black, e.MarginBounds.Left + 526, Y)
                    e.Graphics.DrawString(Valore, Font3, Brushes.Black, e.MarginBounds.Left + 580, Y)

                    Y = Y + Font3.GetHeight
                    e.HasMorePages = True                                                                           'Permetto di stampare la pagina successiva                                                                                    'Aumenta di una unità il numero della pagina

                Else

                    e.HasMorePages = False                                                                          'Blocco la stampa

                End If

            Next z

Voi penserete che tutto funziona, ed è proprio così, almeno fino al momento della stampa effettiva, dove vengono stampati tutti gli elementi grafici ma gli item del datagridview no.

Cosa è successo? dove sbaglio?

Ho provato anche a mettere Z=0 (anzichè Z=Z) visualizza correttamente solo la prima pagina, le successive no ma in compenso la prima viene stampata correttamente.

Se qualcuno sa consigliarmi o una possibile risoluzione o altre strade : GRAZIE