Tutorial C# – Imprimir Conteúdo da DataGridView

Este tutorial vem da necessidade que eu tive em imprimir o conteúdo de uma DataGridView num programa que desenvolvi. Após muitas horas, alguns dias, muitos exemplos (que não funcionaram e muito complicados), encontrei uma solução que funciona muito bem, pelo menos resolveu o meu “problema”. Como penso que devemos partilhar conhecimentos, decidi elaborar este tutorial.

Objectivo: Apresentar dados numa DataGridView obtidos através de dados gravados numa base de dados.
1º – Crie um novo projecto

csharp001

2º – Adicione um botão (botão imprimir) e uma dataGridView

csharp002

Nota: é necessário indicar que vai usar uma base de dados OleDb (Access), para isso tem de adicionar o seguinte código que está em destaque.

csharp003

3º – No Form Load vamos introduzir o código que irá trazer a informação dos dados na base de dados.

csharp004

Podem verificar que foi introduzido o “try” e “catch”.
Para quem não está familiarizado com este código, uma pequena explicação que posso dar é que serve para verificar se existe algum erro na ligação (try), e se encontrar, mostra esse erro numa MessageBox (catch).
Nesta altura já podem verificar que ao iniciar o programa, já aparecem dados na DataGridView.

csharp005

4º – No botão imprimir irá introduzir o seguinte código

csharp010

Como podem verificar, existe uma parte do código sublinhada, essa parte refere-se a uma classe que vamos criar mais à frente. Certamente este código seria somente introduzido quando essa mesma classe estivesse criada, mas assim evitamos andar a “saltar” de form para form.
5º – Agora vamos criar um novo Form que será das “opções de impressão”.

csharp006

Este novo Form vai permitir que possamos escolher quais os campos que queremos imprimir, como também escrever qual o título da impressão.
É necessário inserir os seguintes Items:

- 2 Botões
- 1 CheckedListBox
- 1 TextBox

csharp007

6º – Os botões “OK” e “Cancel” servem exclusivamente para abrir “caixas de diálogo”

csharp008

O restante código da form “printOptions” é o seguinte:

csharp009

7º – Agora vamos criar uma nova classe e atribuir o nome printDGV.

csharp011

csharp012

Como o código da classe é extenso, colocarei o mesmo aqui, e os comentários estão no próprio código.

csharp013

csharp014

csharp015

csharp016

Continua na próxima página….

Páginas: 1 2

  
     Pin It  

Arquivado na categoria: CSharp, Tutoriais


36 Comentários

  1. Boas, finalmente voltaram os tutoriais de C# :)

    Em relação a este tutorial, queria deixar-te uma sugestão que pretendo que seja construtiva.Em vez de continuares a usar o tradicional windows forms, penso que poderias começar a usar WPF (Windows Presentation Foundation) onde algumas tarefas como a impressão se encontram actualmente facilitadas.Aproveito para deixar um link para uns videos, caso alguem queira aprender.

    http://windowsclient.net/learn/videos_wpf.aspx

    Um abraço

  2. Bom Post, numa linguagem de programação que diariamente encontro durante o horário de trabalho no meu PC …

    Pessoalmente, não costumo usar o DataGridView …. até agora … mas como nunca se sabe o futuro …. pode vir a ser util …
    Encontro-me mais virado para o Spread ou controlos da Infragistics. Mas que são ambos componentes pagos …

    Obrigado!

    Abraço,
    Paulo Silva

  3. Bom topico para quem esta iniciar c#

  4. Muito bom post. Ainda bem que voltaram aos tutoriais de C#. :) Fico à espera do tutorial sobre WPF.

    Abraço
    MA

  5. Finally!!! Os tutoriais de programação. Mesmo que sejam dicas que eu já conheça leio todos do principio ao fim :D

    Muito obrigado.

    SUGESTÃO: e posts de Java não? Desde o básico, passando pelos Web-services, criptografia, geração e manuseamento pdf’s e outros files, IDE’s (por exemplo o Eclipse e o Netbeans), Web-apps, hibernate e outros tipos de acesso e edição de BD’s, etc.. só uma sugestão :D

    • Também concordo contigo acho que devia de haver também tutoriais de Java, senão qualquer dia começo a pensar que isto é so Micro$oft :P

      • Alguém se oferece para semanalmente fazer tutoriais em java?

        • Pah.. semanalmente não digo, mas ocasionalmente, poderei fazer qualquer coisa apesar da minha experiencia nula a escrever artigos de qualquer especie. Eu so sei escrever mails :D esses sao as dezenas todos os dias :D

          • Não há problema, se for preciso depois dá-se uns retoques… Podes então fazer um de java?

          • Então mas onde costumam elaborar os tutoriais (editor ou ide)? Fazem em html? Caso ponha imagens têm preferencia pelo local onde as alojo?

            Para começar uma introdução ao Java serve não? Quem contacto quando tiver a “coisa” pronta? :)

          • Podes enviar para mim…Claro que ficarás com os Créditos :)

            Abraço

          • Responde às minhas outras questões please. E já agora, onde posso mais tarde ver o teu contacto para te enviar depois de feito?

        • Eu estou a aprender java e já tenho um amplo conhecimento com C/C++. Posso escrever alguns tutos já que tenho algum tempo livre. Não tenho problema em me juntar com mais pessoal e dividir o trabalho. Se necessário enviem mail.

  6. Boas, bom tutorial, a impressão em C# é algo que em tempos também já me custou muitas horas de pesquisa e algumas dores de cabeça.

    Aproveito para deixar por aqui uma questão que talvez me possam ajudar a resolver.

    Há pouco tempo desenvolvi uma pequena aplicação em C# + MSSQL no VS2008, um gestor de despesas. Essa aplicação encontra-se instalada no meu Portátil e sempre que tanto eu como a minha namorada queremos adicionar uma despesa temos de utilizar o meu PC. Recentemente a minha namorada adquiriu também um portátil e perguntou-me se seria possível instalar a aplicação no portátil dela para não ter utilizar o meu sempre que quisesse adicionar uma despesa. Eu expliquei-lhe que isso traria o problema de as despesas que fossem adicionadas no meu PC não apareceriam no dela e vice-versa dado as bases de dados estarem separadas. E que caso se usassem bases de dados separadas algumas funcionalidades que implementei perderiam o objectivo (Gráficos Mensais e Anuais, Estatísticas, etc).

    O que me traz a questão:

    Existe alguma hipótese de sincronizar a informação entre as bases de dados, (respeitando índices), entre os PCs?

    Agradeço desde já qualquer sugestão.

    Sem mais,

    José Dias

    • Podes fazer assim:
      Tinhas no servidor o Sqlserver Express e na aplicação em vez de te ligares directamente ao SQL usavas uma base de dados de tipo ficheiro, neste caso SQLCE, que te permite usufruir da Microsoft Sync Framework. Assim podes sincronizar facilmente os clientes com o servidor e até funcionar no modo “desconectado”. Podiam usar os portáteis durante o dia e á noite faziam o sincronismo.

      abraço

  7. Boas.
    Está muito boa esta dica, apesar do código gigante, principalmente
    gostei de ver de volta os tutoriais da minha linguagem preferida.

    Uma questão, o que aconteceu aos tutoriais de ASP.NET? Estavam bastante bons e ia mostrar como fazer um clube de video. Não vão voltar?

    Abraço.

  8. Boa tarde.

    Gostaria de sugerir, porque acho uma ferramenta muito importante para quem trabalha em c sharp, a utilização do LINQ.

    O LINK está disponivel apartir da versão 3.5 da framework e é uma excelente ferramenta para quem trabalha com c sharp.

    Façam um artigo sobre LINK, se precisarem da minha ajuda estou ao dispor

  9. Faço uma correcção quando disse LINK queria dizer LINQ

  10. Boas,
    Antes de mais gostava de dar os parabens pelo vosso trabalho.

    Eu estava a desenvolver uma pequena aplicação para gestao de umas coisas, e seguindo um pouco as vossas ideias estou a desenvolver da msm forma atraves de datagrids. Mas o problema esta em imprimir. nao estou a conseguir por a funcionar este codigo, da me erro.. servidor rpc nao esta disponivel.. será que algem me pode ajudar..

    Desde já agradeço as vossas respostas..

  11. Boas,
    Estou a fazer uma aplicação em c# com SQL e este tutorial deu bastante jeito.
    So tenho um pequeno problema!
    E que a altura das linhas da datagridview para mim so pequenas tinha de aumentar! como faço isso????

    Abraço Renas

  12. Diversos exemplos e documentação sobre como enviar e-mails em .NET no website: http://www.systemnetmail.com/

  13. Boa tarde,
    Sou iniciante em C#, gostei muinto de sua materia, mas estou com uma duvida, onde no codigo do printDGV esta buscando a tabela que contem os dados para preencher a list que colocamos, pois ja tem uma grid que tem os dados ai quero passar estes dados para o seu conteudo e nao to conseguindo, nao da erro nenhum no codigo mas nao vejo as opcoes para imprimir.

    atenciosamente

    Ruberval F. Lucas

  14. Boa tarde, sou eu novamente, eu consegui descobrir onde eu estava errando e ja esta imprimindo, so uma coisa, eu tenho um campo que formatei dentro da grid como moeda e no relatorio nao saiu como moeda, ok. como faria isso?

  15. Boa tarde, eu estou a seguir este exemplo, mas tenho um problema ao passar os campos para a listcheckbox porque eu uso SQL Server, e não estou a conseguir ir buscar o nome dos campos, alguem pode dar uma ajuda ?

  16. João Antônio Cabral

    Gostaria de saber se há uma maneira de imprimir o conteúdo de duas dataGridView em um mesmo documento. Uma após a outra.

    Agradeço desde já.

  17. Olá gostei muito deste exemplo agradeço pela ajuda deste conteudo me ajudou muito.Sou iniciante em .Net obrigado.

  18. Boa noite
    Este tutoriais são muito bons e ajudam bastante.
    Tenho uma pequena questão a colocar, por exemplo, se a tabela tiver um maior numero de campos o conteúdo das células poderá não caber. Neste caso penso que a melhor solução seria fazer uma rotação da pagina onde o tabela será impressa. Como é que poderia fazer isto?

    Cumps

  19. Exemplo excelente para aprendizado muito bom mesmo. Esta de parabéns.
    Muito grato.

  20. Muito bom! era o que estava precisando. Porém preciso que o valor gerado no relatório seja o conteudo filtrado no Grind. Onde consigo alterar no código para que ele faça isto? O grind meu já possui um filtro mas atualmente esta gerando o relatório com a tabela toda sem filtrar.

  21. ola.
    ja li tds os comentarios e nao consegui ver nenhuma resposta sobre estas duvida.
    na hr de imprimir nao aparece td o conteudo na celula pq tem mts caracteres e tb n vejo se é possivel mudar a pagina (retrato ou paisagem).
    agradeço se puderem me esclarecer.

Deixe o seu comentário

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste site ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. O autor deste site reserva-se, desde já, o direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação do seu autor (nome completo e endereço válido de email) também poderão ser excluídos.