Trabalhando com Reportviewer + VS2010 parte II
Autor: Renato de Almeida Soares | Publicado: 2011-01-04T09:21:00-08:00



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&nbsp;gráfico&nbsp;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&nbsp;conteúdo&nbsp;de um pictureBox ou ate mesmo a imagem da tela do próprio&nbsp;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&nbsp;clsDados&nbsp;que terá a Imagem. Percebe-se na figura abaixo que Imagem é um vetor de bytes.








Agora vamos criar o relatório. Adicione um&nbsp;report&nbsp;no seu projeto, siga os seguintes&nbsp;passos :









Escolha o nome do relatório como&nbsp;rptDados.

Após confirmação você ira visualizar a&nbsp;seguinde&nbsp;tela conforme a imagem abaixo:











Muito bem agora vamos criar nosso&nbsp;dateset&nbsp;dsDados.

Na aba&nbsp;Report&nbsp;Data (Ctrl+Alt+D) escolha&nbsp;New&gt;Dataset...&nbsp;conforme&nbsp;a imagem abaixo:





A seguinte tela ira aparecer:





Escolha&nbsp;Object&nbsp;e clique em&nbsp;next.










Escolha a classe&nbsp;clsDados&nbsp;que ira conter a informação que precisamos. OBS caso o projeto não apareça na lista feche o&nbsp;Configuration&nbsp;Wizard de um&nbsp;rebuild&nbsp;no projeto e refaça ate este ponto. Após escolher a classe clique em&nbsp;Finish.







Veremos no campo&nbsp;Fields: que a variável que utilizaremos já foi encontrada.&nbsp;Renomeie&nbsp;o&nbsp;dataset&nbsp;para&nbsp;dsDados&nbsp;e clique em OK.









Agora ja temos o campo que conterá nossa imagem, vamos criar um&nbsp;parâmetro&nbsp;para receber o&nbsp;conteúdo&nbsp;de um textBox da tela de&nbsp;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&nbsp;parâmetro, neste caso Observacao e em Data Type deixe o combobox marcado como Text. Clique em OK e o&nbsp;parâmetro&nbsp;terá sido criado.





Bom, agora vamos criar dois&nbsp;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&nbsp;comentário&nbsp;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&nbsp;código&nbsp;conforme a imagem abaixo:







Este gráfico é o mesmo utilizado como exemplo para o artigo &nbsp;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&nbsp;relatório, ele irá pegar a imagem do&nbsp;gráfico&nbsp;criado e transforma-lo em bytes e&nbsp;armazena-lo&nbsp;na nossa classe de dados e após isso abrir nosso segundo&nbsp;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&nbsp;parâmetros, a classe dados e o text do nosso textBox. Bem vamos agora trabalhar com nosso segundo formulário, o Form2. Como este&nbsp;formulário&nbsp;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&nbsp;Dock&nbsp;in&nbsp;Parent&nbsp;Container. Isto fará com que o componente&nbsp;expando&nbsp;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&nbsp;parâmetros&nbsp;que foram passados no Form1.





Diferente do artigo&nbsp;Trabalhando com Reportviewer + VS2010&nbsp;estamos criando o bind, setando seu valor, informando o localreport, criando o parametro e fornecendo o bind correspondente ao dataset correto no&nbsp;relatório&nbsp;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&nbsp;parâmetro para passar a string de Observacao e finalmente fornecer o bind bsDados ao dataset dsDados do nosso relatorio rptDados.&nbsp;



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 &nbsp;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&nbsp;próprio&nbsp;mouse.





Estamos quase terminando, vamos agora mostrar o&nbsp;parâmetro&nbsp;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&nbsp;demonstrei&nbsp;como passar uma imagem de um formulário para um relatório reportviewer e como passar um parâmetro para o mesmo. &nbsp;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&nbsp;gráfico&nbsp;exclusivamente&nbsp;por isso, já imaginou um gráfico de curvas e pontos onde a partir de valores informados no&nbsp;formulário&nbsp;o mesmo muda? Neste caso e&nbsp;viável&nbsp;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.