Total num printdocument em vb. net

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.
 
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.
 
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
 
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.
 
Back
Topo