O Report Viewer é uma ferramenta da própria Microsoft, integrada ao Visual Studio .Net que permite a geração de relatórios. O Microsoft Visual Studio 2010 inclui a funcionalidade de design de relatórios e controles ReportViewer para que você possa adicionar relatórios completos para aplicações personalizadas. Os relatórios podem conter dados tabulares, agregados e multi dimensionais. Os controles ReportViewer são fornecidos de modo que você pode processar e exibir o relatório em sua aplicação. Será utilizado o ReportViewer controle Windows Forms que é usado para hospedar relatórios em projetos de aplicativosWindows.
Desenvolvimento:
Neste artigo iremos utiliza um chart(componente gráfico presente no VS2010) e um simples textBox para demonstrar como passar uma imagem (bmp,png etc) para um relatorio reportviwer juntamente com uma string como parametro.
O grafico foi utilizado para idealizar que seu visual muda de acordo com o funcionamento do software produzido mas qualquer imagem pode ser passada, como por exemplo o conteúdo de um pictureBox ou ate mesmo a imagem da tela do próprio formulário. O textBox foi utilizado para receber qualquer informação fornecida no mesmo e passar como parametro para o reportviwer, o reportviwer aceita como parametro um text,boolean,Date/Time,Integer e float.
Para começar iremos criar uma classe que conterá a imagem que irá aparecer no relatório, neste caso utilizarei a classe clsDados que terá a Imagem. Percebe-se na figura abaixo que Imagem é um vetor de bytes.
Agora vamos criar o relatório. Adicione um report no seu projeto, siga os seguintes passos :
Escolha o nome do relatório como rptDados.
Após confirmação você ira visualizar a seguinde tela conforme a imagem abaixo:
Muito bem agora vamos criar nosso dateset dsDados.
Na aba Report Data (Ctrl+Alt+D) escolha New>Dataset... conforme a imagem abaixo:
A seguinte tela ira aparecer:
Escolha Object e clique em next.
Escolha a classe clsDados que ira conter a informação que precisamos. OBS caso o projeto não apareça na lista feche o Configuration Wizard de um rebuild no projeto e refaça ate este ponto. Após escolher a classe clique em Finish.
Veremos no campo Fields: que a variável que utilizaremos já foi encontrada. Renomeie o dataset para dsDados e clique em OK.
Agora ja temos o campo que conterá nossa imagem, vamos criar um parâmetro para receber o conteúdo de um textBox da tela de formulário, para isso clique com o botão direito sobre a pasta Parameters no guia Report Data e depois clique em Add Parameter... conforme a imagem abaixo:
A seguinte tela ira aparecer:
Em Name informe o nome do parâmetro, neste caso Observacao e em Data Type deixe o combobox marcado como Text. Clique em OK e o parâmetro terá sido criado.
Bom, agora vamos criar dois formulários. Um chamado Form1 e outro Form2. Naturalmente quando criamos um projeto o mesmo ja cria um formulário chamado Form1 dai basta adicionar um segundo chamado Form2.
Apos adicionar os formulários vamos trabalhar em cima do primeiro formulário o Form1. Vamos adicionar um textBox e em sua propriedade tex deixe um comentário como "Escreva algo aqui". Coloque também um botão para podermos gerar nosso relatório e mude seu text para Gerar relatório. Deixe um espaço na parte superior do Form1 para criarmos um gráfico para o exemplo. O resultado será igual a imagem abaixo:
Bem agora vamos criar um gráfico para nosso exemplo. O espaço deixado é para o gráfico que ira ser criado. No load do nosso formulário Form1 vamos colocar o código conforme a imagem abaixo:
Este gráfico é o mesmo utilizado como exemplo para o artigo Novo componente Chart Control do VS2010.
Muito bem, apos rodar o programa iremos ter um resultado semelhante a imagem abaixo:
Muito bem nosso formulário para testarmos esta pronto, agora temos que trabalhar no botão para gerar o relatório, ele irá pegar a imagem do gráfico criado e transforma-lo em bytes e armazena-lo na nossa classe de dados e após isso abrir nosso segundo formulário, o Form2 que será o formulário que ira mostrar nosso relatório. De dois cliques no botão para ir-mos ao evento onclick do mesmo. Coloque o código conforme a imagem abaixo:
Percebe-se que na chamada do nosso Form2 que é o formulário que irá mostrar nosso relatório estamos passando 2 parâmetros, a classe dados e o text do nosso textBox. Bem vamos agora trabalhar com nosso segundo formulário, o Form2. Como este formulário ira mostrar nosso relatório vamos colocar um componente reportviewer bastando clicar no componente na barra de toolbox e arrasta-lo para nosso formulário.
Após arrastar o componente para o formulário sua tela deve parecer com a imagem abaixo:
No componente criado, no canto superior direito clique na seta para ver as tarefas. Escolha Dock in Parent Container. Isto fará com que o componente expando para tora área do formulário.
Pronto já temos o formulário que ira mostrar nosso relatório. Agora vamos trabalhar em seu construtor para que o mesmo receba os parâmetros que foram passados no Form1.
Diferente do artigo Trabalhando com Reportviewer + VS2010 estamos criando o bind, setando seu valor, informando o localreport, criando o parametro e fornecendo o bind correspondente ao dataset correto no relatório manualmente, ou seja, via código. Fizemos isto para demonstrar uma alternativa de como realizar este procedimento via código. Explicando o código fizemos a criação de um bind chamado bsDados que irá conter os bytes da nossa imagem, setamos o sourse do bind com nossa classe de dados que foi passada pelo Form1, definimos o local da nossa rdl, criamos um parâmetro para passar a string de Observacao e finalmente fornecer o bind bsDados ao dataset dsDados do nosso relatorio rptDados.
Muito bem, nossos formulários estão prontos, vamos agora mostrar nossa imagem e nosso parâmetro no relatorio rdl. Para isso vamos apenas arrastar um componente Image presente no toolbox do relatorio rdl.
A seguinte tela irá aparecer:
No campo "Select the image source:" escolha Database, em "Use this field:" escolha nosso campo Imagem do nosso dataset dsDados e em "Use this MIME type:" escolha image/bmp e clique em ok. Pronto a imagem ja esta alocada.
Agora é so ajustar seu tamanho. Pode-se fazer isso usando o próprio mouse.
Estamos quase terminando, vamos agora mostrar o parâmetro Observacao que criamos. Para isto basta mover o parametro da guia ReportData para o relatorio.
Pronto, agora basta rodar o software digitar qualquer coisa no textBox e clicar para gerar o relatório.
Finalização:
Neste artigo demonstrei como passar uma imagem de um formulário para um relatório reportviewer e como passar um parâmetro para o mesmo. Muitos já passaram ou irão passar por esta situação. Alguns irão perguntar porque passar uma imagem se a mesma pode ser inserida diretamente pelo relatório mas a questão e se a imagem mudar dinamicamente? utilizei o gráfico exclusivamente por isso, já imaginou um gráfico de curvas e pontos onde a partir de valores informados no formulário o mesmo muda? Neste caso e viável passar a imagem do mesmo para o relatório.
Bem ,espero que isto ajude alguém. Mais uma vez demonstrei o quão prático esta trabalhar com VS2010 + reportviewer.
04 janeiro 2011
// //
5
comentários
//
5 comentários to "Trabalhando com Reportviewer + VS2010 parte II"
Sobre este Blog
Aqui comento sobre minhas experiências na área de TI. Metodologia Ágil, programação, Banco de Dados e o que mais passar pela frente...
Quem sou eu
- Renato de Almeida Soares
- Belo Horizonte, MG, Brazil
- Desenvolvedor de aplicativos,banco de dados e líder de projetos em uma ampla variedade de aplicações. Possui 5 anos de experiência na área de desenvolvimento de projetos de software, atuando como desenvolvedor, analista e líder de equipe. Atualmente, é líder da área de TI ,gerenciando os projetos dessa companhia. Sobre a sua formação acadêmica, é especialista em Engenharia de Software pela Universidade Federal de Minas Gerais (UFMG), graduado em Analise de Sistemas pela Universidade Leste Minas Gerais (UNILESTEMG) e técnico em informática pela CTCF. Tem interesse nas áreas de Qualidade de Software (Modelos e Processos), Gestão de Projetos,Desenvolvimento de aplicações.
Anônimo says:
Srs,
Eu preciso gerar um grafico, ao lado de um relatorio que me dá uma posição por uma região, mas quero imprimir uma região em paginas diferentes com seu respectivo grafico. Como faço? já tenho o relatorio e o grafico, o que ta faltando é repetir o grafico nas outras paginas somente com os dados referentes aquela regiao.
Anônimo says:
Renato como posso adicionar mais textbox e depois passar parametros neles para aparecerem no relatorio?
Unknown says:
Olá Renato, achei muito legal esta sua Matéria; esplicando s/ReportView. Mas, observei que nesta página não estar aparecendo as IMAGENS. ( 11 )-9.9594-0353
kelsen Oliveira says:
Senhores, e a imagem?
Anônimo says:
Seria mais instrutivo com as imagens...