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 DantasO 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.