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:
Criar um DataSource diretamente na sua aplicação
Criar uma conexão com a fonte de dados
Selecionar os dados da fonte de dados e o modo de exibição no formulário Windows
Criar procedimentos armazenados para selecionar dados específicos
Criar uma interface amigável com o mínimo de código possível
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:
NorthwindDataSet - è uma instância do dataset tipado que o assistente criou no momento da construção do Data Source e possui uma classe com as descrições dos campos.
ProductsTableAdapter - Criada no momento da criação do dataset tipado acima. É uma classe que é diretamente ligada a tabela Products do DataSet tipado. Ela realiza o trabalho de preencher a tabela local, fazer as atualizações na fonte de dados , etc.
ProductsBindingSource - Representa uma instância do objeto BindingSource encapsulando o papel do DataSource. Para saber mais leia também o artigo : VB.NET - BindingSource e DataGridView.
ProductsBindingNavigator - Representa uma instância do objeto BindingNavigator e permite efetuar as operações básicas nos registros vinculados aos controles do formulário Windows.
Se você abrir o código do formulário verá que o assistente gerou o seguinte código:
Public Class Form1Private Sub ProductsBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProductsBindingNavigatorSaveItem.Click
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