Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [VB.NET] Stampare datagridview | Stampa non centrata

    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,360
    Tutto dipende da come gestisci posX.

    E comunque sei sicuro che tutte le colonne ci stiano nella pagina in larghezza?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    le colonne in largheza non ci stanno

    EDIT: grazie mille della risposta oregon, ora riesco a gestire la posizione
    Ultima modifica di Manu2020; 20-09-2020 a 08:57

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,360
    Prego ma non capisco... non hai scritto tu il codice? Non sapevi prima come gestire la posizione?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    l'ho copiato da un'altro sito poichè tutti gli altri codici non funzionavano.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,360
    Il codice bisogna comprenderlo non solo copiarlo, altrimenti non parliamo di programmazione...

    P.S. L'hai trovato su masterdrive?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    No, non l'ho trovato su masterdrive

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.