GERAR UM RELATORIO E IMPRIMIR DE UM DATAGRIDVIEW
Galera estou com um problema. Tenho dois datagridview e gostaria que de colocar todos os dados em um relatorio e depois imprimir eles. O Problema é que o relatorio nao esta ficando alinhado e quando na primeira coluna a quantidade de caracteres muda de 1 para 2, a proxima coluna também desloca um caractere para o lado. Gostaria que isso nao acontecesse. Além disso eu gostaria que fossem listadas as paginas relacionadas a quantidade de dados, mas no meu caso, ele acaba copiando a primeira pagina e repede varias vezes.
Vou colocar o codigo aqui, obrigado pessoal.
[ô]Variaveis das linhas
Dim LinhasPorPagina As Single = 0
Dim PosicaoDaLinha As Single = 0
Dim LinhaAtual As Integer = 0
[ô]Variaveis das margens
Dim MargemEsquerda 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
Dim LogText As String = String.Empty
[ô]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[Ô], 9)
Dim PosicaoLinha As Integer = 55
[ô]define valores para linha atual e para linha da impressao
LinhaAtual = 0
Dim L As Integer = 0
[ô]Cabecalho
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 60, MargemDireita, 60)
e.Graphics.DrawString([Ô]ABC[Ô], FonteSubTitulo, Brushes.Black, MargemEsquerda + 150, 80, New StringFormat())
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 160, MargemDireita, 160)
[ô]Campos a serem impressos
e.Graphics.DrawString([Ô]Nó[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 20, 170, New StringFormat())
e.Graphics.DrawString([Ô]Vazão(L/s)[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 110, 170, New StringFormat())
e.Graphics.DrawString([Ô]Cota(m)[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 200, 170, New StringFormat())
e.Graphics.DrawString([Ô]Pressão Estática(mH2O)[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 300, 170, New StringFormat())
e.Graphics.DrawString([Ô]Pressão Dinâmica[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 500, 170, New StringFormat())
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 190, MargemDireita, 190)
LinhasPorPagina = CInt(e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9)
[ô]Ler datagridview
For Each dr As DataGridViewRow In FormPrincipal.DataGridView1.Rows
[ô]Por na variavel a linha toda
For i As Integer = 0 To dr.Cells.Count - 1
LogText &= dr.Cells(i).Value & [Ô] [Ô]
Next
[ô]Desenhar conteudo na página
[ô]e.Graphics.DrawString(LogText, New Font([Ô]Arial[Ô], 9), Brushes.Black, 36, PosicaoLinha)
PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))
e.Graphics.DrawString(LogText, FonteNormal, Brushes.Black, MargemEsquerda + 21, PosicaoDaLinha, New StringFormat())
LinhaAtual += 1
LogText = String.Empty
Next
[ô]Rodape
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)
e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsquerda, 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 n£mero da pagina
paginaAtual += 1
[ô]verifica se continua imprimindo
If (LinhaAtual > LinhasPorPagina) Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
Vou colocar o codigo aqui, obrigado pessoal.
[ô]Variaveis das linhas
Dim LinhasPorPagina As Single = 0
Dim PosicaoDaLinha As Single = 0
Dim LinhaAtual As Integer = 0
[ô]Variaveis das margens
Dim MargemEsquerda 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
Dim LogText As String = String.Empty
[ô]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[Ô], 9)
Dim PosicaoLinha As Integer = 55
[ô]define valores para linha atual e para linha da impressao
LinhaAtual = 0
Dim L As Integer = 0
[ô]Cabecalho
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 60, MargemDireita, 60)
e.Graphics.DrawString([Ô]ABC[Ô], FonteSubTitulo, Brushes.Black, MargemEsquerda + 150, 80, New StringFormat())
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 160, MargemDireita, 160)
[ô]Campos a serem impressos
e.Graphics.DrawString([Ô]Nó[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 20, 170, New StringFormat())
e.Graphics.DrawString([Ô]Vazão(L/s)[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 110, 170, New StringFormat())
e.Graphics.DrawString([Ô]Cota(m)[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 200, 170, New StringFormat())
e.Graphics.DrawString([Ô]Pressão Estática(mH2O)[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 300, 170, New StringFormat())
e.Graphics.DrawString([Ô]Pressão Dinâmica[Ô], FonteNegrito, Brushes.Black, MargemEsquerda + 500, 170, New StringFormat())
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, 190, MargemDireita, 190)
LinhasPorPagina = CInt(e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 9)
[ô]Ler datagridview
For Each dr As DataGridViewRow In FormPrincipal.DataGridView1.Rows
[ô]Por na variavel a linha toda
For i As Integer = 0 To dr.Cells.Count - 1
LogText &= dr.Cells(i).Value & [Ô] [Ô]
Next
[ô]Desenhar conteudo na página
[ô]e.Graphics.DrawString(LogText, New Font([Ô]Arial[Ô], 9), Brushes.Black, 36, PosicaoLinha)
PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics))
e.Graphics.DrawString(LogText, FonteNormal, Brushes.Black, MargemEsquerda + 21, PosicaoDaLinha, New StringFormat())
LinhaAtual += 1
LogText = String.Empty
Next
[ô]Rodape
e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)
e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsquerda, 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 n£mero da pagina
paginaAtual += 1
[ô]verifica se continua imprimindo
If (LinhaAtual > LinhasPorPagina) Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
Use .ToString.PadLeft ou .ToString.PadRight
para alinhar esquerda ou direita, ou utilize o crystal reports.
para alinhar esquerda ou direita, ou utilize o crystal reports.
oks a parte do alinhamento está certo agora.... e a parte do programa sempre repetir a mesma pagina varias vezes, eu gostaria que ele seguisse colocando todos os dados e nao copiasse a mesma pagina varias vezes
Valeu em
Valeu em
Se você colocar assim:
For Each dr As DataGridViewRow In FormPrincipal.DataGridView1.Rows And LinhaAtual < LinhasPorPagina
.....
Não funciona?
For Each dr As DataGridViewRow In FormPrincipal.DataGridView1.Rows And LinhaAtual < LinhasPorPagina
.....
Não funciona?
Não funciona, dá o mesmo erro =/
Tópico encerrado , respostas não são mais permitidas