Desenvolvimento - ASP. NET

Criando e Exportando Relatórios com Crystal Report, em uma aplicação Web

Neste tutorial será abordado a criação e exportação (PDF) de relatórios utilizando o Crystal Report. No exemplo utilizarei o banco de dados NorthWind do SqlServer como fonte de dados para o relatório, e a linguagem utilizada para codificação será C#.

por Bruno Spinelli Dantas



Neste tutorial será abordado a criação e exportação (PDF) de relatórios utilizando o Crystal Report. No exemplo utilizarei o banco de dados NorthWind do SqlServer como fonte de dados para o relatório, e a linguagem utilizada para codificação será C# .

O primeiro passo é criar uma solução em branco, chamada ‘SlnReport’.Depois inclua um Projeto ‘Asp .Net Web Application’ . Renomeie seu WebForm para ‘ReportViewPage.aspx’


1º.Passo criar solução em branco

Arraste o Web Control ‘CrystalReportViewer’ para o canto do formulário. É através deste controle que será exibido o relatório.


2º. Passo criar CrystalReportViewer

Na aba ‘Server Explorer’ arraste a tabela ‘Products’, do Banco de Dados ‘NorthWind’ (SqlServer), para dentro do formulário criando assim uma connection e um adapter.


3º. Passo criar a Connection e o Adapter

Gere um DataSet Tipado a partir deste adapter clicando com botão direito sobre ele, escolhendo a opção ‘Generate DataSet...’, marque a tabela ‘Products’ e clique ‘OK’. Feito isso é criado uma classe ‘DataSet1’ que herda de ‘DataSet’, e um objeto já instanciado desta classe chamado de ‘DataSet11’, que será o nosso DataSet tipado, fonte de dados para nosso relatório.


4º.Passo : Gerar o DataSet tipado

Feito isso podemos começar o processo de criação de nosso relatório. Adicione um CrystalReport chamado de ‘ProductsReport’ clicando com o botão direito no projeto ‘ReportsExample’, escolhendo a opção ‘Add New Item..’.Aparecerá imediatamente a janela ‘Crystal Report Gallery’.


5º. Passo: Adicionar um Crystal Report

Clique no botão ‘OK’ para usar o Report Expert e escolher o Relatório padrão. Abrirá então a janela ‘Standard Report Expert’. Na aba Data, selecione ‘ProjectData’, ‘ADO .Net DataSets’, ‘ReportsExample.DataSet1’, ‘Products’, e clique no botão ‘Insert Table’. Depois de já selecionada a tabela com que vamos trabalhar , iremos escolher os campos.


6º. Passo: Inserir a tabela Products como fonte de dados do relatório

Na aba ‘Fields’, adicione os campos ‘Product.ID’, ‘ProductName’, ‘UnitPrice’, ‘UnitsInStock’ na caixa ‘Fields to Display’ e clique no botão ‘Next>>’.

Na aba ‘Group’ adicione o campo ‘ProductName’, na caixa ‘Group By’ para que os registros sejam agrupados pelo nome do produto. Na aba ‘Total’ remova todos os campos que estiverem na caixa ‘Summarized Fields’, clicando no botão ‘<-Remove’ e adicione o campo ‘ProductsName’ clicando no botão ‘Add->’.Na ComboBox ‘SummaryType’, escolha ‘count’, para que seja contado total de produtos. Na aba ‘style’ insira o título ‘ProductsReport’, e escolha um estilo para o relatório e clique no botão ‘finish’ para que seja finalizado o processo de criação do relatório de produtos. Pronto, já esta criado nosso relatório.


7º. Passo: Inserir campos da tabela ProductsDepois de criado o relatório temos agora que torna-lo visível através do controle CrystalViewer, que foi adicionado ao form ReportViewPage.aspx. Para efetuar esta tarefa primeiro iremos popular o nosso DataSet tipado DataSet11, que será a fonte de dados para o nosso relatório, através do método Fill() do objeto ProductsAdapter. Depois instanciaremos um objeto da classe ProductReport, que é a classe que representa abstração de nosso relatório, e definiremos o DataSet11 como fonte de dados para o relatório através do método SetDataSource(). Agora só falta conectarmos o relatório com nosso viewer, isto é feito atribuindo a instancia da classe ProductReport a propriedade ReportSource do objeto CrystalReportViewer1, e invocando o método DataBind() da mesma.Seu código deve ficar parecido como o abaixo :

private void Page_Load(object sender, System.EventArgs e)
{
	//Popula o DataSet
	ProductsAdapter.Fill(dataSet11);

	//Instancia um objeto da classe que é a abstração do relatório
	ProductsReport rpt = new ProductsReport();

	//Define a fonte de dados para o relatório
	rpt.SetDataSource(dataSet11);

	//Define qual será o relatorio que o viewer irá exibir
	CrystalReportViewer1.ReportSource = rpt;

	//Conecta o viewer com o relatorio
	CrystalReportViewer1.DataBind();
}


Visualização do Relatório Via Web

Exportando o Relatório para PDF

O processo de exportação para PDF é muito simples. Primeiro temos que preencher o dataset11 novamente, instanciar um objeto da classe ProductsReport que será o relatório a ser exportado, definir qual será a fonte de dados para o relatório. Depois temos que definir as opções de exportação através de um objeto da classe DiskFileDestinationOptions, informando a este objeto o nome do arquivo .pdf, o qual será gerado na exportação; o tipo de destino da exportação, e o formato do arquivo que no nosso caso é PDF. Depois de definida estas opções atribua este objeto a propriedade DestinationOptions do objeto da classe ProductsReport, e invoque o método Export() deste mesmo objeto.

Crie um método ExportToPDF que recebe uma string como argumento sendo essa o nome do arquivo que será gerado na exportação.Seu código deve estar parecido com o que segue :

private void ExportToPDF(string FileName)
{
	//Popula o DataSet
	ProductsAdapter.Fill(dataSet11);
	
	//Instancia um objeto da classe que é a abstração do relatório
	ProductsReport rpt = new ProductsReport();
	
	//Define a fonte de dados para o relatório
	rpt.SetDataSource(dataSet11);
	
	//Instancia um objeto que será a abstração das configurações do arquivo
	CrystalDecisions.Shared.DiskFileDestinationOptions ProductsOptionsFile =
	new CrystalDecisions.Shared.DiskFileDestinationOptions();
	
	//Informa ao objeto ProductsOptionsFile o nome do arquivo
	ProductsOptionsFile.DiskFileName = FileName;
	
	//Define o destino do arquivo o qual será exportado
	rpt.ExportOptions.ExportDestinationType =
	CrystalDecisions.Shared.ExportDestinationType.DiskFile;
	
	//Define o tipo de arquivo o qual será exportado
	rpt.ExportOptions.ExportFormatType =
	CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;
	
	//Informa a abstração do relatorio qual será as opções de destino da
	exportação através do objeto ProductsOptionsFile
	rpt.ExportOptions.DestinationOptions = ProductsOptionsFile;
	
	//Efetua a exportação
	rpt.Export();
	
	//Redireciona a pagina para o arquivo exportado
	Response.Redirect(FileName);
}

Opcionalmente ao final do código redirecionamos o usuário direto para o arquivo pdf, porém isto não é necessário.

Insira um WebControl do tipo Button, altere sua propriedade Text para “Export To PDF”, sua propriedade ID para “exportBtn”, clique duas vezes sobre o botão para que seja criado um EventHandler, para o evento click e invoque o método ExportToPDF() passando o nome do arquivo que será gerado na exportação.Seu código deve estar parecido com este:

private void exportBtn_Click(object sender, System.EventArgs e)
{
	ExportToPDF("c:\\ProductsReport.pdf");
}


Relatório exportado para PDF

Conclusão:

Realmente o Crystal Report facilita muito a construção de relatórios. Com o Crystal Report é possível criar desde relatórios simples (listagens e etc...) até relatórios mais complexos (Gráficos 3D, com interação do usuário e etc...) de forma rápida e produtiva, porém tudo tem seu preço. O Crystal Report necessita de uma licença para que possa ser comercializado. Se sua aplicação não necessita de relatórios extremamente complexos, vale a pena construir suas próprias classes para construção de relatórios, o .Net Framework oferece ótimos recursos para tal tarefa através das classes do Namespace System.Drawing, em conjunto com seus ricos controles Datagrid e DataList.

Bruno Spinelli Dantas

Bruno Spinelli Dantas - MCAD, Desenvolvedor da nTime Mobile Solutions, dedicando-se exclusivamente a Tecnologia Net, no desenvolvimento de plataformas para dispositivos móveis.