Salve a tutti!
Eliminando parti inutili posto una porzione del codice prima di parlavi del problema.
codice:
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim Font1 As New Font("Verdana", 16, FontStyle.Regular)
Dim Y As Integer = 340
Dim i As Integer = 0
'apro il db già inizializzato (il select funziona correttamente)
Try
conn.Open()
cmd = New OleDbCommand("SELECT * FROM personale", conn)
daPERSONE = New OleDbDataAdapter()
daPERSONE.SelectCommand = cmd
dtPERSONE = New DataTable()
daPERSONE.Fill(dtPERSONE)
drPERSONE = cmd.ExecuteReader
If drPERSONE.HasRows Then
While drPERSONE.Read
i = 436
Dim cf As Integer = 35
e.Graphics.DrawString("Nome", Font1, Brushes.Black, 50, i)
e.Graphics.DrawString(drPERSONE.Item(1), Font1,Brushes.Black, 350, i)
i = i + cf
e.Graphics.DrawString(drPERSONE.Item(2), Font1, Brushes.Black, 350, i)
e.Graphics.DrawString("Cognome", Font1, Brushes.Black, 50, i)
e.HasMorePages = True
End If
End While
End If
conn.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Il problema (notare il e.hasmorepages=true lasciato li cosi) è proprio quello.
Nel dettaglio, ricevo 3 record (nel mio esempio) e attraverso delle msgbox di controllo ho notato che effettivamente il ciclo è di 3 passaggi.
La stampa nel caso in cui io non inserisca nessun hasmorepages=true stampa 3 pagine sovrapposte.
Nel caso in cui io inserisca hasmorepages=true invece stampa all'infinito.
Non ci piove che sia necessario un controllo per verificare come e quando settare e.hasmorepages=false ma come?
il mio scopo anche se penso sia ormai palese è stampare ad ogni passaggio del ciclo su una pagina diversa finke il ciclo duri.