Crystal Reports - Mestre-Detalhe com DataSet Tipado
Gerar relatórios usando o Crystal Reports não é uma tarefa complexa, e , já escrevi diversos artigos sobre o Crystal Reports , desde a versão 4.6. Neste artigo vou mostrar como você pode gerar um relatório do tipo Mestre-Detalhe, na verdade um relatório agrupado onde iremos acessar a base de dados Northwind.mdb usando o provedor OleDb e através de um relacionamento entre as tabelas Produtos e Categorias exibir os produtos por categoria com totalização de preço e de unidades em estoque.
Antes de iniciar o projeto do artigo gostaria de repetir aqui a definição de dataset tipado, pois iremos usar dataset tipados neste artigo. Para saber mais sobre o objeto DataSet acompanhe os seguintes artigos :
"Um DataSet tipado é um dataset que é derivado de uma classe DataSet e que usa a informação contida em um arquivo de esquema XML ( .xsd ) para gerar uma nova classe. Toda a informação do esquema ( tabelas , colunas, linhas , etc..) é gerada e compilada neste nova classe DataSet. Como esta nova classe é derivada (herdar) da classe DataSet ela assuem toda a funcionalidade da classe DataSet." (www.macoratti.net)
O esquema XML é um documento escrito em XML que define os tipos, a ordem, a cardinalidade e demais informações sobre os membros de um documento XML. No Visual Studio .NET para adicionar um novo item ao projeto fazemos (Menu Project -> Add New Item), e assun, podemos criar um novo dataSet.
Criando uma conexão com o banco de dados com o Server Explorer
Antes de iniciar este projeto você deverá usar o Server Explorer (Menu View->Server Explorer) para criar uma conexão com o banco de dados Northwind.mdb. Para fazer isto visualize o Server Explorer, e , a seguir no clique no ícone - connect DataBase , e a seguir selecione o provedor Jet 4.0 OLE DB e na aba Conexão informe o caminho do banco de dados conforme figura abaixo:
Veja os detalhes de como fazer isto no artigo : VB.NET - Usando o Server Explorer.
Criando o projeto no VS.NET
Inicie o VS.NET e crie um novo
projeto do tipo Windows Application usando a linguagem VB.NET.
Dê um nome sugestivo ao projeto , eu dei o seguinte nome ao projeto :
rptMestreDetalhes
Altere o nome do formulário padrão para frmProdutosCategorias.vb
A primeira coisa a fazer é criar o dataset tipado que vou chamar de ProdutosCategorias.
Para iniciar clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add -> Add New Itetm.
Na janela - Add New Item - selecione o template : DataSet nomeando como ProdutosCategorias.xsd
A seguir abra o Server Explorer, e, selecionando a conexão que você já deve ter criado anteriormente , abra de forma que as tabelas fique visíveis; a seguir arraste as tabelas Products e Categories para o Descritor DataSet. Serão criadas as estruturas das tabelas. Usando o campo CategoryID crie um relacionamento entre a tabela Categories e a tabela Products conforme a figura abaixo:
O próximo passo e criar um elemento Crystal Reports no projeto. Para isto clique sobre o nome do projeto com o botão direito do mouse e selecione as opções Add -> Add New Item. Na janela Add New Item - selecione o template CrystalReports dando a ele o nome de rptProdutosCategorias.
O assistente do Crystal Reports entrará em ação. Na aba Data selecione em Project Data| ADO.NET Datasets os nomes das tabelas que vamos usar no relatório : Categories e Products.
Na guia Fields selecione os campos que vão ser exibidos no relatório conforme figura abaixo:
Na guia Group vamos agrupar o relatório por categorias , para isto selecione o campo : CategoryName da tabela Categories conforme figura a seguir.
Como desejamos exibir os totais para o preço e para as unidades em estoque , na guia Total, selecione os campos UnitPrice e UnitsInStock conforme abaixo.
A Seguir clique no botão Finish e o descrito do relatório será exibido. Você pode editar o relatório efetuando as alterações que julgar necessárias.
A próxima etapa será incluir um visualizador para o relatório no projeto. Para isto na Tool Box selecione o componente CrystalReportsViewer e o inclua no formulário do projeto adequando o seu tamanho ao tamanho desejado. O nome dado ao visualizador foi rptvProdutosPorCategoria
Finalmente podemos partir para a geração do relatório incluindo o seguinte código no formulário.
Private Sub GerarRelatorio() 'definir as variáveis para conexão Dim OleDbConn As OleDbConnection Dim OleDbDaProd As OleDbDataAdapter Dim OleDbDaCate As OleDbDataAdapter 'cria uma instância do dataset vinculado ao arquivo ProdutosCategorias.xsd Dim dsPc As New ProdutosCategorias Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\Northwind.mdb" Dim sqlCategorias As String = "Select * From Categories" Dim sqlProdutos As String = "Select * From Products" Try 'Criar os DataAdapters OleDbConn = New OleDbConnection(strConn) OleDbDaCate = New OleDbDataAdapter(sqlCategorias, OleDbConn) OleDbDaProd = New OleDbDataAdapter(sqlProdutos, OleDbConn) 'Preencher as tabelas do dastaset a partir dos dataAdaperts OleDbDaCate.Fill(dsPc, "Categories") OleDbDaProd.Fill(dsPc, "Products") 'Gerar o relatório a partir do dataset e exibí-lo Dim rptPc As New rptProdutosCategorias rptPc.SetDataSource(dsPc) rptvProdutosPorCategoria.ReportSource = rptPc Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub
|
O código acima pode ser chamado de um evento Load do formulário.
O código que vale a pena destacar é o seguinte :
- criamos uma instância do relatório rptProdutosCategorias chamada rptPC
- Atribuímos a fonte de dados do relatório como sendo do DataSet - dsPc - instanciado a partir da classe ProdutosCategorias
- Atribuímos o objeto rptPc como fonte do visualizador - rptvProdutosPorCategoria
O resultado obtido pode ser visto a seguir:
Existem muitas outras formas de criar relatórios usando o Crystal Reports no VB.NET , esta é apenas uma delas.
Pegue o projeto completo aqui : rptMestreDetalhes.zip
Até o próximo artigo VB.NET
Referências:
José Carlos Macoratti