Ciao a tutti,
quando io cerco di stampare la datagriview, la stampa non viene centrata e quindi viene tagliata.
Ecco la preview:
Ecco il codice:
codice:Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click PrintDocument1.DefaultPageSettings.Landscape = True Dim printDialog1 As PrintDialog = New PrintDialog() printDialog1.Document = PrintDocument1 Dim result As DialogResult = printDialog1.ShowDialog() If result = DialogResult.OK Then PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End If End Sub Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Dim posX As Integer Dim posY As Integer = e.MarginBounds.Top Dim Rettangolo As Rectangle Dim Altezza As Integer = francesco.RowTemplate.Height Dim NormalFont As Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, FontStyle.Regular) Dim BoldFont As Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, FontStyle.Bold) Static righeStampate As Integer = 0 Static pagineStampate As Integer = 0 Dim righeTotali As Integer = francesco.Rows.Count + 1 Dim righePerPagina As Integer = CType(e.MarginBounds.Height / Altezza, Integer) Dim nPagine As Integer If righeTotali Mod righePerPagina > 0 Then nPagine = (righeTotali \ righePerPagina) + 1 Else nPagine = (righeTotali \ righePerPagina) End If posX = CType((e.MarginBounds.Width - 360) / 2 + e.MarginBounds.Left, Integer) Dim dimensioneCella As System.Drawing.SizeF Dim incremento As Integer For Each colonna As DataGridViewColumn In francesco.Columns dimensioneCella = e.Graphics.MeasureString(colonna.HeaderText.ToString, NormalFont) incremento = CType((colonna.Width - dimensioneCella.Width) / 2, Integer) Rettangolo = New Rectangle(posX, posY, colonna.Width, Altezza) e.Graphics.DrawRectangle(Pens.Black, Rettangolo) e.Graphics.DrawString(colonna.HeaderText, BoldFont, Brushes.Black, posX + incremento, posY + 5) posX += colonna.Width Next posY += Altezza Dim testo As String For i As Integer = righeStampate To righeStampate + righePerPagina - 2 posX = CType((e.MarginBounds.Width - 360) / 2 + e.MarginBounds.Left, Integer) If i = righeTotali - 1 Then e.HasMorePages = False Exit For End If For Each colonna As DataGridViewColumn In francesco.Columns If francesco.Rows(i).Cells(colonna.Name).Value Is Nothing Then testo = " " Else testo = francesco.Rows(i).Cells(colonna.Name).Value.ToString End If dimensioneCella = e.Graphics.MeasureString(testo.ToString, NormalFont) incremento = CType((colonna.Width - dimensioneCella.Width) / 2, Integer) Rettangolo = New Rectangle(posX, posY, colonna.Width, Altezza) e.Graphics.DrawRectangle(Pens.Black, Rettangolo) e.Graphics.DrawString(testo, NormalFont, Brushes.Black, posX + incremento, posY + 5) posX += colonna.Width Next righeStampate += 1 posY += Altezza Next pagineStampate += 1 If pagineStampate < nPagine Then e.HasMorePages = True posY = e.MarginBounds.Top Else e.HasMorePages = False righeStampate = 0 pagineStampate = 0 End If End Sub


Rispondi quotando