Loading
PauloHDSousa - Desenvolvedor, Leitor e jogador: Relatórios com ReportViewer e Linq - C#

segunda-feira, 23 de janeiro de 2012

Relatórios com ReportViewer e Linq - C#


Gerando relatórios com Reportviewer usando LinqtoSql na linguagem C#

Vou ensinar como gerar relatório no reportviewer com base em uma consulta SQL

Para algumas versões do Visual Studio será necessário baixar o Package do ReportViewer

Hoje irei mostrar como gerar relatórios usando reportviewer em uma aplicação DESKTOP, o exemplo que irei motrar pode ser facilmente adaptado para Visual Basic.net, o código irá apenas sofrer algumas mudanças.

Clique aqui para converter de C# para Visual Basic.net


Crie uma tabela no banco de dados chamada Produtos, clique aqui  para ver o Script SQL 
Adicione alguns dados na tabela, eles serão mostrados no relatório posteriormente


Crie um novo projeto

No Visual Studio vá em:
File > New Project ou aperte CTRL + SHIFT + N
Selecione Visual C#> Windows Form Application e crie um projeto com o nome de ReportviewerLinq

Clique com o botão direito em cima do projeto vá em ADD > NEW ITEM e adicione um arquivo .DBML com o nome de DataBase




Abra a aba server Explorer e arraste a nossa tabela Produtos para dentro do DataCotext
Caso o seu banco de dados não esteja aparecendo Clique em Connect to Database e adicione a conexão com o seu banco de dados.


Na hora em que você adiciona a tabela, uma connectionstring já é criada, ou seja, o DataContext  vai cuidar de todo o trabalho relacionado a conexão com banco de dados



Adicione um formulário no projeto e coloque o nome dele de FrmVisualizador
Vá na Aba Toolbox selecione e arraste o Componente Reportviewer no formulário


Clique com o botão direito em cima do projeto RelatorioReportViewer  vá em ADD > NEW ITEM
ou aperte CTRL + SHIFT + A  e adicione um relatório no projeto com o nome de Relatorio_Produtos




Dentro da aba Repot Data vá em NEW > DATASET
Caso não consiga visualizar a aba, clique dentro do relatório e aperte CTRL + ALT + D

Automaticamente será aberto o Data Source Configuration Wizard, então siga esses passos.
  1. Object
  2. Escolha o Objeto PRODUTO 


     3. Clique em Finish

    Se tudo der certo teremos nosso Dataset para o reportviewer criado, renomeie ele para DataSet_Produtos e clique em OK

O Dataset irá aparecer no Report Data.
Clique com o botão direito DENTRO do relatório vá em INSERT > Table
Vá nas propriedades da Table que acabou de ser inserida e  na propriedade DataSetName defina como DataSet_Produtos

Selecione as colunas que quer mostrar na Table.


No FrmVisualizador clique no reportviewer e escolha o Relatorio_Produtos como Relatório a ser exibido

Ainda no FrmVisualizador, altere a visiblidade do ProdutoBindingSource, deixe ele como Public


Vamos voltar para o Form1  e adicionar

  • 1  DataGridView
  • 2  Buttons
  • 1 Textbox
  • 1  Label


Deixe o formulário igual está na imagem, e no DataGridView clique em Choose Data Source e selecione o Objeto Produto


Coloque o seguinte código no botão pesquisar.

 DataBaseDataContext oDc = new DataBaseDataContext ();

produtoBindingSource.DataSource = from result in oDc.Produtos where result.Nome.Contains(TextNome.Text) select result;

Na primeira linha estamos instanciando o nosso .DBML.

Na segunda linha estamos dizendo que o DataSource do nosso ProdutoBindingSource vai receber todos os produtos que contenham no seu nome o que estiver digitado no  TextNome.Text


Coloque o seguinte código no botão imprimir.


            FrmVisualizador oForm = new FrmVisualizador();
            oForm.ProdutoBindingSource.DataSource = this.produtoBindingSource.DataSource ;
            oForm.Show();

Na primeira linha estamos instanciando o FrmVisualizador

Na segunda linha estamo dizendo que o Datasource do FrmVisualizador vai receber o DataSource da pesquisa realizada no Form1

Na terceira linha apenas chamamos o formulário com o relatório

Resultado Final
Além de ser fácil de montar, com reportviewer temos a opção de expotar os dados para:
  • Excel
  • PDF
  • Word
Clique aqui para baixar o projeto completo