Crie um novo Projeto Eco Winforms, para isso vá em File->New->Other selecione a pasta Delphi for .Net Projects, de um duplo clique em ECO Winforms Application.
Vá agora na aba Model View expanda o primeiro item da lista clicando no sinal ‘+’, expanda o item Package1 e de um duplo clique no primeiro item.
Crie o modelo como abaixo:

Não se esqueça de mudar o nome das duas pontas da associação ou o ECO irá reclamar.
Agora clique na primeira aba do lado do esquerdo da Model View e de um duplo clique no item Winform.pas.
Configure a propriedade ECOSpaceType do componente rhRoot para usar seu Modelo.
Delete os componentes EcoAutoFormExtender, ECOListActionExtender e ECOGlobalActions.
Adicione o componente ReportGenerator e sete sua propriedade OwnerForm para o form atual e mude seu nome para rptRelatorioECO.
* Adicione na propriedade DataSources, clicando no botão Add, o Nome PessoaList e o Value apontando para o ehPessoa. (esse item em tempo de design não deveria ser importante, porém se você não preenche-la você poderá encontrar problemas ao tentar acessar a propriedade DataSource via código, por isso é recomendado preenche-la).
Adicione dois componentes ExpressionHandle e um CurrencyManager.
Mude o nome de um dos ExpressionHandle para ehPessoa e o outro para ehContato e mude o nome do CurrencyManager para cmhPessoa.
O ehPessoa deverá ter a seguinte expressão Pessoa.allInstances->select(e|e.PessoaContato->isEmpty), sete a propriedade *AddDefaultNestings para true e mude a propriedade rootHandle para usar o rhRoot, o ehContato deverá ter está expressão self.Contatos e seu rootHandle deverá apontar para cmhPessoa.
O cmhPessoa deverá ter sua propriedade RootHandle apontando para o ehPessoa e sua propriedade BindingContext apontando para o TWinForm.
*Mudamos para true a propriedade AddDefaulNesting para que nosso relatório entenda que o nosso objeto Contato é uma Pessoa e possui os mesmos campos que uma Pessoa e permita que nós o utilizemos, caso contrario o relatório iria apenas mostrar o objeto sem atributos, não permitindo que o mesmo seja manipulado.
Agora Adicione dois datagrids e três botões.
Mude a opção DataSource de um dos DataGrids para usar o ehPessoa e o outro para usar o ehContato.
Mude a propriedade Text de um dos botões para Criar Pessoa, com o seguinte código no evento Click:
Pessoa.Create(EcoSpace);
Mude a propriedade Text do outro botão para Criar Contato, com o seguinte código no evento Click:
var
vContato: Pessoa;
begin
if Assigned(cmhPessoa.Element) then
begin
vContato := Pessoa.Create(EcoSpace);
(cmhPessoa.Element.AsObject as Pessoa).Contatos.Add(vContato);
end
else
MessageBox.Show('Não Existe nenhuma pessoa para adicionar contatos!');
end;
Adicione os seguintes namespaces na seção uses do seu código: NineRays.Reporting.DOM, System.Resources,
NineRays.Reporting.View.
Mude a propriedade Text do outro botão para Gerar Relatório, com o seguinte código no evento Click:
var
vPreviewForm : PreviewForm;
begin
ehPessoa.EnsureBindingList; //Certificamos que a lista de Pessoas esta atualizada
ehContato.EnsureBindingList; //Certificamos que a lista de Contatos esta atualizada
rptRelatorioECO.DataSources.Clear; //Limpamos a lista de DataSources do Relatorio.
rptRelatorioECO.DataSources.Add('PessoaList',ehPessoa.GetList); //Adicionamos a nossa lista de pessoas atual ao datasource.
rptRelatorioECO.DesignTemplate; //Este método é utilizado apenas para desenharmos o relatorio. Após Desenhado não será mais utilizado.
rptRelatorioECO.LoadTemplate(Application.ExecutablePath.Trim('ExemploRelatoriEco.exe'.ToCharArray)+'\relatorioEco.rst'); //Carregamos o arquivo que iremos salvar após Desenhar o relatório e salvar. Atenção o nome do relatório deve ser o mesmo do que foi salvo no Design dele.
vPreviewForm := PreviewForm.Create(rptRelatorioECO); //Criamos o form de Preview do Relatório.
try
try
rptRelatorioECO.Prepare; //Preparamos o relatorio
vPreviewForm.WindowState := FormWindowState.Maximized; //Setamos o estado da janela para Maximizado.
vPreviewForm.ShowDialog; //Exibimos a tela de Preview.
except
on ee : Exception do MessageBox.Show(ee.Message, 'Relatorio no ECO', MessageBoxButtons.OK, MessageBoxIcon.Error); //Se ocorrer algum erro mostramos o mesmo para o usuário.
end;
finally
vPreviewForm.Dispose; //Liberamos o recurso da memória.
end;
end;
Agora Execute o programa e click no botão Gerar Relatório a tela de design será exibida, como abaixo:

Vá no menu File -> New -> Blank Report e click em Ok.
Com nosso novo relatório criado vamos adicionar um PageHeader (cabeçalho) no nosso relatório, para isso click no ícone


Vamos agora começar a manipular os dados do ECO.
Para isso adicione um DataBand clicando no ícone

Bom com nosso DataBand criado vamos agora colocar um Header dentro dele, para isso click no ícone

Depois de feito isso adicione dentro do DataBand um componente Detail, vá na aba Data Sources e expanda o item PessoaList (Mesmo nome do rptRelatorioEco) click e arraste o item Nome para dentro do Detail, faça a mesma coisa com o Endereço.
Bom agora vamos adicionar um outro DataBand dentro do nosso Databand para exibir os Contatos de cada Pessoa, adicione o DataBand e configure seu DataSource para apontar para PessoaList.Contatos.
Após ter feito isso adicione um Header e um Detail dentro deste DataBand como feito no primeiro porem você deverá pegar os campos da aba DataSource que esta dentro do PessoaList -> Contatos e arrastá-los como feito anteriormente.
Após ter feito isso você poderá adicionar um pageFooter para colocar um rodapé.
O resultado final devera ser como o abaixo:

Salve o relatório com o nome relatorioEco no mesmo diretório do executável e feche o editor de relatórios, feche o programa e remova ou comente a linha:
rptRelatorioECO.DesignTemplate;
Salve seu Projeto e execute o programa, adicione algumas Pessoas e alguns Contatos e veja o resultado final ;).
Para baixar o 9Rays entre no site da empresa: 9Rays
Abraços e espero que tenham gostado e até semana que vem.
Qualquer duvida ou comentários postem no blog afinal está liberada a postagem de comentários sem cadastro no blog.
5 comentários:
Estou com problema no Preview do relatorio. Ao ser executado o mesmo não aparace o resultado esperado, mas ao clicar no botão Show Content o resultado aparece.
O que devo fazer para que no Preview seja mostrado o resultado correto.
Primeiro qual versão do ECO vc esta utilizando ? e do 9rays ?
qual o tipo de aplicaçao ? asp net ou windows forms ?
Grande Abraço,
Diego Garcia
Estou utilizando o VS2008 com C# em WindowsForm e minha versão do 9rays é a 1.7.
Valeu!
Gustavo vou instalar o 9rays aqui e jaja posto a solução pra vc ;)
Grande abraço,
Diego Garcia
Gustavo acabei de fazer o mesmo exemplo q porstei no blog anteriormente porem no vss2008 e funcionou sem problemas !
Porem fiz com a versao mais nova do componente 9Rays que agora não é mais da 9Rays e sim da empresa Perpetuum, utilizei a versao Express do report sharpshoter que é gratuita !
Estou postando o link direto para a aplicação demo que fiz ! tem algumas mudanças no codigo em relaçao a este postado no blog mas nada significativo !
http://www.unitone.com.br/Blog/Arquivos/ecoReportDemo.rar
Grande abraço,
Diego Garcia
Postar um comentário