ADO.NET 2.0 - DataBinding Revisitado


Revendo os conceitos básicos do DataBinding no ADO.NET 2.0 , passo a passo estarei mostrando como você pode realizar as seguintes tarefas:

Você pode fazer tudo o que foi descrito acima usando os assistentes do VB 2005 mas vamos além, procurando explicar o que esta ocorrendo por trás dos panos, e, como você pode alterar o código para personalizar sua aplicação.

Vamos começar criando um novo projeto do tipo Windows Application usando a linguagem VB.NET. Dê um nome sugestivo ao projeto. Eu vou chamá-lo de dbNET2.

Vamos usar um recurso novo do VB2005 que nos permite criar um DataSource em nosso projeto usando o assistente.  Selecione a guia DatSources e clique em Add new Data Source. O assistente de configuração DataSource irá aparecer. Selecione o item DataBase e clique no botão Next > .

A seguir vamos incluir uma nova conexão usando o banco de dados Northwind.mdb:(Você pode usar qualquer fonte de dados)

Clique no Botão Change pois vamos alterar o Data Source para acessar um banco de dados Access visto que o padrão é o acesso ao SQL Server.

Em (1) alteramos o Data Source para Microsoft Access Database File

Em (2) indicamos a localização do banco de dados, no meu caso é : d:\teste\Northwind.mdb (no seu caso deve ser diferente)

Vamos agora selecionar a tabela Products conforme a figura abaixo:

Após a seleção a janela Solution Explorer irá exibir o DataSet criado e na janela DataSource teremos a tabela com seus respectivos campos:

Note que cada campo possui um indicador de tipo de controle como sendo um TextBox, podemos alterar o tipo de controle que irá exibir o campo clicando o sobre o campo e selecionando o campo da relação suspensa ou clicando na opção customize , conforme abaixo,:

Na janela Options basta selecionar o tipo de controle desejado. Estou selecionando o tipo MaskedTextBox pois quero exibir o campo unitPrice formatado.

Pronto. Agora basta selecionar o tipo de campo incluído.

Para criar a interface com os dados da tabela products basta selecioná-la a arrastá-la para formulário, mas , antes vou mudar o modo para de apresentação de DataGridView para Details para poder exibir os campos como detalhes:

Vapt Vupt ! O assistente cria para você uma a Barra de Navegação com as opções padrão : incluir, excluir e salvar dados além da navegação pelos registros. E todos os campos no formulário usando os tipos de controles definidos para cada um deles.

Perceba que foram criados também 4 novos objetos no formulário conforme exibido acima. Vejamos qual o papel de cada um deles:

Se você abrir o código do formulário verá que o assistente gerou o seguinte código:

Public Class Form1
 

Private Sub ProductsBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProductsBindingNavigatorSaveItem.Click


   Me
.Validate()

   Me.ProductsBindingSource.EndEdit()

   Me.ProductsTableAdapter.Update(Me.NorthwindDataSet.Products)

End Sub

 

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

   'TODO: This line of code loads data into the 'NorthwindDataSet.Products' table. You can move, or remove it, as needed.

   Me.ProductsTableAdapter.Fill(Me.NorthwindDataSet.Products)

End Sub

 

End Class

No evento Load temos a carga dos dados da tabela Products para o Adaptador.

No evento Click do Botão Save da Barra de Menu do formulário temos o código que efetua a validação, encerra a edição e salva os dados na tabela.

Podemos também incluir novamente a mesma tabela no modo DataGridView. Vamos fazer isto usando um controle TabControl para termos duas visões dos dados: uma na guia, Detalhes Produtos,  usando o modo Details exibindo os campos individuais da tabela para cada registro e outra, na guia, Todos os Produtos, usando o modo DataGridView exibindo a relação dos produtos.

Para não permitir a edição dos dados no modo DataGridView use o Smart Tag e desabilite as opções de edição conforme figura abaixo:

Vamos agora incluir uma nova funcionalidade: o filtro de um determinado produto pelo seu código. A idéia é permitir que o usuário digite o código do produto e clique em um botão procurar para que seja exibido somente os dados daquele produto.

Para fazer isto vamos incluir uma nova Consulta(Query). Clique com o botão sobre o controle ProductsBindingSource e na Smart Tag selecione a opção Add Query.

Na janela Search Criteria Builder vamos criar um procedimento armazenado que deverá receber como parâmetro o código do produto. Veja abaixo como foi criado a instrução SQL para este fim.

Ao clicar no botão OK o Assistente irá criar uma nova barra com uma caixa de texto onde será informado o código do Produto e um botão de comando que acionará a busca na tabela Products. Veja abaixo a barra personalizada.

O assistente também cria um novo objeto chamado CodigoProdutoToolStrip que possui o seguinte código:

Private Sub CodigoProdutoToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CodigoProdutoToolStripButton.Click
 

Try

   Me.ProductsTableAdapter.CodigoProduto(Me.NorthwindDataSet.Products, CType(ProductIDToolStripTextBox.Text, Integer))

Catch ex As System.Exception

   System.Windows.Forms.MessageBox.Show(ex.Message)

End Try

End Sub

Abaixo temos o código do evento Load do formulário que agora esta tratando o evento Click do botão de comando recém incluído.

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

    'TODO: This line of code loads data into the 'NorthwindDataSet.Products' table. You can move, or remove it, as needed.         Me.ProductsTableAdapter.Fill(Me.NorthwindDataSet.Products)

End Sub

Para permitir que após ter efetuado o filtro dos dados o formulário exiba novamente todos os registros da tabela inclui um botão - Exibe Todos - na barra de tarefas do formulário e inclui o tratamento do evento CLick deste botão juntamente com o evento Load do formulário. Assim ao clicar no botão o código - Me.ProductsTableAdapter.Fill(Me.NorthwindDataSet.Products) - será executado preenchendo a tabela novamente.

Acima vemos o filtro em ação para o produto de código 10 no modo Details e abaixo no modo DataGridView.

Clicando no botão - Exibe Todos - retornamos a exibir todos os registros da tabela:

Como viste, acabaste de criar uma aplicação em poucos minutos, que se fosse feita na versão anteriores do VB, certamente levaria horas...

Até o próximo artigo...

referências:

- VB.NET - DataBinding : Sincronização automática com Mestre Detalhe
-
VB.NET 2005   - Criando a base de dados, as tabelas e os relacionamentos no VB2005
- VB.NET 2005   - Explorando a exibição Mestre-Detalhes ao extremo.
-
VB 2005 - Usando o DataGridView.


José Carlos Macoratti