VB .NET - Curso Prático ADO .NET - Módulo de Administração : Gerando relatórios com PrintDocument - VIII
Nesta aula vou mostrar como gerar os relatórios para o módulo de administração da aplicação CiaFilmes usando o objeto PrintDocument do Visual Basic .NET.
A classe PrintDocument é o coração do processo de impressão no Visual Basic e ao usá-la em seu programa será criada uma instância desta classe com os eventos que serão usados para a impressão.
O objeto PrintDocument dispara quatro eventos chaves básicos:
Depois que você criou um objeto PrintDocument e definiu os manipuladores de eventos você pode fazer 3 coisas com ele:
Nota: O controle PrintPreviewControl exibe uma janela de visualização da impressão com a diferença que ele fica no seu formulário e não apresenta os mesmos botões do PrintPreviewDialog mas possui métodos que permitem simular o mesmo comportamento.
A vantagem em usar o PrintDocument para gerar os seus relatórios é que você não acrescenta nenhuma componente de terceiro à sua aplicação facilitando a distribuição. Outra opção seria usar o Crystal Reports que seria indicado para relatórios mais complexos e com gráficos.
Em nosso exemplo vou gerar dois relatórios básicos :
A partir do exemplo destes dois relatórios será mais fácil gerar os demais relatórios.
Antes de iniciar a geração dos relatórios vamos lembra que criamos um módulo no projeto de nome Geral.vb com o seguinte código:
Module Geral
'variaveis
e métodos publicos (visiveis em todo o projeto) 'variaveis
publicas usadas pelos relatorios Public Function
CifraDecifraSenha(Text As String) As String
For i = 1 To Len(Text) 'obtem
o caminho da imagem no relatorio
If caminhoImagem.IndexOf("\bin\Debug") Then
caminhoImagem = caminhoImagem & "\Imagens\" End Function End Module |
Neste módulo estamos definindo as variáveis globais que serão usadas nos relatórios do sistema :
'variaveis publicas usadas
pelos relatorios
Public RelatorioTitulo As String
Public objPrintPreview As PrintPreviewDialog
Public linhasPorPagina As Integer
Public linhaAtual As Integer
Public posicaoDaLinha As Integer
Public paginaAtual As Integer = 1
Estamos definindo também a função GerCaminhoImagem() que obtém uma imagem a partir da pasta Imagens que devermos criar em nosso projeto e nela colocar a imagem que será usada em nossos relatórios:
'obtem o caminho da imagem no
relatorio
Public Function GetCaminhoImagem()
As String
Dim root As String = Environment.GetFolderPath(0)
Dim caminhoImagem As String =
Application.StartupPath
If caminhoImagem.IndexOf("\bin\Debug") Then
caminhoImagem
= caminhoImagem.Replace("\bin\Debug", "")
ElseIf caminhoImagem.IndexOf("\bin\Release")
Then
caminhoImagem
= caminhoImagem.Replace("\bin\Release", "")
End If
caminhoImagem = caminhoImagem & "\Imagens\"
Return caminhoImagem
End Function
1- Gerando o relatório dos filmes cadastrados no sistema
A partir do formulário frmMenuAdmin (que definimos na aula 15) onde temos o menu Relatórios, temos duas opções no menu : Filmes e Clientes.
Na opção Filmes o seguinte código do evento Click do controle ToolStipMenuItem:
Private Sub
RelatoriosFilmesToolStripMenuItem_Click(sender As Object, e As EventArgs)
Handles RelatoriosFilmesToolStripMenuItem.Click 'define o titulo do relatorio RelatorioTitulo = "Relação de Filmes - " 'define os objetos printdocument e os eventos associados Dim pd As Printing.PrintDocument = New Printing.PrintDocument()
'IMPORTANTE - definimos 3 eventos
para tratar a impressão : PringPage, BeginPrint e EndPrint.
'define o objeto para visualizar a impressao |
No código acima estamos definindo os manipuladores de evento e a seguir vamos definir o código em cada um deles. Vemos abaixo as rotinas Begin_Print e End_Print que neste exemplo praticamente não possui tarefas a realizar:
'inicia aimpressão Private Sub Begin_Print(ByVal sender As Object, ByVal e As Printing.PrintEventArgs) paginaAtual = 1 End Sub 'Encerra a conexÆo |
O evento PrintPage() é que realiza todo o trabalho de impressão como podemos notar.
Nele estamos definindo:
Private Sub pdRelatorios_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) 'Variaveis das linhas Dim LinhasPorPagina As Single = 0 Dim PosicaoDaLinha As Single = 0 Dim LinhaAtual As Integer Dim deslocamentoVertical As Integer = 250 'define as variáveis para armazenar os valores de um filme Dim filmeid As String = "" Dim titulo As String = "" Dim nomeDiretor As String = "" Dim nomeProdutor As String = "" Dim duracao As String = "" Dim descricao As String = "" Dim nomeCategoria As String = "" Dim anoLancamento As String = "" 'Variaveis das margens Dim MargemEsq As Single = e.MarginBounds.Left Dim MargemSuperior As Single = e.MarginBounds.Top + 100 Dim MargemDireita As Single = e.MarginBounds.Right Dim MargemInferior As Single = e.MarginBounds.Bottom Dim CanetaDaImpressora As Pen = New Pen(Color.Black, 1) 'Variaveis 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 fontes FonteNegrito = New Font("Arial", 9, FontStyle.Bold) FonteTitulo = New Font("Arial", 15, FontStyle.Bold) FonteSubTitulo = New Font("Arial", 12, FontStyle.Bold) FonteRodape = New Font("Arial", 8) FonteNormal = New Font("Arial", 10) 'define valores para linha atual e para linha da impressao LinhaAtual = 0 Dim li = 0 'Cabecalho e.Graphics.DrawLine(CanetaDaImpressora, MargemEsq, 60, MargemDireita, 60) e.Graphics.DrawLine(CanetaDaImpressora, MargemEsq, 160, MargemDireita, 160) 'nome da empresa e.Graphics.DrawString(My.Settings.Empresa, FonteTitulo, Brushes.Blue, MargemEsq + 250, 80, New StringFormat()) 'Imagem e.Graphics.DrawImage(Image.FromFile(GetCaminhoImagem() & "maco10.gif"), 100, 68) e.Graphics.DrawString(RelatorioTitulo & System.DateTime.Today, FonteSubTitulo, Brushes.Black, MargemEsq + 250, 110, New StringFormat()) 'define o no de linhas por paginas LinhasPorPagina = CInt(e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9) 'cria um contexto Dim ctxCiaFilmes = New CiaFilmesEntities() Dim registros As Integer = ctxCiaFilmes.Filmes.Count 'realiza uma consulta usando LINQ para obter os dados dos filmes Dim filmes = (From _film In ctxCiaFilmes.Filmes Order By _film.FilmeId Select New With {_film.FilmeId, _film.Titulo, .nomeDiretor = _film.Diretor.Nome, .nomeProdutor = _film.Produtor.Nome, _film.Duracao, _film.Descricao, .nomeCategoria = _film.Categorias.Nome, _film.AnoLancamento}).ToList 'inicia a impressao PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) 'Aqui sao lidos os dados While (LinhaAtual < LinhasPorPagina AndAlso registros > li) 'obtem os valores da consulta LINQ filmeid = filmes(li).FilmeId titulo = filmes(li).Titulo nomeDiretor = filmes(li).nomeDiretor nomeProdutor = filmes(li).nomeProdutor duracao = filmes(li).Duracao descricao = filmes(li).Descricao nomeCategoria = filmes(li).nomeCategoria anoLancamento = filmes(li).AnoLancamento PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) 'impressão dos dados e.Graphics.DrawString("Código : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha) e.Graphics.DrawString(filmeid, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha) e.Graphics.DrawString("Titulo : ", FonteNormal, Brushes.Black, MargemEsq + 200, PosicaoDaLinha) e.Graphics.DrawString(titulo, FonteNormal, Brushes.Black, MargemEsq + 250, PosicaoDaLinha) e.Graphics.DrawString("Diretor : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 20) e.Graphics.DrawString(nomeDiretor, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 20) e.Graphics.DrawString("Produtor : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 40) e.Graphics.DrawString(nomeProdutor, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 40) e.Graphics.DrawString("Duracao : ", FonteNormal, Brushes.Black, MargemEsq + 300, PosicaoDaLinha + 40) e.Graphics.DrawString(duracao, FonteNormal, Brushes.Black, MargemEsq + 390, PosicaoDaLinha + 40) e.Graphics.DrawString("Descricao : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 60) e.Graphics.DrawString(descricao, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 60) e.Graphics.DrawString("Categoria : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 80) e.Graphics.DrawString(nomeCategoria, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 80) e.Graphics.DrawString("Ano Lançamento : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 100) e.Graphics.DrawString(anoLancamento, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 100) ''verifica se imprime um ou todos 'If chkImprimirCliente.Checked = True Then ' LinhaAtual += 1 'Else LinhaAtual += 8 'End If li += 1 End While 'Rodape e.Graphics.DrawLine(CanetaDaImpressora, MargemEsq, MargemInferior, MargemDireita, MargemInferior) e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsq, MargemInferior, New StringFormat()) LinhaAtual += CInt(FonteNormal.GetHeight(e.Graphics)) LinhaAtual += 1 e.Graphics.DrawString("Pagina : " & paginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior, New StringFormat()) 'Incrementa o numero da pagina paginaAtual += 1 'verifica se continua imprimindo If (LinhaAtual > LinhasPorPagina) Then e.HasMorePages = True Else e.HasMorePages = False End If End Sub |
Os dados são obtidos através da criação de um contexto ctxCiaFilmes a partir do Entity Data Model e da realização de uma consulta LINQ onde obtemos os dados dos filmes:
'cria um contexto Dim ctxCiaFilmes = New CiaFilmesEntities() Dim registros As Integer = ctxCiaFilmes.Filmes.Count
'realiza uma consulta usando LINQ para obter os dados dos filmes Dim filmes = (From _film In ctxCiaFilmes.Filmes Order By _film.FilmeId Select New With {_film.FilmeId, _film.Titulo, .nomeDiretor = _film.Diretor.Nome, .nomeProdutor = _film.Produtor.Nome, _film.Duracao, _film.Descricao, .nomeCategoria = _film.Categorias.Nome, _film.AnoLancamento}).ToList
A seguir iniciamos um laço While onde atribuímos os valores obtidos na consulta acima às variáveis que representam cada campo da tabela Filmes:
'Aqui sao lidos os dados
While (LinhaAtual < LinhasPorPagina AndAlso registros > li)
'obtem os valores da consulta LINQ
filmeid = filmes(li).FilmeId
titulo = filmes(li).Titulo
nomeDiretor = filmes(li).nomeDiretor
nomeProdutor = filmes(li).nomeProdutor
duracao = filmes(li).Duracao
descricao = filmes(li).Descricao
nomeCategoria = filmes(li).nomeCategoria
anoLancamento = filmes(li).AnoLancamento
Depois realizamos a impressão usando os métodos DrawString() onde montamos o relatório manualmente usando as variáveis para controlar a Margem e posição da linha:
impressão dos dados
e.Graphics.DrawString("Código : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha)
e.Graphics.DrawString(filmeid, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha)
e.Graphics.DrawString("Titulo : ", FonteNormal, Brushes.Black, MargemEsq + 200, PosicaoDaLinha)
e.Graphics.DrawString(titulo, FonteNormal, Brushes.Black, MargemEsq + 250, PosicaoDaLinha)
e.Graphics.DrawString("Diretor : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 20)
e.Graphics.DrawString(nomeDiretor, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 20)
e.Graphics.DrawString("Produtor : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 40)
e.Graphics.DrawString(nomeProdutor, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 40)
e.Graphics.DrawString("Duracao : ", FonteNormal, Brushes.Black, MargemEsq + 300, PosicaoDaLinha + 40)
e.Graphics.DrawString(duracao, FonteNormal, Brushes.Black, MargemEsq + 390, PosicaoDaLinha + 40)
e.Graphics.DrawString("Descricao : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 60)
e.Graphics.DrawString(descricao, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 60)
e.Graphics.DrawString("Categoria : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 80)
e.Graphics.DrawString(nomeCategoria, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 80)
e.Graphics.DrawString("Ano Lançamento : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 100)
e.Graphics.DrawString(anoLancamento, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 100)
O resultado final é visto abaixo:
2- Gerando o relatório dos clientes cadastrados no sistema
A geração do relatório dos clientes cadastrados segue o mesmo raciocínio e fluxo do relatório anterior e dessa forma eu só vou colocar o código sem comentar novamente.
Na opção Clientes o seguinte código do evento Click do controle ToolStipMenuItem:
Private Sub RelatoriosClientesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RelatoriosClientesToolStripMenuItem.Click 'define o titulo do relatorio RelatorioTitulo = "Relação de Clientes - " 'define os objetos printdocument e os eventos associados Dim pd As Printing.PrintDocument = New Printing.PrintDocument() 'IMPORTANTE - definimos 3 eventos para tratar a impressão : PringPage, BeginPrint e EndPrint. AddHandler pd.PrintPage, New Printing.PrintPageEventHandler(AddressOf Me.pdRelatorios_PrintPage2) AddHandler pd.BeginPrint, New Printing.PrintEventHandler(AddressOf Me.Begin_Print2) AddHandler pd.EndPrint, New Printing.PrintEventHandler(AddressOf Me.End_Print2) 'define o objeto para visualizar a impressao Dim objPrintPreview As New PrintPreviewDialog Try 'define o formulário como maximizado e com Zoom With objPrintPreview .Document = pd .WindowState = FormWindowState.Normal .PrintPreviewControl.Zoom = 1 .Text = "Relação de Clientes" .ShowDialog() End With Catch ex As Exception MessageBox.Show(ex.ToString()) End Try End Sub |
O código da para os eventos Begin_Print2 e End_Print2 é vista a seguir:
'A conexão pode ser aberta aqui Private Sub Begin_Print2(ByVal sender As Object, ByVal e As Printing.PrintEventArgs) paginaAtual = 1 End Sub 'Encerra a conexão Private Sub End_Print2(ByVal sender As Object, ByVal byvale As Printing.PrintEventArgs) End Sub |
O evento PrintPages() é que realiza todo o trabalho de impressão como podemos notar novamente:
Nele estamos definindo:
Private Sub pdRelatorios_PrintPage2(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) 'Variaveis das linhas Dim LinhasPorPagina As Single = 0 Dim PosicaoDaLinha As Single = 0 Dim LinhaAtual As Integer Dim deslocamentoVertical As Integer = 250 'define as variáveis para armazenar os valores de um filme Dim clienteid As String = "" Dim nome As String = "" Dim sobrenome As String = "" Dim endereco As String = "" Dim cidade As String = "" Dim estado As String = "" Dim cep As String = "" Dim telefone As String = "" Dim email As String = "" Dim nascimento As String = "" Dim numeroCartaoCredito As String = "" Dim validadCartaoCredito As String = "" Dim codigoSegurancaCartao As String = "" Dim login As String = "" Dim senha As String = "" 'Variaveis das margens Dim MargemEsq As Single = e.MarginBounds.Left Dim MargemSuperior As Single = e.MarginBounds.Top + 100 Dim MargemDireita As Single = e.MarginBounds.Right Dim MargemInferior As Single = e.MarginBounds.Bottom Dim CanetaDaImpressora As Pen = New Pen(Color.Black, 1) 'Variaveis 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 fontes FonteNegrito = New Font("Arial", 9, FontStyle.Bold) FonteTitulo = New Font("Arial", 15, FontStyle.Bold) FonteSubTitulo = New Font("Arial", 12, FontStyle.Bold) FonteRodape = New Font("Arial", 8) FonteNormal = New Font("Arial", 10) 'define valores para linha atual e para linha da impressao LinhaAtual = 0 Dim li = 0 'Cabecalho e.Graphics.DrawLine(CanetaDaImpressora, MargemEsq, 60, MargemDireita, 60) e.Graphics.DrawLine(CanetaDaImpressora, MargemEsq, 160, MargemDireita, 160) 'nome da empresa e.Graphics.DrawString(My.Settings.Empresa, FonteTitulo, Brushes.Blue, MargemEsq + 250, 80, New StringFormat()) 'Imagem e.Graphics.DrawImage(Image.FromFile(GetCaminhoImagem() & "maco10.gif"), 100, 68) e.Graphics.DrawString(RelatorioTitulo & System.DateTime.Today, FonteSubTitulo, Brushes.Black, MargemEsq + 250, 110, New StringFormat()) 'define o no de linhas por paginas LinhasPorPagina = CInt(e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9) 'cria um contexto Dim ctxCiaFilmes = New CiaFilmesEntities() Dim registros As Integer = ctxCiaFilmes.Clientes.Count 'realiza uma consulta usando LINQ para obter os dados dos filmes Dim clientes = (From _cli In ctxCiaFilmes.Clientes Order By _cli.ClienteId Select New With {_cli.ClienteId, _cli.Nome, _cli.Sobrenome, _cli.Endereco, _cli.Cidade, _cli.Estado, _cli.Cep, _cli.Telefone, _cli.Email, _cli.Nascimento, _cli.NumeroCartaoCredito, _cli.ValidadeCartao, _cli.CodigoSegurancaCartao, _cli.Login, _cli.Senha}).ToList 'inicia a impressao PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) 'Aqui sao lidos os dados While (LinhaAtual < LinhasPorPagina AndAlso registros > li) 'obtem os valores da consulta LINQ clienteid = clientes(li).ClienteId nome = clientes(li).Nome sobrenome = clientes(li).Sobrenome endereco = clientes(li).Endereco cidade = clientes(li).Cidade estado = clientes(li).Estado cep = clientes(li).Cep telefone = clientes(li).Telefone email = clientes(li).Email nascimento = clientes(li).Nascimento numeroCartaoCredito = clientes(li).NumeroCartaoCredito validadCartaoCredito = clientes(li).ValidadeCartao codigoSegurancaCartao = clientes(li).CodigoSegurancaCartao login = clientes(li).Login senha = clientes(li).Senha PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) 'impressão dos dados e.Graphics.DrawString("Código : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha) e.Graphics.DrawString(clienteid, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha) e.Graphics.DrawString("Nome : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 20) e.Graphics.DrawString(nome, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 20) e.Graphics.DrawString("Sobrenome : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 40) e.Graphics.DrawString(sobrenome, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 40) e.Graphics.DrawString("Endereco : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 60) e.Graphics.DrawString(endereco, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 60) e.Graphics.DrawString("Cidade : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 80) e.Graphics.DrawString(cidade, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 80) e.Graphics.DrawString("Estado : ", FonteNormal, Brushes.Black, MargemEsq + 350, PosicaoDaLinha + 80) e.Graphics.DrawString(estado, FonteNormal, Brushes.Black, MargemEsq + 450, PosicaoDaLinha + 80) e.Graphics.DrawString("Cep : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 100) e.Graphics.DrawString(cep, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 100) e.Graphics.DrawString("Telefone : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 120) e.Graphics.DrawString(telefone, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 120) e.Graphics.DrawString("Email : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 140) e.Graphics.DrawString(email, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 140) e.Graphics.DrawString("Data de Nascimento : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 160) e.Graphics.DrawString(nascimento, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 160) e.Graphics.DrawString("No. Cartão Crédito : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 180) e.Graphics.DrawString(numeroCartaoCredito, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 180) e.Graphics.DrawString("Valid. do Cartão : ", FonteNormal, Brushes.Black, MargemEsq + 280, PosicaoDaLinha + 180) e.Graphics.DrawString(validadCartaoCredito, FonteNormal, Brushes.Black, MargemEsq + 400, PosicaoDaLinha + 180) e.Graphics.DrawString("Cód. de Segurança : ", FonteNormal, Brushes.Black, MargemEsq + 470, PosicaoDaLinha + 180) e.Graphics.DrawString(codigoSegurancaCartao, FonteNormal, Brushes.Black, MargemEsq + 610, PosicaoDaLinha + 180) e.Graphics.DrawString("Login : ", FonteNormal, Brushes.Black, MargemEsq, PosicaoDaLinha + 200) e.Graphics.DrawString(login, FonteNormal, Brushes.Black, MargemEsq + 150, PosicaoDaLinha + 200) e.Graphics.DrawString("Senha : ", FonteNormal, Brushes.Black, MargemEsq + 350, PosicaoDaLinha + 200) e.Graphics.DrawString(senha, FonteNormal, Brushes.Black, MargemEsq + 450, PosicaoDaLinha + 200) LinhaAtual += 15 li += 1 End While 'Rodape e.Graphics.DrawLine(CanetaDaImpressora, MargemEsq, MargemInferior, MargemDireita, MargemInferior) e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsq, MargemInferior, New StringFormat()) LinhaAtual += CInt(FonteNormal.GetHeight(e.Graphics)) LinhaAtual += 1 e.Graphics.DrawString("Pagina : " & paginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior, New StringFormat()) 'Incrementa o numero da pagina paginaAtual += 1 'verifica se continua imprimindo If (LinhaAtual > LinhasPorPagina) Then e.HasMorePages = True Else e.HasMorePages = False End If End Sub |
Abaixo vemos o relatório sendo exibido:
Na próxima, e última aula, iremos concluir o módulo de administração criando o pacote de distribuição.
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#