VB.NET - Gerando relatórios via Crystal Reports usando DataSet


Vamos criar uma aplicação usando o VS.NET 2003 que tem o objetivo de gerar um relatório exibindo os dados de duas tabelas. Para alcançar tal proeza vou carregar os dados de duas tabelas do banco de dados Northwind.mdbProducts e Categories e criar um único DataSet em tempo de execução.

Iremos criar também um relatório no Crystal Reports que será gerado em tempo de execução com os dados obtidos a partir do DataSet criado acima e exibindo os Produtos por categorias. Parece simples , não é mesmo ?  É na verdade é muito simples. Basta seguir o tutorial a seguir:

Criando o projeto no VS.NET 2003

O nosso projeto será composto por dois formulários Windows : form1.vb e form2.vb (o ideal é sempre nomear os controles com nomes mais sugestivos do que o que estarei usando),  assim constituídos:

Controle Nome
Form1
Button Button1 (Exibir Relatório)
Form2
MainMenu MainMenu1 ( Sair )
CrystalReportViewer CrystalReportViewer1

1- Abra o VS.NET 2003 e clique no botão New Project informando o nome crDSNet ao projeto. No formulário padrão form1.vb, inclua um botão de comando conforme abaixo:

Inclua no evento Click do botão de comando Button1 o seguinte código:
 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 

      Dim frm As New Form2

      frm.Show()


End
Sub

2- Vamos agora abrir o Server Explorer ; podemos fazer isto através do Menu View ou clicando no ícone com dois computadores a esquerda acima da barra de ferramentas. O SE deverá aparecer ao lado esquerdo do IDE. Você pode configurar para mantê-lo aberto ou para deslizar automaticamente para fora do seu campo visual quando não precisar mais dele (recomendo esta opção).

Se ainda não existir uma conexão com o banco de dados Northwind.mdb clique no botão - Connect to DataBase e configure a conexão selecionando , no primeiro passo o provedor OLE DB e a seguir o local e nome do banco de dados. Desta forma criamos uma conexão com o banco de dados permitindo o acesso as suas tabelas.

 

3- Clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add -> Add New Item

4- Na janela - Add New Item - selecione o template DataSet, informando o nome ProdutosDS.xsd.

5- Estando na janela ProdutosDS.xsd na visão -DataSet- abra o Server Explorer e expanda a conexão criada. A seguir exiba as tabelas expandindo o objeto Table e arraste a tabela Products e a tabela Categories para página ProdutosDS.xsd  conforme figura abaixo:

6- Clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add -> Add New Item

7- Na janela - Add New Item - selecione o template Crystal Reports, informando o nome Produtos.rpt.

8- Ao clicar no botão Open , o assistente do Crystal Reports , será aberto. Selecione a opção : As a Blank Report e clique em OK.

9- Com o relatório em branco aberto , clique com o botão direito do mouse sobre o relatório e selecione a opção : Add/Remove DataBase

10- Na janela DataBase Expert , selecione a opção OLE DB e clique sobre o sinal de (+) ao lado da pasta. E a seguir na janela OLE DB (ADO) selecione o provedor Microsoft Jet 4.0 OLE DB Provider.

11- Na próxima janela informe o nome do banco de dados (Northwind.mdb) na caixa de texto : DataBase Name e a seguir clique em Concluir.

12- A seguir na janela DataBase Expert, na guia Data, expanda as tabelas que serão exibidas , selecione as tabelas Products e Categories e clique no botão com a seta para incluir as tabelas na visão - Selected Tables:

13 - Se você clicar na aba Links verá as duas tabelas e o relacionamento entre elas sendo exibido conforme abaixo:

Com o relatório produtos.rpt aberto selecione os campos da janela Field Explorer que irão compor o relatório desejado. No nosso caso eu vou usar somente os campos CategoryName e Productname e incluir um grupo de forma a exibir os produtos por categorias:

Acima temos o relatório - produtos.rpt - pronto para ser utilizado. Podemos salvar o relatório do projeto.

Inclua agora um novo formulário no projeto via menu Project -> Add Windows Form, e inclua no formulário os controles MainMenu e CrystalReportView a partir da ToolBar conforme abaixo:

Vamos incluir o seguinte código no evento Load do formulário form2.vb:

Nota: Não esqueça do imports:  Imports System.Data.oledb

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


Dim oCon As OleDbConnection

Dim dt1, dt2 As OleDbDataAdapter

Dim ds As DataSet

Dim con As String

Dim sql As String


con = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =d:\teste\northwind.mdb"

oCon = New OleDbConnection(con)

oCon.Open()


sql = "Select * from Products"

dt1 = New OleDbDataAdapter(sql, con)

ds = New DataSet

dt1.Fill(ds, "Produtos")


sql = "Select * from Categories"

dt2 = New OleDbDataAdapter(sql, con)

dt2.Fill(ds, "Categorias")


Dim
rpt As New produtos

rpt.SetDataSource(ds)

CrystalReportViewer1.ReportSource = rpt


oCon.Close()

dt1.Dispose()

dt2.Dispose()

ds.Dispose()


End
Sub

Finalmente inclua um Item no Menu chamado Sair e no evento click do mesmo inclua o seguinte código:

Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click

   
Me.Close()
End Sub

Ao rodar a aplicação o formulário form1.vb será exibido e quando o usuário clicar no botão de comando teremos a carga do formulário form2.vb e da exibição do relatório:

VB.NET , é fácil, é simples, é legal. Divirta-se... 


José Carlos Macoratti

1