none
Problème pour imprimer un datagridview RRS feed

  • Question

  • Salut !

    Je rencontre deux problème pour imprimer un datagridview.

    D'après le code ci-dessous, la hauteur du datagridview change ce qui m'oblige à remettre sa bonne valeur. Deuxièmement, comme le datagridvieuw ne prend pas toute la page, il y a une bande grise en bas. Voici le résultat :

    http://michel.billaud2.free.fr/tmp/FormPreview.jpg

    Merci pour votre aide. J'ai pris cet exemple sur ce forum.

    Form1.DataGridView1.Height = (Form1.DataGridView1.Rows(1).Height * nblignes) redimensionne le tableau et ce n'est pas bien.

        Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            Dim nblignes As Integer = CInt(PrintDocument1.DefaultPageSettings.PrintableArea.Height.ToString / Form1.DataGridView1.Rows(1).Height.ToString)
            Dim FontRegular As New Font("Times New Roman", 14, FontStyle.Regular, GraphicsUnit.Point)
            Dim FontBold As New Font("Times New Roman", 14, FontStyle.Bold, GraphicsUnit.Point)
    
            'Calcule la hauteur de la grille
            Form1.DataGridView1.Height = (Form1.DataGridView1.Rows(1).Height * nblignes)
            Dim bm As New Bitmap(Form1.DataGridView1.Width - 5, Form1.DataGridView1.Height)
            Form1.DataGridView1.DrawToBitmap(bm, New Rectangle(e.PageSettings.HardMarginX, e.PageSettings.HardMarginY, Form1.DataGridView1.Width, Form1.DataGridView1.Height))
    
            'Titre
            e.Graphics.DrawString("Chauffeur : ", FontBold, Brushes.Black, 50, 50)
            e.Graphics.DrawString(Chauffeur, FontRegular, Brushes.Black, 160, 50)
    
            'Ajuste la grille à l'imprimante
            e.Graphics.DrawImage(bm, 25, 80, (e.PageBounds.Width - e.PageSettings.HardMarginX - 50), (e.PageBounds.Bottom - e.PageSettings.HardMarginY))
        End Sub
    


    samedi 20 septembre 2014 23:07

Réponses

  • J'ai trouvé la solution mais l'aperçu est bien seulement à l'impression, il manque des lignes et l'écriture du datagriview n'est pas belle alors qu'à l'aperçu tout est clean. Voici le résultat (zoomé) :

    http://michel.billaud2.free.fr/tmp/FormPreview2.jpg

    Mon code :

        Private Sub TSMenuItemImprimer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSMenuItemImprimer.Click
            'Imprime
            Try
                PrintDialog1.Document = PrintDocument1
                If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
                    PrintDocument1.DefaultPageSettings.Landscape = False
                    PrintDocument1.Print()
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    
        Private Sub TSMenuItemPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSMenuItemPreview.Click
            'Aperçu avant impression
            PrintPreviewDialog1.Document = PrintDocument1
            PrintPreviewDialog1.WindowState = FormWindowState.Maximized
            PrintPreviewDialog1.ShowDialog()
        End Sub
    
        Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            'Document à imprimer
            DataGridView1.ClearSelection()
            Dim FontRegular As New Font("Times New Roman", 14, FontStyle.Regular, GraphicsUnit.Point)
            Dim FontBold As New Font("Times New Roman", 14, FontStyle.Bold, GraphicsUnit.Point)
            Dim FontApp As New Font("Times New Roman", 10, FontStyle.Bold, GraphicsUnit.Point)
            Dim Ligne As New StringFormat, H As Integer
            Ligne.Alignment = StringAlignment.Center
            Ligne.LineAlignment = StringAlignment.Center
    
            'Titre
            LabelTmp.Text = "Déplacements professionnels"
            LabelTmp.Font = New Font("Times New Roman", 22, FontStyle.Bold, GraphicsUnit.Point)
            Dim TitreX1 As New Rectangle(20, 40, CInt(PrintDocument1.DefaultPageSettings.PrintableArea.Width), LabelTmp.Height)
            e.Graphics.DrawString(LabelTmp.Text, LabelTmp.Font, Brushes.Blue, TitreX1, Ligne)
    
            'Titre
            LabelTmp.Text = "Pour la période de " & MoisNom(Mois - 1) & " " & Annee
            LabelTmp.Font = FontBold
            Dim TitreX2 As New Rectangle(20, 80, CInt(PrintDocument1.DefaultPageSettings.PrintableArea.Width), LabelTmp.Height)
            e.Graphics.DrawString(LabelTmp.Text, FontBold, Brushes.Brown, TitreX2, Ligne)
    
            'Infos
            e.Graphics.DrawString("Chauffeur : ", FontBold, Brushes.Black, 35, 120)
            e.Graphics.DrawString(Chauffeur, FontRegular, Brushes.Black, 140, 120)
    
            'Calcule la hauteur de la grille
            H = DataGridView1.Height
            DataGridView1.Height = (DataGridView1.Rows(1).Height * (DataGridView1.RowCount + 1) + 3)
            Dim bm As New Bitmap(DataGridView1.Width - 5, DataGridView1.Height + 200)
            DataGridView1.DrawToBitmap(bm, New Rectangle(e.PageSettings.HardMarginX, e.PageSettings.HardMarginY, DataGridView1.Width, DataGridView1.Height))
            DataGridView1.Height = H
    
            'Ajuste la grille à l'imprimante
            e.Graphics.DrawImage(bm, 25, 150, (e.PageBounds.Width - e.PageSettings.HardMarginX - 50), (e.PageBounds.Bottom - e.PageSettings.HardMarginY))
    
            'Fin
            e.Graphics.DrawString("MicSoft - Deplacement Pro v " & Application.ProductVersion, FontApp, Brushes.BlueViolet, 570, 1080)
        End Sub
    

    • Marqué comme réponse Michel56100 dimanche 21 septembre 2014 13:30
    dimanche 21 septembre 2014 13:18
  • Bon avec une impression qualité "Photo" le résultat est impeccable. Hourra !
    • Marqué comme réponse Michel56100 dimanche 21 septembre 2014 13:30
    dimanche 21 septembre 2014 13:30

Toutes les réponses

  • J'ai trouvé la solution mais l'aperçu est bien seulement à l'impression, il manque des lignes et l'écriture du datagriview n'est pas belle alors qu'à l'aperçu tout est clean. Voici le résultat (zoomé) :

    http://michel.billaud2.free.fr/tmp/FormPreview2.jpg

    Mon code :

        Private Sub TSMenuItemImprimer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSMenuItemImprimer.Click
            'Imprime
            Try
                PrintDialog1.Document = PrintDocument1
                If PrintDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
                    PrintDocument1.DefaultPageSettings.Landscape = False
                    PrintDocument1.Print()
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    
        Private Sub TSMenuItemPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSMenuItemPreview.Click
            'Aperçu avant impression
            PrintPreviewDialog1.Document = PrintDocument1
            PrintPreviewDialog1.WindowState = FormWindowState.Maximized
            PrintPreviewDialog1.ShowDialog()
        End Sub
    
        Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
            'Document à imprimer
            DataGridView1.ClearSelection()
            Dim FontRegular As New Font("Times New Roman", 14, FontStyle.Regular, GraphicsUnit.Point)
            Dim FontBold As New Font("Times New Roman", 14, FontStyle.Bold, GraphicsUnit.Point)
            Dim FontApp As New Font("Times New Roman", 10, FontStyle.Bold, GraphicsUnit.Point)
            Dim Ligne As New StringFormat, H As Integer
            Ligne.Alignment = StringAlignment.Center
            Ligne.LineAlignment = StringAlignment.Center
    
            'Titre
            LabelTmp.Text = "Déplacements professionnels"
            LabelTmp.Font = New Font("Times New Roman", 22, FontStyle.Bold, GraphicsUnit.Point)
            Dim TitreX1 As New Rectangle(20, 40, CInt(PrintDocument1.DefaultPageSettings.PrintableArea.Width), LabelTmp.Height)
            e.Graphics.DrawString(LabelTmp.Text, LabelTmp.Font, Brushes.Blue, TitreX1, Ligne)
    
            'Titre
            LabelTmp.Text = "Pour la période de " & MoisNom(Mois - 1) & " " & Annee
            LabelTmp.Font = FontBold
            Dim TitreX2 As New Rectangle(20, 80, CInt(PrintDocument1.DefaultPageSettings.PrintableArea.Width), LabelTmp.Height)
            e.Graphics.DrawString(LabelTmp.Text, FontBold, Brushes.Brown, TitreX2, Ligne)
    
            'Infos
            e.Graphics.DrawString("Chauffeur : ", FontBold, Brushes.Black, 35, 120)
            e.Graphics.DrawString(Chauffeur, FontRegular, Brushes.Black, 140, 120)
    
            'Calcule la hauteur de la grille
            H = DataGridView1.Height
            DataGridView1.Height = (DataGridView1.Rows(1).Height * (DataGridView1.RowCount + 1) + 3)
            Dim bm As New Bitmap(DataGridView1.Width - 5, DataGridView1.Height + 200)
            DataGridView1.DrawToBitmap(bm, New Rectangle(e.PageSettings.HardMarginX, e.PageSettings.HardMarginY, DataGridView1.Width, DataGridView1.Height))
            DataGridView1.Height = H
    
            'Ajuste la grille à l'imprimante
            e.Graphics.DrawImage(bm, 25, 150, (e.PageBounds.Width - e.PageSettings.HardMarginX - 50), (e.PageBounds.Bottom - e.PageSettings.HardMarginY))
    
            'Fin
            e.Graphics.DrawString("MicSoft - Deplacement Pro v " & Application.ProductVersion, FontApp, Brushes.BlueViolet, 570, 1080)
        End Sub
    

    • Marqué comme réponse Michel56100 dimanche 21 septembre 2014 13:30
    dimanche 21 septembre 2014 13:18
  • Bon avec une impression qualité "Photo" le résultat est impeccable. Hourra !
    • Marqué comme réponse Michel56100 dimanche 21 septembre 2014 13:30
    dimanche 21 septembre 2014 13:30