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 .
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.
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.
Pronto, agora vamos arrastar e soltar o controle na página, que está na janela ToolBox, como mostra a Figura 5.
É 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).
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.
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.
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.
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.
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”.
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. 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)
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.
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
}
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.
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.
Para configurar o layout do relatório é necessário adicionar um template no projeto, como pode ser visto na Figura 20.
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.
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.
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.
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.
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
}
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.