VB 2005  - Passando dados entre formulários em aplicações Windows


Se você usava as versões anteriores do Visual Basic provavelmente já realizou a tarefa de passar dados entre formulários diversas vezes. Em tempos de .NET bateu a dúvida . Como posso fazer a mesma coisa agora no VB 2005.

Neste artigo eu estou usando o Visual Basic 2005 Express Editon e o banco de dados Northwind.mdb (conhece?).

Para iniciar vamos desenhar o cenário no qual vamos atuar:

- Vamos usar as tabelas Customers e Orders do banco de dados Northwind.db;
- Em um formulário vamos exibir os dados da tabela Customers em um controle DataGridView;
- Em um segundo formulário vamos exibir os dados da tabela Orders;

Objetivo : Permitir que o usuário selecione um Cliente no primeiro formulário e exiba os dados do Pedido do cliente no segundo formulário.

Neste artigo você vai aprender a:

Criando um novo projeto WIndows Forms

1- Abra o Visual Basic 2005 Express Edition e a partir do menu File selecione a opção New Project ;

2- Na janela New Project selecione o template Windows Application dando ao projeto nome de : dadosEntreFormularios;

3- No menu Data selecione a opção Show Data Sources (Shift+Alt+D);   

4- Na janela Data Sources , selecione Add New Data Sources para iniciar o assistente de configuração;

5- Na página Choose a Data Source Type selecione DataBase e clique no botão Next>

6- Na janela Choose Your Data Connection , seleciona a conexão com o banco de dados Northwind.mdb e expanda a opção Connection String para ver a string de conexão usada;

Nota: Se ainda não existir uma conexão com o banco de dados clique no botão New Connection e na janela Add Connection selecione o banco de dados Microsoft Access e selecione o caminho e nome do banco de dados.

7- Na próxima janela salve a string de conexão com o nome sugerido : NorthwindConnectionString e clique no botão Next>

8- Expanda o objeto Tables e selecione as tabelas Customers e Orders clicando a seguir no botão Finish.

Ao final veremos criado na janela Solution Explorer o esquema NorthwindDataSet.xsd e na janela Data Sources as tabelas Customers Orders.

Exibindo os dados da tabela Customers no primeiro formulário

Vamos exibir os dados da tabela Customers no formulário.

A partir da janela Data Source arraste e solte a tabela Customers no formulário:

Será criado no formulário um DataGridView e um tool strip para navegação pelos registros. Serão criados também os seguintes objetos:

Criando o segundo formulário para exibir os dados dos pedidos

A partir do menu Project selecione a opção Add Windows Forms e inclua um novo formulário ao projeto usando o nome padrão form2.vb

A partir da janela Data Sources arraste e solte a tabela Orders para formulário form2.vb e exclua o objeto OrdersBindingNavigator do formulário:

Quando arrastamos a tabela Orders para o formulário se observamos a bandeja de componentes abaixo do formulário vemos que ele adicionou quatro componentes ao formulário.  NorthwindDataSet,  OrdersTableAdapter, OrdersTableAdapter que é usado para preencher a tabela OrdersDataTable do NorthwindDataSet com dados do banco de dados.

Até mesmo a única linha de código para executar esse Fill (preenchimento) já foi escrita e automaticamente adicionada ao manipulador de eventos Load de Form1. (Confira)

Incluindo uma consulta no TableAdapter

Vamos incluir uma consulta no objeto TableAdatper para carregar os pedidos a partir de um cliente selecionado no primeiro formulário.

Na janela Solution Explorer clique duas vezes sobre o dataset NorthwindDataSet.xsd; a seguir clique com o botão direito do mouse sobre OrdersTableAdapter e selecione Add -> Query;

Na janela do assistente aceite a opção marcada - Use Select Statements - e clique no botão Next>

Na janela Choose a Query Type marque a opção - SELECT which returns rows - e clique em Next>

Na próxima tela do assistente inclua a cláusula WHERE para consultar os pedidos com base no código do cliente (CustomerID):

WHERE (CustomerID = ?)   Nota: Se fosse um banco de dados SQL Server teríamos que usar a sintaxe: WHERE (CustomerID = @CustomerID)

Na tela seguinte desmarque a opção - Return a DataTable e informe o nome do método Fill DataTable como: FillByCustomerID;

Clique em Finish para encerrar.

Se você olhar no esquema NorthwindDataSet.xsd verá a nova consulta : FillByCustomerID(CustomerID) criada. Esta consulta recebe como parâmetro o código do cliente(CustomerID).

Você usa o TableAdapter para se conectar a um banco de dados e executar consultas (ou procedimentos armazenados) nesse banco de dados, bem como para preencher com dados um DataTable associado. Cada par DataTable-TableAdapter é indicado simplesmente como um TableAdapter.

O TableAdapter é essencialmente um invólucro ao redor de um DataAdapter padrão, que oferece vários benefícios:

A mesma classe TableAdapter pode ser usada em mais de um formulário ou componente para que qualquer alteração em consultas/comandos seja automaticamente refletida em todas as instâncias. Essa situação é diferente da existente, na qual cada componente que acessa o banco de dados deve ter seu próprio DataAdapter configurado individualmente. Dessa forma, fica muito mais fácil garantir a sincronização de DataTables e DataAdapters.
 
Em vez de usar vários DataAdapters (ou código de comutação artesanal) para ter várias consultas/comandos para um único DataTable, um TableAdapter permite definir facilmente vários comandos para um DataTable específico.

Jackie Goldstein - Renaissance Computer Systems

Clique duas vezes no formulário form2.vb e substitua o método Form_Load pelo seguinte método:

Friend Sub carregaPedidos(ByVal CustomerID As String)

     Me.OrdersTableAdapter.FillByCustomerID(NorthwindDataSet.Orders, CustomerID)

End Sub

Com isso estamos executando a consulta FilByCustomerID na carga do formulário passando o código do cliente (CustomerID) para que somente os pedidos do respectivo cliente sejam selecionados.

Voltemos agora ao formulário form1.vb.

Inclua a seguinte rotina no evento DoubleClick do controle DataGridView:

Private Sub CustomersDataGridView_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles CustomersDataGridView.DoubleClick

Dim linhaSelecionadaVisao As Data.DataRowView

Dim linhaSelecionada As NorthwindDataSet.CustomersRow

linhaSelecionadaVisao = CType(CustomersBindingSource.Current, System.Data.DataRowView)
linhaSelecionada = CType(linhaSelecionadaVisao.Row, NorthwindDataSet.CustomersRow)

Dim pedidos As New Form2
pedidos.carregaPedidos(linhaSelecionada.CustomerID)
'exibe o formulário com os dados do pedido para o cliente selecionado
pedidos.Show()   'pedidos.ShowDialog() abre um formulário modal

End Sub

Um DataRowView representa uma visão customizada de um DataRow; Um DataRow representa uma linha de um DataTable.

Ao executarmos o projeto, o formulário form1.vb será carregado exibindo os dados da tabela Customers. Clicando duas vezes sobre um cliente no DataGridView o formulário form2.vb será exibido com os pedidos do cliente selecionado conforme figura abaixo:

Pegue o projeto completo aqui :

Aguardo você no próximo artigo VB.NET...


José Carlos Macoratti