VB.NET 2005 - Usando Múltiplas tabelas com DataGridView


Este artigo vai mostrar como você pode efetuar a exibição de dados usando múltiplas tabelas relacionadas usando o DataGridView sem precisar digitar um única linha de código.

Nosso objetivo será exibir os dados dos clientes, dos pedidos e seus detalhes do banco de dados Northwind.mdb. Eu poderia ter usando qualquer outro banco de dados mas optei por usar um banco de dados Access por uma questão de simplicidade.

Abrindo o banco de dados Northwind.mdb no Access e exibindo os relacionamentos obtemos o seguinte resultado:

Nosso objetivo será exibir apenas os dados dos clientes, seus pedidos e os detalhes destes pedidos, desta forma , podemos simplificar a visão dos relacionamentos com a qual iremos trabalhar excluindo as demais tabelas e ficando apenas com as tabelas : Customers(Clientes), Orders(Pedidos) e Orders Details(Detalhes do Pedido).

Criando o projeto no VB 2005

Inicie um novo projeto no Visual Basic 2005 Express com o nome mestreDetalhesNET. A seguir vamos começar criando um DataSource com base nas tabelas que possuem as informações que desejamos tratar. Para isto na janela Solution Explorer selecione a guia Data Sources e clique na opção Add New Data Source... Será apresentada pelo assistente  uma janela onde você deve escolher o tipo da conexão; selecione DataBase e clique no botão Next>.

A seguir o assistente apresenta a janela para você escolher a conexão com a fonte de dados. Se ela já existir basta selecionar a conexão na caixa de combinação, caso contrário clique no botão New Connection... e na janela Add Connection primeiro clique no botão Change para alterar o fonte de SQL Server para Microsoft Access; a seguir clique no botão Browse... para selecionar o banco de dados northwind.mdb e para encerrar clique no  botão OK.   

Selecionando uma conexão já existente Criando uma nova conexão

A seguir na janela de configuração do Data Source selecione as tabelas Customers, Orders e Orders Details e use o nome NorthwindDataSet para o Data Source que será criado. Clique no botão Finish.

Selecionando as tabelas com as quais iremos trabalhar

Será criado o Data Source contendo as tabelas selecionadas. Para visualizar o data source clique sobre o nome do mesmo na janela Solution Explorer e escolha a opção Edit DataSet with Designer. Você terá a visão das tabelas já exibindo seus relacionamentos conforme figura abaixo. O VB 2005 já cria os relacionamentos entre as tabelas e determina as chaves primárias , nas versões anteriores você tinha que criar os relacionamentos manualmente.

Nota: Se você clicar sobre as linhas dos relacionamentos e selecionar a opção Show Relations Labels os nomes dos relacionamentos serão exibidos sobre as linhas.

Agora vamos criar no formulário a interface contendo os controles para exibição dos dados relacionados.Na janela Solution Explorer, guia Data Sources, selecione a tabela Customers e selecione a opção Details pois queremos ter uma visão detalhada dos dados dos clientes. Arraste a seguir o data source para o formulário padrão do projeto. Os campos do data source referentes a tabela Customers serão exibidos com seus respectivos nomes em caixas de Texto , conforme abaixo:

 

Agora vamos incluir os dados da tabela pedidos(Orders) para isto selecione o data source Orders e selecione a opção DataGridView pois os dados serão exibidos no controle DataGridView. A seguir arraste o data source Orders para o formulário. Será criado um DataGridView contendo as colunas referente aos campos da tabela Orders.

Repetiremos o processo para incluir os dados da tabela Orders Details; para isto selecione o data source Orders Details e escolha a opção DataGridView pois os dados serão exibidos no controle DataGridView. A seguir arraste o data source Orders Details para o formulário. Será criado um DataGridView contendo as colunas referente aos campos da tabela Orders Details.

Ao final teremos os seguintes objetos criados no formulário:

Se executarmos o projeto neste momento iremos obter o formulário da figura abaixo onde temos os dados dos clientes seus pedidos e os detalhes dos pedidos sendo exibidos de forma relacionada, de maneira que movendo-se para outro cliente os seus respectivos pedidos e detalhes serão exibidos na interface.

Que tal se pudéssemos incrementar o nosso exemplo incluindo um filtro  de forma a exibir somente os registros para um determinado pais (country). A idéia é criar na interface uma caixa de texto para que o usuário informe a sigla do país que deseja filtrar. Vamos ao trabalho...

Volte ao projeto e selecione o formulário, clique sobre a caixa de texto referente ao pais e no menu Data selecione a opção Add Query...

Na janela Search Criteria Builder , selecione a tabela que será usada como fonte de dados, no nosso caso , a tabela Customers. Em seguida altere o nome da query(consulta) para FillByCountry.

Agora o mais importante ; na caixa de texto - Query Text: informe a instrução SQL que irá selecionar todos os registros da tabela Customers para um determinado Pais informado. Veja abaixo a instrução SQL criada e perceba que como usamos uma base de dados Access o parâmetro esta informado com uma interrogação (?).  Incluímos a instrução: WHERE Country LIKE ?. (No SQL Server seria diferente)

Se você desejar pode clicar no botão Query Builder e criar a consulta conforme abaixo. Note o botão Execute Query onde você pode testar a consulta e ver o resultado obtido conforme a figura abaixo

A janela Query Builder onde você pode montar a instrução SQL O resultado da execução da consulta para o país igual USA.

Ao concluir a consulta será incluído no formulário um novo controle ToolStrip chamado FillByCountryToolStrip. Como já temos um controle ToolStrip teremos que rearranjar ambos os controles conforme abaixo. Para fazer isto define a propriedade Dock de ambos como None e com o mouse arraste os controles conforme abaixo:

Se observamos a estrutura do dataset (opção Edit DataSet with Designer da janela Data Sources) veremos que a consulta foi incluída no CustomersTableAdapter conforme abaixo:

O esquema exibindo as tabelas, os nomes dos relacionamentos e a nova consulta FillByCountry criada

Executando o projeto e informando Brazil como critério para o filtro na caixa de texto iremos obter o seguinte resultado:

Nota: para alterar os nomes das colunas do DataGridView selecione o controle e clique na opção Edit Columns. A seguir na janela Edit Columns altere a propriedade Headertext conforme abaixo:

Vou fazer uma pergunta : Quantas linhas de código você teve que digitar ????

Você foi arrastando e soltando e configurando e quando viu tudo estava pronto... legal não é mesmo !!!

Não pense que toda esta facilidade não tem um preço. Tem, e, em artigos futuros voltaremos a este assunto.

Eu sei é apenas VB.NET mas eu gosto...


José Carlos Macoratti