LINQ to SQL  -  Revisitando o DataBinding


Neste artigo eu estou revisitando o DataBinding em tempos de LINQ To SQL para mostrar como ficou o DataBinding quando usado com os recursos do LINQ to SQL. Com certeza ficou mais simples.

Os fundamentos do DataBinding permanecem o mesmo e as etapas a realizar também. A diferença, que você mesmo vai notar, é que com o LINQ to SQL o caminho que o desenvolvedor tem que percorrer ficou mais limpo, suave sem as preocupações de gerenciar os objetos da ADO .NET como conexões, comandos, dataadatpers, etc...

A seguir temos as etapas que iremos seguir para criar a aplicação exemplo deste artigo :

Eu estou usando o Visual Basic 2008 Express Edition e o banco de dados SQL Server 2005 Express Edition (tá na hora de mudar para o SQL Server 2008 !!!).

Para este exemplo eu  vou usar  um banco de dados criado no SQL Server 2005 chamado Cadastro.mdf e a tabela Produtos.

Abra o Visual Basic 2008 Express Edition e no menu File selecione New Project;

A seguir selecione o projeto do tipo Windows Application usando a linguagem Visual Basic com o nome Linq_DataBinding;

A seguir clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add New item;

Na janela Templates selecione o item Service-based DataBase com o nome Cadastro.mdf;

A seguir crie a tabela Produtos com a estrutura definida abaixo:

Ao final destas etapas teremos o projeto exibindo na janela Solution Explorer o formulário form1.vb e o banco de dados Cadastro.mdf conforme a figura abaixo:

Agora que já temos o banco de dados SQL Server criado vamos incluir uma referência ao LINQ to SQL. Clique com o botão direito do mouse sobre o nome da solução e selecione a opção Add New Item:

A seguir selecione o template LINQ to SQL classes e informe o nome PRODUTO.dbml conforme a seguir:

O descritor do LINQ to SQL será aberto. Arraste a tabela produtos para a primeira região vazia do descritor para que seja gerada o entidade Produto através do mapeamento objeto relaciona com a tabela Produtos.

A segunda região pode ser usada para mapear métodos através de stored procedures. Como não temos este recurso no nosso exemplo vamos esconder esta janela. Para esconder a janela clique na região como botão direito do mouse e selecione Hide Methods Pane.

Vamos agora alterar o nome das propriedades da entidade Produto selecionando a propriedade e na janela de propriedades alterando sua propriedade name. Ao final teremos a entidade com as propriedades alteradas conforme a figura abaixo. Note que a tabela Produtos não foi afetada pois estamos alterando a nossa entidade Produto.

Altere também o nome da entidade de Produto para PRODUTO conforme a figura abaixo:

Selecione o formulário form1.vb e inclua a partir da ToolBox os seguintes componentes:

Defina a propriedade BindingSource do controle BindingNavigatorProdutos como sendo igual a BindingSourceProdutos;

Agora precisamos carregar os dados e efetuar o databinding, para isso vou usar o evento Load do formulário e definir a rotina carregaDados() que irá efetuar a consulta LINQ e efetuar e chamar a rotina que realiza o databinding.

 

A primeira coisa a fazer é definir uma variável dc do tipo DataContext a nível de escopo do formulário:

Dim dc As New PRODUTODataContext

A seguir no evento Load do formulário chamamos a rotina carregaDados();

 

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

    carregadados()

End Sub

 

A rotina carregaDados efetua uma consulta LINQ selecionando todos os produtos da entidade PRODUTOs (Note que LINQ adicionou um s ao nome da entidade),  e em seguida atribui o resultado ao BindingSourceProdutos chamando a rotina criardatabinding()

 

Private Sub carregadados()
 

Dim consulta = From p In dc.PRODUTOs _

                      Select p
 

BindingSourceProdutos.DataSource = consulta


criardatabinding()
 

End Sub

 

A rotina criardatabinding efetua o databinding para cada controle TextBox do formulário ao seu respectivo item na entidade Produto;

 

Private Sub criardatabinding()
 

Me.txtCodigo.DataBindings.Add("Text", BindingSourceProdutos, "ProdutoID")

Me.txtNome.DataBindings.Add("Text", BindingSourceProdutos, "nomeProduto")

Me.txtPreco.DataBindings.Add("Text", BindingSourceProdutos, "precoProduto")

Me.txtEstoque.DataBindings.Add("Text", BindingSourceProdutos, "estoqueProduto")

Me.txtCategoria.DataBindings.Add("Text", BindingSourceProdutos, "categoriaProduto")
 

End Sub

Com isso já podemos executar o projeto para vermos os registros sendo exibidos no formulário e efetuar a navegação pelos mesmos;

Para podermos incluir , excluir e alterar dados usando o databinding vamos incluir um novo Button na barra BindingNavigator, definir uma imagem para o Button e alterar a sua propriedade Name para SaveItem;

No evento Click deste Button inclua o código a seguir:

Private Sub saveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles saveItem.Click

Me.BindingSourceProdutos.EndEdit()
dc.SubmitChanges()

End Sub

Neste código estamos encerrando qualquer edição pendente e chamando o método SubmitChanges do DataContext para persistir as informação na tabela Produtos.

O método SubmitChanges calcula o conjunto de objetos modificados para serem inseridos, atualizados ou excluídos e executa os comandos apropriados para implementar as alterações para o banco de dados.

Poderiamos incrementar o exemplo criando uma consulta por categoria usando o LINQ mas deixo isso como um exercício.(Eu implementei a consulta no projeto em anexo.)

Pegue o projeto completo aqui:   Linq_To_SQL_DataBinding.zip

Eu sei é apenas LINQ to SQL, mas eu gosto...

Referências:


José Carlos Macoratti