none
Fazer um relatorio e impirmir dados de 2 DataGridView VB.net 2008 RRS feed

  • Pergunta

  • 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


    problemas com o windows xp sp2

    sábado, 11 de janeiro de 2014 19:16