Este artigo mostra algumas das ferramentas que são usadas na construção de relatórios em ASP.NET, os quais são utilizados com bastante frequência pelos desenvolvedores.

Nada melhor que mostrar exemplos das funcionalidades básicas e vantagens que cada uma pode oferecer na hora da escolha, como auxílio na visualização de informações que estão armazenadas em fonte de dados diversas, relatórios integrados nas páginas web ou aplicativos Windows forms, que possibilitam exibir informações de maneira em que os dados fiquem bem organizados e formatados.

No dia a dia dos desenvolvedores, analistas, gerente de projetos, arquitetos dentre outros precisam tomar decisões sobre qual ferramenta vai melhor atender as necessidades do projeto. Por isso, é interessante saber se o que estamos utilizando vai atender de maneira bem ágil para mostrar as informações ao usuário do sistema, que sempre estão em busca de relatórios para as tomadas de decisões na empresa.

As ferramentas que serão abordadas são: o Microsoft Report Viewer e o Crystal Report Viewer que já vem no Visual Studio. Serão feitos exemplos das principais funcionalidades dessas ferramentas, nos dando uma visão de qual ferramenta se adéqua ao nosso projeto.

O banco de dados que nos dará suporte será o Northwind, que pode ser baixado . Após fazer o download do banco, restaure no SQL Server Management Studio Express. Utilizaremos o IDE Visual Studio 2008 para o desenvolvimento dos exemplos.

Microsoft Report Viewer

É um Package que mostra relatórios em sua aplicação, apresentado em duas versões, tanto para Web para projetos ASP.NET, quanto para Windows Forms em aplicações Windows, e são voltados para a visualização de relatórios. O Report View não apresenta qualquer restrição quanto a distribuição de um projeto .NET.

Vamos criar um relatório através desse controle: primeiro abra o Visual Studio em Iniciar /Programas /Microsoft Visual Studio 2008 e depois crie um novo WebSite em File /New /WebSite, conforme a Figura 1 .

Ferramentas para relatórios no ASP.NET
Figura 1. Novo Web Site

Perceba que o Item 1 representa o template do projeto que vai ser do tipo ASP.NET Web Site e o Item 2 é o Location que pode ser selecionado como File System, possibilitando ao sistema ser salvo em um diretório da escolha do desenvolvedor. No nosso caso foi salvo em C:\Report, conforme o Item 3. Por fim o Item 4 vemos em qual linguagem vai ser desenvolvido o WebSite, que é o Visual C#.

Vamos organizar o nosso projeto criando a seguinte estrutura de pastas:

  • A pasta chamada Forms, que vai guardar páginas Web;
  • A pasta Reports vai guardar os relatórios;
  • A pasta Images vai guardar as imagens.

Na aba Solution Explorer, com o botão direito, clique no projeto e selecione New Folder para criar as pastas.

Em cima da pasta Forms, com o botão direito e selecione Add New Item (Figura 2). Será mostrada uma tela igual a da Figura 3, onde será selecionado o Templates do tipo WebForm, que é uma página web, com o nome Exemplo01.aspx.

Adicionando uma nova página
Figura 2. Adicionando uma nova página
Escolhendo o template We Form
Figura 3. Escolhendo o template Web Form

A página será criada e nesse momento será adicionado o controle MicrosoftReportViewer, mas antes, para mostrar o Design da página, clique em Design, como vemos na Figura 4.

Mostra o Design na página
Figura 4. Mostra o Design na página

Pronto, agora vamos arrastar e soltar o controle na página, que está na janela ToolBox, como mostra a Figura 5.

Janela ToolBox
Figura 5. Janela ToolBox

É necessário criado um Typed DataSet, que é um arquivo .xsd e representa um Schema XML. Este é um documento XML que define as propriedades e métodos que têm o mesmo schema (colunas, tipos de dados) da tabela do database Northwind. No entanto, não entraremos em detalhes quanto aos métodos Insert, Update e Delete do DataTable.

Para adicionar no Solution Explorer o dataset clique no projeto com o botão direito e selecione Add New Item, conforme a Figura 6. Selecionaremos o template DataSet (Item 1) e o nome do arquivo NorthwindProducts.xsd  (Item 2).

Escolhendo o template DataSet
Figura 6. Escolhendo o template DataSet

Uma forma de manipular o DataSet é utilizando o Editor para criar e modificar graficamente um arquivo XSD. Para isso, clique nele com o botão direito e depois em Open With, conforme mostram as Figuras 7 e 8.

Escolhendo o template DataSet
Figura 7. Escolhendo o template DataSet
Escolhendo o programa o qual será aberto o arquivo
Figura 8. Escolhendo o programa o qual será aberto o arquivo
 

Uma das formas bem rápida de criar o dataset é pela janela do Server Explorer, que possibilita criar a conexão com o banco Northwind. Depois de criada, clique na tabela Products e arraste para o DataSet Desinger, como mostra a Figura 9.

DataSet Designer
Figura 9. DataSet Designer
 

Na aplicação web falta adicionar e formatar o relatório: com o botão direito na pasta Report add new item (Figura 10 - Item1 ), que é o template Report. Crie o relatório com o nome ReportProducts.rdlc, conforme o Item 2. Dessa forma o processamento será local, no computador que hospeda aplicação e é quem se encarregará de processar.

Template Report Wizard
Figura 10. Template Report Wizard

Primeiramente vamos habilitar o Page Header no menu Report / Page Header do relatório, que vai conter uma imagem e o título, mas antes é necessário informar as imagens que vão ser vinculadas ao relatório, através do menu Report / Embedded Images, como mostra a Figura 11.

Importando as imagens para o relatório
Figura 11. Importando as imagens para o relatório

Como você pode ver na Figura 12, através do Item 1, adicionamos o objeto Image clicando e arrastando para o Page Header do relatório. No Item 2 o source será selecionado para a opção Embedded, que é forma feita anteriormente, onde vincula as imagens. Em value adicione as imagens que foram vinculadas para aparecer. Arraste também um textbox onde será colocado o título do relatório - “Products”.

Adicionando o objeto imagem e configurando
Figura 12. Adicionando o objeto imagem e configurando

A janela toolbox permitirá definir um layout para o relatório, que vai conter duas Data Regions: a Table e o Chart, que são vinculadas a fonte de dados, como você pode ver na Figura 13.

Formatando o relatório
Figura 13. Formatando o relatório
  A Figura 14 mostra a janela WebSite Data Sources com o dataset que foi disponibilizado. Nesse momento clique e arraste no campo ProductName e UnitPrice para a Table, conforme mostram os Itens 1 e 2. Acabamos de definir duas colunas no relatório: nome do produto e o preço. Para fazer o somatório do preço dos produtos utilizaremos a fórmula =Sum(Fields!UnitPrice.Value) que faz a somatória do campo UnitPrice (Item 3)

Colocando os campos que serão visualizados no relatório
Figura 14. Colocando os campos que serão visualizados no relatório

Quanto ao gráfico, será mostrada a comparação do preço com os produtos: com o botão direito do mouse no chart selecione Properties e na aba Data da janela tem um dropdownlist com a legenda DataSet Name. Lá será selecionado o dataset NorthwindProducts_Products, de acordo com o Item1 da Figura 15. Já no Item 2 serão mostrados os valores dos preços que vão ficar disponibilizados no eixo Y. Então clique em editar e coloque na aba Values as informações como mostra a Figura  16. No Item 3 temos os nomes dos produtos que vão ficar disponibilizados no eixo X, que vão se relacionar com os preços. Preencha de acordo com a Figura 17.   E para finalizar, na aba legend desmarque a opção Show Legend para não mostrar a legenda no gráfico.

Propriedade do Gráfico
Figura 15. Propriedade do Gráfico
Editar Valores do Gráfico
Figura 16. Editar Valores do Gráfico
Valor que se relaciona com o preço
Figura 17. Valor que se relaciona com o preço

Voltando para a página web criada do Exemplo01.aspx, no code-behind coloque o código da Listagem 1, que faz a conexão com o banco. Veja que tem um select para retornar os seis últimos produtos e associar o dataset com o ReportViewer datasource.


using System;
using System.Data;

using System.Data.SqlClient;

using Microsoft.Reporting.WebForms;

 

public partial class Exemplo01 : System.Web.UI.Page

{

 

  #region Events Handles

 

  protected void Page_Load(object sender, EventArgs e)

  {

    if (!IsPostBack)

    {

      CarregaRelatorio();

    }

  }

 
  #endregion

  
  #region Private Methods

  private void CarregaRelatorio()

  {

    //Título da página

    Page.Title = "Relatório";

 

    //Conexão com o banco de dados

    SqlConnection Con = null;

    Con = new SqlConnection(@"Password=suasenha;Persist Security Info=True;
    User ID=seusuario;Initial Catalog=Northwind;Data Source=DESENV\SQLEXPRESS");

    Con.Open();

    SqlCommand Cmd = Con.CreateCommand();

    //Select que retorna 06 produtos

    Cmd.CommandText = "Select top 6 * from Products ";

    SqlDataAdapter Da = new SqlDataAdapter(Cmd);

    DataTable dt = new DataTable();

    Da.Fill(dt);

    Con.Close();

 

    //Associa o dataset com o ReportViewer datasource

    ReportDataSource rpda = new ReportDataSource();

    rpda.Name = "NorthwindProducts_Products";

    rpda.Value = dt;

 

    ReportViewer1.LocalReport.DataSources.Clear();

    //Adiciona o objeto rpda ao controle ReportViewer

    ReportViewer1.LocalReport.DataSources.Add(rpda);

 

    //Local que está o relatório

    ReportViewer1.LocalReport.ReportPath = "Reports/ReportProducts.rdlc";

 

    ReportViewer1.LocalReport.Refresh();

  }

 

  #endregion

}
Listagem 1. Conexão com o banco de dados

Uma das vantagens do Report View é que o relatório pode ser exportado para PDF ou Excel. O resultado do relatório pode ser visto na Figura 18.

Mostra o relatório gerado pelo controle ReportView
Figura 18. Mostra o relatório gerado pelo controle ReportView

Crystal Report Viewer

Permite mostrar relatórios em sua aplicação, tanto para projetos Web quanto Windows Forms. Para explorar alguns dos recursos do Crystal Report Viewer, neste tópico teremos o exemplo utilizando com o Microsoft ReportView. Para isso crie uma página com o nome Exemplo02.aspx e adicione o controle Crystal Report Viewer, como mostra a Figura 19. Uma das vantagens do Crystal Report Viewer é que o relatório pode ser exportado para Crystal Reports (RPT), Acrobat Format (PDF), MS Word, MS Excel 97-2000, MS Excel 97-2000 (Data Only) e Rich Text Format.

Crystal Report Viewer
Figura 19. Crystal Report Viewer

Para configurar o layout do relatório é necessário adicionar um template no projeto, como pode ser visto na Figura 20.

Template Crystal Report
Figura 20. Template Crystal Report

Começando pelo Section Report Header, onde será adicionado uma imagem através do menu Crystal Reports / Insert / Picture, selecione a imagem desejada e depois na janela Toobox selecione Text Object e então arraste para o relatório. O título será “Products”, conforme a Figura 21.

Report Header com imagem e título
Figura 21. Report Header com imagem e título

Para formatar o relatório o dataset tem que ser adicionado, então na janela Filder Explorer, com o botão direito, clique em Database Filds / DataBase Expert, como pode ser visto na Figura 22. Perceba que será aberta a janela Database Expert, de acordo com a Figura 23, para localizar o dataset. Clique em   Project Data / ADO.NET DataSets e o localize. Depois selecione a tabela Products e clique na seta “>” para adicionar.

Adicionando o Typed DataSet
Figura 22. Adicionando o Typed DataSet
Localizando Typed DataSet e Adicionar no relatório
Figura 23. Localizando Typed DataSet e Adicionar no relatório

A Figura 24   mostra como adicionar os campos no relatório: clique em ProductName e depois em UnitPrice e arraste para a Section Details. Depois clique com o botão direito na parte branca do relatório e selecione Insert / Summary, onde será aberta uma janela Insert Summary, conforme exibido na Figura 25 - Item 1 . Escolha o campo e no Item 2 escolha a opção sum, que vai fazer o somatório do campo escolhido.

Colocando os campos que serão visualizados no relatório
Figura 24. Colocando os campos que serão visualizados no relatório
Inserindo a somatória no relatório
Figura 25. Inserindo a somatória no relatório

  E por fim, a Figura 26 mostra como inserir no relatório o gráfico através do menu Crystal Reports / Insert / Chart. Será aberta uma janela, de acordo com a Figura 27, onde  na aba Type pode ser escolhido um dos vários tipos de gráfico. Para o nosso exemplo escolhemos o Bar, que é o tradicional gráfico de barras. Na aba Data faremos a montagem do gráfico, ou seja, relacionaremos os produtos com os seus respectivos valores (Figura 28). Repare que a aba Text permite personalizar a legenda que o gráfico vai mostrar.

Inserindo o gráfico
Figura 26. Inserindo o gráfico
Escolhendo o tipo de gráfico
Figura 27. Escolhendo o tipo de gráfico
Selecionando os dados do gráfico
Figura 28. Selecionando os dados do gráfico

A Listagem 2 mostra o code-behind da página Exemplo02.aspx, onde é criada a conexão com o banco. Após isso são retornadas as informações para serem carregadas no relatório, e por fim o objeto relatorio adiciona ao controle CrystalReportViewer1.


using System;

using System.Data;

using System.Data.SqlClient;

 

public partial class Exemplo02 : System.Web.UI.Page

{

  #region Object

  //Cria uma instância do ReportClass

  CrystalDecisions.CrystalReports.Engine.ReportClass relatorio = 
   new CrystalDecisions.CrystalReports.Engine.ReportClass();

 
  #endregion

 

  #region Events Handles

 

  protected void Page_Load(object sender, EventArgs e)

  {

    if (!IsPostBack)

    {

      CarregaRelatorio();

    }

  }

 

  #endregion

 

  #region Private Methods

 

  private void CarregaRelatorio()

  {

    //Título da página

    Page.Title = "Relatório";

 

    //Conexão com o banco de dados

    SqlConnection Con = null;

    Con = new SqlConnection(@"Password=suasenha;Persist Security Info=True;
    User ID=seuusuario;Initial Catalog=Northwind;Data Source=DESENV\SQLEXPRESS");

    Con.Open();

    SqlCommand Cmd = Con.CreateCommand();

    //Select que retorna 06 produtos

    Cmd.CommandText = "Select top 6 * from Products ";

    SqlDataAdapter Da = new SqlDataAdapter(Cmd);

    DataTable dt = new DataTable();

    Da.Fill(dt);

    Con.Close();

 

    //Local que está o relatório

    relatorio.FileName = Server.MapPath("~/Reports/CrystalReportProducts.rpt");

    //Define o DataDource do Relatório

    relatorio.SetDataSource(dt);

    //Visualiza o relatório

    CrystalReportViewer1.ReportSource = relatorio;

    CrystalReportViewer1.DataBind();

  }

 

  #endregion

}
Listagem 2. Conexão com o banco
Mostra o relatório gerado pelo controle Crystal Reports
Figura 29. Mostra o relatório gerado pelo controle Crystal Reports

As ferramentas discutidas neste artigo são as principais utilizadas no Visual Studio, e por esse motivo despertou o interesse em mostrar o que é possível fazer em cada uma delas. O desafio era fazer um relatório que apresentasse as mesmas informações em ambos as ferramentas.

Neste artigo foi possível ver algumas vantagens e como implementar o relatório, dando um norte de qual ferramenta melhor se adequá no projeto em execução.