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.

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 :

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