Desenvolvimento - ASP. NET

Sub-Relatórios com Crystal Reports e ASP.NET

O Crystal Reports é uma ferramenta excelente para a criação de relatórios complexos e com ótima aparência. Entre as suas diversas funcionalidades, possui uma que permite a inserção de vários relatórios no corpo de um relatório. Quando este relatório é executado, os relatórios que estão no seu corpo também são carregados. Vamos ver como isso funciona.

por Leandro Alves Santos



Para a realização deste artigo foram utilizados:
Microsoft Visual Studio 2003;
Crystal Reports 9;
MySql 5.0;
Connector/NET.

O Crystal Reports é uma ferramenta excelente para a criação de relatórios complexos e com ótima aparência. Entre as suas diversas funcionalidades, possui uma que permite a inserção de vários relatórios no corpo de um relatório. Quando este relatório é executado, os relatórios que estão no seu corpo também são carregados.

Vamos ver como isso funciona.

Banco de Dados

Crie uma nova base de dados no MySql com o nome de Funcionarios.

Crie a tabela func e crie os campos conforme a figura abaixo.



Crie a tabela telefones e crie os campos conforme a figura abaixo.



Insira alguns registros nas duas tabelas. Não esqueça de manter a integridade entre as tabelas adicionando no campo “IDFunc” da tabela Telefones, apenas dados que coincidam com o campo “IDFunc” da tabela Func.





XML

Agora abra o Visual Studio, crie um novo projeto ASP.NET em C# e adicione ao seu projeto 2 itens XML Schema. Eles servirão como fonte de dados para os relatórios. Dê os seguintes nomes para estes arquivos:
-> xmlFuncionarios.xsd
-> xmlTelefones.xsd

Vá até a guia ToolBox e adicione um element em cada um dos arquivos xml. Agora precisamos inserir um nome e um tipo de dado para cada campo, veja nas figuras abaixo a estrutura dos arquivos xml.





Feito isso, salve e feche os arquivos.

CRYSTAL REPORTS

Adicione 1 item Crystal Report. Dê o nome de crFuncionarios.rpt. A cada arquivo Crystal Report adicionado no projeto, aparecerá a seguinte caixa:



Selecione a opção “Using The Report Expert” e clique em OK. Feito isso, aparecerá a caixa Standard Report Creation Wizard.

Selecione Create New Connection -> ADO.NET, abrirá uma nova caixa. Clique no botão “...”, selecione o arquivo xmlFuncionarios.xsd clicando duas vezes e clique em concluir.



De volta ao Standard Report Creation Wizard, arraste o xmlFuncionarios até o campo Selected Tables e clique em Concluir conforme figura abaixo.



Remova os campos PrintDate e PageNumber selecionando-os e clicando em Delete.

Agora você tem os campos do arquivo xml para inserir no seu relatório, Você pode visualizar estes campos em Field Explorer -> Database Fields clique nos campos e arraste para a seção Details do seu arquivo crFuncionarios.rpt



Adicione ao seu projeto outro item Crystal Report e dê o nome de crTelefones.rpt.

Siga os mesmo passos do arquivo crFuncionarios.rpt para inserir a fonte de dados xmlTelefones.xsd no arquivo crTelefones.rpt.

Obs: Quando a opção ADO.NET for selecionada novamente, aparecerá a fonte de dados xmlFuncionarios e aparecerá também a opção Make New Connection, clique nesta última opção.

Assim que finalizar a configuração do arquivo crTelefones.rpt, salve e feche o arquivo.

Volte ao relatório crFuncionarios.rpt, vamos inserir o relatório crTelefones.rpt em seu corpo.

Clique com o botão direito no corpo do relatório crFuncionarios, clique em Insert -> Section.

Na caixa Section Expert, clique em Details e em seguida em Insert. Isso vai inserir uma nova Detail Section no relatório. Feito isso, clique em OK.



Clique novamente com o botão direito no corpo do relatório, clique em Insert -> Subreport e adicione-o na Detail Section que acabamos de criar. Feito isso, aparecerá a seguinte caixa:

Selecione o arquivo crTelefones.rpt e confirme a inclusão.

Clique com o botão direito no subreport que acabamos de adicionar e clique em Change Subreport Links. Selecione IDFunc em Available Fields e o insira no campo “Field(s) to link to”. A combobox “Subreport parameter field to use”, informa o campo do relatório principal que queremos passar como parâmetro para o subreport. Com a opção “Select data in subreport based on a field” acionada, podemos informar o campo do subreport que será filtrado. Para o nosso exemplo, o subreport funcionará da seguinte forma:
A cada registro da tabela func impresso, o campo IDFunc será enviado para o subrelatório e apenas os registros de telefones em que o campo IDFunc coincida com o parâmetro enviado, serão impressos na tela.



Clique em OK e salve o arquivo crFuncionarios.rpt.

WebForm

No webform, vá até a guia toolbox e insira um CrystalReportViewer.

Faça uma referência para MySql.Data.DLL. Você pode fazer essa referência no Solution Explorer em References -> Add Reference.

Agora vamos analisar o código do arquivo .cs para carregar os arquivos xml e exibir o relatório.

Inclua os seguintes namespaces no seu código utilizando a palavra chave using:
MySql.Data.MySqlClient
CrystalDecisions.CrystalReports.Engine







Agora, execute a aplicação.



Este foi meu primeiro artigo, espero que tenham gostado.

Até logo.

Leandro Alves Santos

Leandro Alves Santos - Visite o blog do autor: http://weblogs.pontonetpt.com/las/.