VB.NET - Usando o BindingSource
O Controle DataGridView suporta o modelo padrão de vinculação dos formulários Windows, e, desta forma pode ser vinculado a uma variedade de fonte de dados. Em muitas circunstâncias você efetuará a vinculação a um componente BindingSource que irá gerenciar os detalhes da interação com a fonte de dados.
O componente BindingSource pode representar qualquer fonte de dados em um formulário Windows e dá a você uma grande flexibilidade quando da seleção ou modificação da localização dos seus dados.
Podemos fazer a vinculação do BindingSource qualquer um dos seguintes objetos/Interfaces:
- Object
- System.Type
- IEnumerable
- ICollection
- IList
- IListSource
- IBindingList
- IBindingListView
Resumindo, o componente BindingSource possui duas funções básicas:
- Usar o método Add para incluir um item ao componente BindingSource
- Definir a propriedade DataSource para uma lista , um objeto ou tipo.
Ambos mecanismos criam um lista fortemente tipada, e , o BindingSource suporte a vinculação simples e complexa de dados como indicada pelas suas propriedade DataSource e DataMember
O BindingSource fornece membros para acessar os dados relacionados. O item atual pode ser retornado através da propriedade Current, e lista inteira pode ser retornada através da propriedade List.
As operações de edição são suportadas no item atual através dos métodos : Current , RemoveCurrent, EndEdit, CancelEdit, Add e AddNew.
Embora o tratamento de valores atualizados é feito automaticamente para todos os tipos de fonte de dados, a classe fornece os eventos CurrentItemChanged and DataSourceChanged, que permitem uma customização.
A fonte de dados que são vinculadas ao BindingSource podem ser percorridas e gerenciadas com a classe BindingNavigator que fornece uma interface para navegação pelos itens da lista. Embora o BindingNavigator possa ser vinculado a qualquer fonte de dados ele foi criado para ser integrado com o BindingSource através da propriedade BindingNavigator.BindingSource
Muitos membros da classe BindingSource operam na lista relacionada representada pela propriedade List, e, simplesmente referencia suas operações para lista relacionada. Desta forma quando o BindingSource esta vinculado a uma implementação customizada de IList, o comportamento dos membros podem diferir do comportamento descrito na documentação da classe. Assim, o método RemoveAt chama IList.RemoveAt. Na documentação o método RemoveAt é descrito considerando que a implementação de IList foi corretamente implementada.
A propriedade padrão para a classe BindingSource é DataSource e o evento padrão é CurrentChanged.
Nota: Como o BindingSource suporta a vinculação a fonte de dados simples e a complexas, a terminologia pode ser confusa. O temo list refere-se a coleção de dados da fonte de dados , item denota um simples elemento. Para fonte de dados complexas os termos equivalentes table e row são usados
Em suma, o componente BingindSource veio para resolver alguns problemas do databinding. Como você já viu, o BindingSource possui as propriedades DataSource e DataMember que você pode definir e vincular ao BindingSource , podendo inclusive alterar o DataSource do BindingSource e a vinculação ainda vai continuar funcionando.
Se você resolver usar o DataGridView para exibir os dados da tabela Customers usando o BindingSource usará o seguinte código:
Dim dgv As
DataGridView = New DataGridView() Dim bs As BindingSource = New BindingSource() bs.DataSource = CustomerTable dgv.DataSource = bs |
Para definir uma visão Mestre/detalhe você pode fazer o seguinte:
bsMaster.DataSource
= ds bsMaster.DataMember = “Customers” bsChild.DataSource = bsMaster ' DataSource -> BindingSource(Mestre) bsChild.DataMember = “CustOrders” ' DataMember -> relation dgvMaster = bsMaster dgvChild = bsChild |
Vejamos agora um exemplo usando o BindingSource juntamente com o DataGridView para exibir os dados da tabela Customers do banco de dados Northwind. Este banco de dados esta presente no SQL Server mas eu estou usando o MSDE.(importei a base de dados Northwind)
Nota: este exemplo foi adaptado da MSDN.
Inicie um novo projeto no VB2005 Express dando ao mesmo um nome adequado. Eu chamei de bindingSourceDataGridView1.
No formulário principal inclua os componentes DataGridView e BindingSource conforme a figura abaixo:
Declare os seguintes Namespaces que serão usados no Projeto Imports System.Data.SqlClientImports System.data
|
A seguir crie um rotina que será responsável pela conexão com o banco de dados seleção dos dados da tabela Customers via instrução SQL e vinculação ao BindingSource para exibição no DataGridView. A rotina exibeDados() recebe um parâmetro string chamado selectCommand
Private Sub exibeDados(ByVal selectCommand As String) Try ' Especifica a string de conexão acessando o banco de dados Northiwnd no ' MSDE na maquina local Dim connectionString As String = _ "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;_ User ID=sa;password=;Data Source=MACORATI\VSDOTNET" 'exemplo de string de conexão para o SQL Server na maquina local acessando Northwind ' "Integrated Security=SSPI;Persist Security Info=False;" + _ ' "Initial Catalog=Northwind;Data Source=localhost" 'Cria um novo data adapter baseado na consulta definida Dim dataAdapter As New SqlDataAdapter(selectCommand, connectionString) ' Cria um command builder para gerar os SQL para atualizar, incluir e ' deletar baseados no selectCommand. Dim commandBuilder As New SqlCommandBuilder(dataAdapter) ' Preenche um novo data table e vincula ao BindingSource. Dim table As New DataTable() table.Locale = System.Globalization.CultureInfo.InvariantCulture dataAdapter.Fill(table) BindingSource1.DataSource = table ' Redimensiona as colunas do DataGridView DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader) Catch ex As SqlException MessageBox.Show("Para rodar este exemplo. Substitua a string de conexão usada _ para um valor válido para o seu sistema.") End Try End Sub |
Finalmente no evento Load do formulário inclua o código vincula o BindingSource ao DataGridView e que chama esta rotina com o parâmetro definindo os dados que desejamos exibir:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Vincula o DataGridView ao BindingSource e carrega os dados do banco de dados Me.DataGridView1.DataSource = Me.BindingSource1 exibeDados("select * from Customers") End Sub |
Executando o projeto teremos o resultado abaixo:
Pegue o projeto completo aqui : bds_dgv1.zip
Eu sei, é apenas VB, mas eu gosto !!!
Rom 7:4 Assim também vós, meus irmãos, fostes mortos quanto à lei mediante o corpo de Cristo, para pertencerdes a outro, àquele que ressurgiu dentre os mortos a fim de que demos fruto para Deus.
Rom 7:5 Pois, quando estávamos na carne, as paixões dos pecados, suscitadas pela lei, operavam em nossos membros para darem fruto para a morte.
Rom 7:6 Mas agora fomos libertos da lei, havendo morrido para aquilo em que estávamos retidos, para servirmos em novidade de espírito, e não na velhice da letra.
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: