Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Geninha

Imprimir no dataGridView em vb.net

Recommended Posts

Geninha

ola boa tarde.

estou a imprimir dados de um datagridview e este código funciona bem mas quando tenho muitos dados para imprimir ele não gera outra página com os próximos dados mas sim com os dados da primeira página.

será que me poderia ajudar.

o código é este:

Private Sub btnImprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImprimir.Click
        Dim ds As New ConsultasDataSet
        'cria o documento e dá o nome ao mesmo
        medicosDocument = New PrintDocument
        'incluir o manipulador de eventos
        AddHandler medicosDocument.PrintPage, AddressOf Me.imprimirMedicos
        'modo de visualização
        'define algumas propriedades do projecto
        With dlgVisualiza
            'indica qual o documento a ser visualizado
            .Document = medicosDocument
            .WindowState = FormWindowState.Maximized
            .PrintPreviewControl.Zoom = 1
            .Text = "Listagem dos Médicos"
            .ShowDialog()
        End With
        'libertar o documento após imprimir
        medicosDocument.Dispose()
    End Sub
    Private Sub imprimirMedicos(ByVal sender As Object, ByVal e As Drawing.Printing.PrintPageEventArgs)
        'Margens vamos assumir as margens assumidas pela impressora(Margin Bounds)
        Dim margemEsq As Single = e.MarginBounds.Left
        Dim margemDir As Single = e.MarginBounds.Right
        Dim margemSup As Single = e.MarginBounds.Top
        Dim margemInf As Single = e.MarginBounds.Bottom
        Dim linhasLidas As Integer = 1
        Dim cont = 250
        Dim canetadaimpressora As Pen = New Pen(Color.BlueViolet, 2)
        'Variáveis das fontes
        Dim fonteNegrito As Font
        Dim fonteTitulo As Font
        Dim fonteSubtitulo As Font
        Dim fonteRodape As Font
        Dim fonteNormal As Font
        'define efeitos em fonte
        fonteNegrito = New Font("Arial", 9, FontStyle.Bold)
        fonteTitulo = New Font("Arial", 15, FontStyle.Bold)
        fonteSubtitulo = New Font("Arial", 10, FontStyle.Bold)
        fonteRodape = New Font("Arial",
        fonteNormal = New Font("Arial", 9)
        'define-se o número de linhas por página
        'divide-se a área de impressão pelo tamanho da fonte subtraindo 10 valores
        Dim linhasporpagina = e.MarginBounds.Height / fonteNormal.GetHeight(e.Graphics) - 10
        'cabeçalho
        e.Graphics.DrawLine(canetadaimpressora, margemEsq, 60, margemDir, 60)
        e.Graphics.DrawLine(canetadaimpressora, margemEsq, 160, margemDir, 160)
        e.Graphics.DrawString("Listagem dos Médicos", fonteTitulo, Brushes.BlueViolet, margemEsq + 250, 80, New StringFormat())
        'imagem
        e.Graphics.DrawImage(Image.FromFile("F:\Projecto Final Direito\Projecto_Final\Resources\print.bmp"), 100, 68)
        e.Graphics.DrawString(System.DateTime.Today, fonteSubtitulo, Brushes.Black, margemDir - 150, 120, New StringFormat())
        'campos a serem impressos
        e.Graphics.DrawString("Contribuinte : ", fonteNegrito, Brushes.Black, margemEsq, 170, New StringFormat())
        e.Graphics.DrawString("Nome : ", fonteNegrito, Brushes.Black, margemEsq + 150, 170, New StringFormat())
        e.Graphics.DrawString("Distrito : ", fonteNegrito, Brushes.Black, margemEsq + 300, 170, New StringFormat())
        e.Graphics.DrawLine(canetadaimpressora, margemEsq, 200, margemDir, 200)
        'dados a serem impressos
        If linhasLidas <= linhasporpagina Then
            For linha = 0 To DataGridView1.RowCount - 1
                If cont < 900 Then
                    e.Graphics.DrawString(DataGridView1.Item(0, linha).Value.ToString, fonteNegrito, Brushes.Black, margemEsq, cont)
                    e.Graphics.DrawString(DataGridView1.Item(1, linha).Value.ToString, fonteNormal, Brushes.Black, margemEsq + 150, cont)
                    e.Graphics.DrawString(DataGridView1.Item(2, linha).Value.ToString, fonteNormal, Brushes.Black, margemEsq + 300, cont)
                    cont += 25
                Else
                    linhasporpagina = linhasLidas
                    If cont < 900 Then
                        e.HasMorePages = False
                    End If
                    cont = 295
                End If
                linhasLidas += 1
            Next
        End If
        'rodapé
        Dim paginaactual = 1
        e.Graphics.DrawLine(canetadaimpressora, margemEsq, margemInf, margemDir, margemInf)
        e.Graphics.DrawString(System.DateTime.Now.ToString(), fonteRodape, Brushes.Black, margemEsq, margemInf, New StringFormat())
        e.Graphics.DrawString("Pag." & paginaactual, fonteRodape, Brushes.Black, margemDir, margemInf, New StringFormat())
    End Sub

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.