ReportViewer - Relatórios dinâmicos com ASP .NET
Vamos falar sobre como gerar relatórios dinâmicos usando o ReportViewer em aplicações ASP .NET usando a linguagem VB .NET. Se você nunca trabalhou com este componente sugiro que leia os artigos citados nas referências.
Eu vou usar os seguintes recursos nos exemplos deste artigo:
Nosso objetivo será gerar relatórios dinâmicos e vou mostrar alguns cenários que podemos ter e como podemos obter um resultado satisfatório usando o componente ReportViewer 2008. Lembrando que temos outras opções para gerar relatórios em aplicações ASP .NET como por exemplo usar o Crystal Reports isso sem falar nos componentes de terceiros que podemos usar; a seguir cito alguns deles para conhecimento:
A primeira coisa que temos que ter em mente é que se tivermos uma estrutura de dados fortemente tipada o nosso trabalho ficará mais fácil e por isso vamos trabalhar com dataset fortemente tipado.
Nosso primeira etapa será criar o dataset tipado e nosso ponto de partida será a tabela Vendas do banco de dados macoratti.mdf criado no SQL Server 2008 que estou usando para este exemplo. A estrutura da tabela Vendas é bem simples e esta exibida abaixo e ao lado vemos alguns dados que já inclui na tabela:
Devemos ter uma conexão ativa com o banco de dados usado através da janela Server Explorer:
- Se a conexão não estiver ativa clique em Data
Connections com o botão direito do mouse e selecione Add New
Connection; - A janela Add Connection irá surgir onde você deve informar o nome do servidor e selecionar o banco de dados. obs: para a máquina local o servidor pode ser definido como .\SQLEXPRESS |
A idéia ao criar o dataset tipado e que para vincular o relatório a uma instrução SELECT precisamos criar um dataset que contém exatamente as mesmas colunas que desejamos retornar, e, dessa forma poderemos trabalhar com filtros, vinculações e ordenações mas a estrutura deverá permanecer a mesma.
No menu WebSite clique em Add New Item e a seguir selecione o template DataSet informando o nome Vendas.xsd e clicando em Add;
Na janela Solution Explorer selecione o dataset Vendas.xsd criado e a partir da janela Server Explorer arraste a tabela Vendas para o descritor dataset para criar o dataset tipado conforme abaixo:
Com o dataset tipado criado vamos criar o relatório no ReportViewer. No menu WebSite selecione Add New Item e a seguir selecione o template Report informando o nome Vendas.rdlc e clicando no botão Add;
A partir da ToolBox arraste o objeto Table para descritor Vendas.rdlc e a partir da janela Web Site DataSource inclua cada um dos campos do dataset na respectiva coluna da tabela conforme a figura abaixo:
Nota: Observe que o nome do DataSource é Vendas_Vendas. Você pode verificar isso no menu Report.
Como relatório criado vamos incluir um componente MicrosoftReportViewer a partir da ToolBox no formulário web Default.aspx;
Finalmente insira o código a seguir no evento Load do formulário no arquivo code-behind Default.aspx.vb:
namespaces usados:
Imports
Microsoft.Reporting.WebFormscódigo do evento Load:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'define o modo Local como o processamneto para o ReportViewer ReportViewer1.ProcessingMode = ProcessingMode.Local Dim rep As LocalReport = ReportViewer1.LocalReport 'obtem o caminho do relatório Dim caminhoRpt As String = HttpContext.Current.Server.MapPath("~/") 'define o local do relatorio criado rep.ReportPath = caminhoRpt & "Vendas.rdlc" 'obtem o dataset Dim ds As DataSet = GetVendas() 'Cria uma fonte de dados no relatório para o dataset vendas Dim dsVendasRpt As New ReportDataSource() 'define o nome do datasource dsVendasRpt.Name = "Vendas_Vendas" 'usa primeira tabela do dataset dsVendasRpt.Value = ds.Tables(0) 'atribui o datasource ao relatorio rep.DataSources.Add(dsVendasRpt) End Sub
|
Observe que temos uma função que retorna o dataset que será usado como fonte do relatório.
O código da função GetVendas() é dado a seguir:
Private Function GetVendas() As DataSet Dim ds As New DataSet Dim sqlVendas As String = _ "SELECT vendedorid, nome, " & _ " cota, vendas, regiao " & _ "FROM Vendas " Using conexaoSQL As New SqlConnection( _ "Data Source=.\SQLEXPRESS; " & _ "Initial Catalog=macoratti; " & _ "User ID=macoratti;Password=numsey") Dim command As New SqlCommand(sqlVendas, conexaoSQL) Dim daVendas As New SqlDataAdapter(command) daVendas.Fill(ds, "Vendas") daVendas.Dispose() command.Dispose() End Using Return ds End Function
|
Este código é bem simples, ele acessa a nossa base de dados e gera um dataset com as informações desejadas.
Executando o projeto iremos obter:
Simples, simples assim...
Pegue o projeto completo aqui: RelatoriosDinamicos.zip
Eu sei é apenas ReportViewer , mas eu gosto...
Referências: