Imprimer une flexgrid avec vb.net

Contenu du snippet

Voici le code necessaire pour imprimer une msFlexGrid avec VB.net. Cela n'imprime pas de tableau mais les valeurs qu'il contient c'est a dire que vous ne verez pas de lignes qui separent les colonnes et les lignes. Ce code est base sur un exemple de tableau qui contient 3 colonnes: identification, description et value. Pour l'activer il vous faudra creer un bouton d'impression cmdPrint. Ce code support l'impression sur plusieurs pages si votre tableau le necessite.
C'est tout ce qu'il y a dire, je pense que le code se comprend assez facilement en le lisant calmement, vous l'adapterer sans probleme a votre projet.
PS j'ai ajouter ce code parce que je n'ai rien trouvé sur internet a ce sujet donc je pense que ca peut interesser certaines personnes. Bonne prog

Source / Exemple :


Imports System.Drawing.Printing 'a placer au debut du code, avant d'ouvrir la class

Private Sub cmdPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrint.Click
        printFont = New Font("Arial", 10)
        Dim printDoc As PrintDocument
        printDoc = New PrintDocument
        AddHandler printDoc.PrintPage, AddressOf Me.printDoc_PrintPage
        printDoc.Print()
    End Sub

    Dim count As Integer = 1 'number of the line
    Dim p As Short = 0
    Private Sub printDoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
        Dim lpp As Single = 0   'number of lines per page
        Dim yPos As Single = 0
        Dim line As String
        Dim leftMargin As Single = e.MarginBounds.Left
        Dim topMargin As Single = e.MarginBounds.Top

        'On Error GoTo ErrorHandler
        'calcul the number of line per page
        'Height of the page/height of the font
        lpp = e.MarginBounds.Height / printFont.GetHeight(e.Graphics)

        yPos = topMargin - 100
        e.Graphics.DrawString("Entete de l'impression", New Font("Arial", 14, FontStyle.Underline), Brushes.Black, leftMargin, yPos, New StringFormat)
        yPos = topMargin - 30
        e.Graphics.DrawString("IDENTIFICATION", printFont, Brushes.Black, 0.5 * leftMargin, yPos, New StringFormat)
        e.Graphics.DrawString("DESCRIPTION", printFont, Brushes.Black, 2.5 * leftMargin, yPos, New StringFormat)
        e.Graphics.DrawString("VALUE", printFont, Brushes.Black, 6 * leftMargin, yPos, New StringFormat)
        yPos = topMargin

        'read one line of the dataGrid, the 1st line of the page
        If p = 0 Then
            line = msFlexGridConfig.get_TextMatrix(p + 1, 1)
        Else
            line = msFlexGridConfig.get_TextMatrix(p, 1)
        End If

        'loop writing each line 
        While (count < lpp And line <> Nothing And (count + p < msFlexGridConfig.Rows()))
            yPos = yPos + printFont.GetHeight(e.Graphics)
            'write the 1 column
            e.Graphics.DrawString(line, printFont, Brushes.Black, 0.5 * leftMargin, yPos, New StringFormat)
            'write the 2 column
            line = msFlexGridConfig.get_TextMatrix(count + p, 2)
            e.Graphics.DrawString(line, printFont, Brushes.Black, 2.5 * leftMargin, yPos, New StringFormat)
            'write the 3 column
            line = msFlexGridConfig.get_TextMatrix(count + p, 3)
            e.Graphics.DrawString(line, printFont, Brushes.Black, 6 * leftMargin, yPos, New StringFormat)

            count = count + 1
            If (count + p < msFlexGridConfig.Rows()) Then '((count < lpp) And (count < msFlexGridConfig.Rows())) Then
                line = msFlexGridConfig.get_TextMatrix(count + p, 1)
            Else
                line = Nothing
            End If
        End While

        'if there are still lines in the dataGrid
        If (line <> Nothing) Then
            p = count
            count = 0
            yPos = topMargin
            e.HasMorePages = True
        Else
            e.HasMorePages = False
            Exit Sub
        End If

        'ErrorHandler:
        '        MsgBox("Error printing data to printer.", MsgBoxStyle.ApplicationModal + MsgBoxStyle.Critical, MMain.APP_NAME)
        '        Exit Sub
    End Sub

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.