Ir para o conteúdo
  • 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

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.