Tutorial C# – Imprimir Conteúdo da DataGridView
(Continuação do código da classe)
Como devem reparar o código é bastante extenso, por isso disponibilizo-o para download, e assim não têm de escrever estas linhas todas de código.
Agora que o código está todo escrito. Vamos experimentar o programa.
Ao iniciar a “Form” irão aparecer os dados que estão na base de dados.
Ao clicar no botão imprimir irá abrir o Form das opções de impressão.
Neste “Form” pode seleccionar as colunas da tabela da base de dados que quer imprimir, e escrever o título para imprimir.
Ao clicar em “OK” poderá visualizar o “print preview” .
E aqui está, acabou de imprimir o conteúdo da base de dados que pretende. Claro que poderá efectuar inúmeras alterações ao código e aos resultados que quer visualizar, mas isso já só depende de si.
O código da classe é extenso, mas se copiar a classe, o restante código é bastante simples.
Espero que tenham gostado...
Fonte: Afrasiab Cheraghi (code project)
Download: Código Imprimir DataGridView [62.72KB]
1 2
Este artigo tem mais de um ano
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
Vou levar em conta a tua sugestão 😉
Obrigado pelo teu comentário.
Abraços
Eu já programo em C# desde a .NET 1.0 mas nunca usei o WPF tenho uma dúvida quando se desenvolve uma aplicação com WPF aquilo compila o código?
Sim, compila, tal como numa aplicação em windows forms.
O próximo tutorial será sobre WPF…
Hélio
Porreiro, o WPF parece ser o caminho a seguir pela MS no futuro. Vou estar atento. Abraço
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
Bom topico para quem esta iniciar c#
Muito bom post. Ainda bem que voltaram aos tutoriais de C#. 🙂 Fico à espera do tutorial sobre WPF.
Abraço
MA
Finally!!! Os tutoriais de programação. Mesmo que sejam dicas que eu já conheça leio todos do principio ao fim 😀
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 😀
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 😛
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 😀 esses sao as dezenas todos os dias 😀
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.
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
Sincronizar com a namorada à noite? Boa!!
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.
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
Faço uma correcção quando disse LINK queria dizer LINQ
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..
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
Diversos exemplos e documentação sobre como enviar e-mails em .NET no website: http://www.systemnetmail.com/
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
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?
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 ?
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á.
Olá gostei muito deste exemplo agradeço pela ajuda deste conteudo me ajudou muito.Sou iniciante em .Net obrigado.
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
Para imprimir na Horizontal, você pode seguir o seguinte passo:
– Vai lá dentro da classe printDGV.cs
– Lá dentro terão diversos métodos, um deles é o PrintDoc_BeginPrint, dentro dele você coloca o seguinte código: printDoc.DefaultPageSetting.Landscape = true;
Dessa forma o sistema vai imprimir na horizontal e ajustar o tamanho das colunas.
Exemplo excelente para aprendizado muito bom mesmo. Esta de parabéns.
Muito grato.
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.
Toda vez que você aplica o filtro na DataGridView, os valores filtrados ficam registrados lá. É só mandar imprimir quando o filtro já estiver aplicado.
Exemplo: colocar dois botões, um para aplicar o filtro e outro para imprimir. Dentro do botão de imprimir, você chama o método printDGV.PrintDataGridView(suaDataGridView);
Desse jeito o método imprimir sempre vai pegar a DataGridView no estado atual.
Abraço
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.
Para imprimir na Horizontal, você pode seguir o seguinte passo:
– Vai lá dentro da classe printDGV.cs
– Lá dentro terão diversos métodos, um deles é o PrintDoc_BeginPrint, dentro dele você coloca o seguinte código: printDoc.DefaultPageSetting.Landscape = true;
Dessa forma o sistema vai imprimir na horizontal e ajustar o tamanho das colunas.
Fala kra blz? Vlw por disponibilizar. Mas estou com um problema, as celulas na hora da impressao ficam com uma quebra de linha tanto na parte superior quanto na inferior, o da superior eu arrumei aqui :”StrFormat.LineAlignment = StringAlignment.Near;” a celula fica com umas 3,4 quebras de linha, assim ocupando espaço. Vc sabe como arrumar? Onde eu altero?
Vlw
ola breno.
vc conseguiu resolver?
estou com o mesmo problema.
o conteudo é maior que a linha, ou seja, nao aparece toda escreita.
se vc conseguiu resolver, coloca a soluçao ai.
abraço
Ola…Uso esta sua class no sistema que eu uso aqui em casa…
Só apenas gostaria de ter as opções de impressão antes de imprimir, pra mim poder imprimir em rascunho, porque quando clica pra imprimir ele imprime direto.
Obrigado pela atenção;
Abraço.
Caraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
salvou minha vida, na verdade usei MySql mais foi facil adaptar, estou desde 15 hrs da tarde de ontem, procurando isso, o seu acho que vai funcionar, muito obrigado mesmo
gostei do artigo, mas eu queria consulta não com access, mas sim com sql server, podias fazer uma materia desta?
eu precisava duma coisa perecida mas já não há problema com este tutorial.
preciso da tua ajuda para saber que se alguem está a trabalhar com os campos que contêm datas, no print vão sair esses dados = (01-04-2013 0:00:00) os zeros eu entendo, mas problema é se eu quiser imprimir só datas e não horas, na minha base dados eu tenho o campo com dados automaticos mas estou a usar o função date() que só me torna 01-04-2013.
e depois faço um querry para juntar mais dados das outras tabelas e no c# só faço select * from querry.
ajude por favor e mais rápido possível.
Caro Danyal,
Enviei-lhe um email.
De qualquer forma, a função toShortDateString() retornará apenas a data.
Cumprimentos,
Hélio Moreira
tem razão mas eu não sei fazer alterações no datagrid:
tenho o código que tirei do tutorial assim:
// Para a coluna da TextBox
if (((Type) ColumnTypes[i]).Name == “DataGridViewTextBoxColumn” || ((Type) ColumnTypes[i]).Name == “DataGridViewLinkColumn”)
{ e.Graphics.DrawString(Cel.Value.ToString(), Cel.InheritedStyle.Font, new SolidBrush(Cel.InheritedStyle.ForeColor),new RectangleF((int)ColumnLefts[i], (float)tmpTop,
(int)ColumnWidths[i], (float)CellHeight), StrFormat);
}
isto é para saber os tipos e criar o novo certo!
agora tenho o datagridviewtextboxcolumn com tipo datetime, não estou a entender como altero o tipo da coluna via código.
porque
(((Type) ColumnTypes[i]).Type não existe sendo assim não sei donde altero o tipo e como.
Olá bom dia!
Pelo post e tá me ajudando bastante, porém como faria para fazer em um unico form com chklistbox e datagridbo.
To tentando aki e tá dificil para adaptar.
Poderia me ajudar nisso?
Bom dia, tenho um pequeno grande problema em relação ao relatório. Tenho um campo data que imprime “12/02/2014 00:00:00” e além disso meu data grid é bastante largo e eu precisava imprimir em paisagem. Isso seria possível?
Amigo so tou com um problema eu não consigo alia a impressão para começa no comarço da folha pq ela ta tipo centralizada se poder mi ajudar agradeço!
Excelente tutorial, mas estou com o mesmo problema na data, não quero imprimir a hora, somente a data.
utilizei o codigo disponivel funciona muito bem e é muito facil de adicionar a sua aplicação
Caro Helio, a proliferação do conhecimento é algo fantastico. Seu post foi realizado em Dezembro 2009…. após quase 6 anos, hoje estou de frente a mesma dificuldade. Estou tentando desenvolver um software para facilitar a rotina da minha pequenininha empresa e não estou conseguindo imprimir o conteudo do datagridview em um relatorio report ou renderiza-lo para uma planilha do excel. Vou tentar adaptar seu código a meu programa. Caso eu não consiga, vc conseguiria me ajudar?
Obrigado
Douglas Larena Oliveira
Boas. Usei este tuturial numa aplicação, mas fiquei com uma duvida que não sei se dá para fazer ou não. Queria saber como poderia colocar uma opção para imprimir a página na horizontal ou vertical, porque em alguns forms dava jeito ser na horizontal que ficasse a impressão.
Exatamente o que eu procuro saber. Alguma dica por aqui?
Opa,Tudo Bém ,, como faço pra qui imprima isso aeew em 80mm???
Parabéns pelo tutorial, funcionou perfeitamente.
Grato!
obrigado funcionou perfeitamente, apenas uma duvida, como colocar a data e hora no rodapé.
Muito obrigado, funcionou perfeitamente!!! Vale apena seguir o passo a passo!!
Amei este tutorial, só queria saber como por os dado na horizontal porque quando a tabela tem muitos dados fica uma tremenda confusão… Agradeceria a ajuda…
Eliter Lopes Programador Clean
Domino as seguinte linguagem:
C#
C++
Unity
HTML
HTML 5
Css
PHP
SQL
MYSQL
TSQL
ACCESS
E uma linguagem adaptada por mim que se chama” técnica de conexão em rede em c#”
Qualquer dúvida pessoal podem me contacte porque conhecimento é para partilhar..
Facebook—–> Eliter Lopes
Email:———-> eliterlopes17@gmail.com