1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Total num printdocument em vb. net

Discussão em 'Programação' iniciada por Cerzedelo, 3 de Maio de 2012. (Respostas: 3; Visualizações: 1680)

  1. Cerzedelo

    Cerzedelo Power Member

    A minha dúvida é a seguinte:

    Desenvolvi uma aplicação em VB .net com ligação a uma base de dados SqlCe.

    Para poder imprimir os relatórios com os registos das tabelas da base de dados, recorri ao método do printdocument. Os relatórios estão ok e a impressão também ok.

    O problema reside no facto de pretender que me apareça, numa coluna de nome preço, o soma (o total) do preço de todos os registos.

    Código (vb.net):


    linhasporpagina = CInt(e.MarginBounds.Height / fontenormal.GetHeight(e.Graphics) - 10)
    While (linhaactual < linhasporpagina AndAlso reader.Read())
    id = reader.GetInt32(0)
    nome = reader.GetString(1)
    descricao = reader.GetString(2)
    data = reader.GetDateTime(3)
    preco = Format(reader.GetValue(4), "#.##")
    posicaodalinha = margemsuperior + (linhaactual * fontenormal.GetHeight(e.Graphics))
    e.Graphics.DrawString(id.ToString, fontenormal, Brushes.Black, margemesquerda + 10, posicaodalinha, New StringFormat)
    e.Graphics.DrawString(nome.ToString, fontenormal, Brushes.Black, margemesquerda + 50, posicaodalinha, New StringFormat)
    e.Graphics.DrawString(descricao.ToString, fontenormal, Brushes.Black, margemesquerda + 350, posicaodalinha, New StringFormat)
    e.Graphics.DrawString(data.Date, fontenormal, Brushes.Black, margemesquerda + 730, posicaodalinha, New StringFormat)
    e.Graphics.DrawString(preco.ToString, fontenormal, Brushes.Black, margemesquerda + 920, posicaodalinha, drawformat)
    linhaactual += 1
    total += preco
    End While
    e.Graphics.DrawString(" Total : " & total, fontenormal, Brushes.Black, margemesquerda + 924, posicaodalinha + fontenormal.GetHeight(e.Graphics), drawformat)
    e.Graphics.DrawLine(caneta, margemesquerda, margeminferior, margemdireita, margeminferior)
    e.Graphics.DrawString(System.DateTime.Now.ToString, fonterodape, Brushes.Black, margemesquerda, margeminferior, New StringFormat)
    linhaactual += CInt(fontenormal.GetHeight(e.Graphics))
    linhaactual += 1
    e.Graphics.DrawString("Página: " & paginaactual, fonterodape, Brushes.Black, margemdireita - 50, margeminferior, New StringFormat())
    paginaactual += 1
    If (linhaactual > linhasporpagina) Then
    e.HasMorePages = True
    Else
    e.HasMorePages = False
    End If

    Até ao momento o que consegui, foi que o programa me apresentasse o total por cada uma das páginas, mas o que pretendo é que na última página, me apresente o total do preço (todos os registos) de todas as páginas, i.e. o grand total.
    Desde já agradeço, ideias para eventuais soluções para o problema. Obg.
     
  2. Cerzedelo

    Cerzedelo Power Member

    Já consegui encontrar a solução, que passa por no evento do endprint, passar o valor do total da página para depois ser somado ao valor do total da página seguinte.
    Podem encerrar o tópico.
     
  3. jags17

    jags17 Power Member

    Boas Cerzedelo,

    Como se geram os teus relatórios? Por código? Segundo uma query à tua escolha?

    Se sim, podes mostrar-me o código porque eu nem relatórios consigo gerar....já agora que ferramenta estas a usar para os relatórios?

    Obrigado
    Cumprimentos
     
  4. Cerzedelo

    Cerzedelo Power Member

    Exactamente os relatórios são feitos por código, recorrendo ao método Printdocument do VB, e sim, imprimindo os dados que resultam da query que seleccionar.
    É um processo mais trabalhoso, mas você tem a total liberdade de criar o relatório de acordo com o que pretende e não tem que recorrer a software de terceiros, nem preocupar-se que o mesmo corra no computador cliente, nem andar com ficheiros e dll´s de um lado para outro.
    Os elemtos base para editar a impressão são os comandos: e.graphics.drawline (que desenha uma linha), e.graphics.drawimage (desenha uma imagem) e e.graphics.drawstring (que desenha uma string).
    O que pode levantar alguma questão, é colocar os dados no sitio certo de forma quando for a imprimir apareça no papel como pretende, para isso recorre-se às cordenadas x,y, mas falo por experiência própria, é uma questão de hábito, e se pegar num exemplo e testando a alterar as coordenadas vai verificar que em pouco tempo consegue dominar a técnica
    Veja o exemplo em http://www.macoratti.net/08/04/vbn8_imp.htm, foi neste exemplo em que me inspirei para construir o meu relatório, é muito bom, e até pode baixá-lo e testar.
     

Partilhar esta Página