VB 2005 - Exibindo dados vinculados em controles Windows Forms


Embora seja uma tarefa relativamente simples, exibir dados vinculados em controles Windows Forms ainda desperta muitas dúvidas para quem esta começando a usar o VB 2005.

Vejamos o seguinte cenário: Você possui um formulário contendo um controle ComboBox que deseja preencher com os dados de uma tabela. Apos o preenchimento você deseja poder selecionar um item da ComboBox e exibir os detalhes dos dados relacionados em controles TextBox do mesmo formulário.

Vamos usar como exemplo a tabela Customers do banco de dados Northwind usando o SQL Server 2005 Express. Se você instalar o SQL 2005 Express vai perceber que este banco de dados não esta presente. Você deve efetuar o download deste arquivo no link: http://www.microsoft.com/downloads/details.aspx?familyid=06616212-0356-46a0-8da2-eebc53a68034&displaylang=en.

Após isto crie um novo projeto no VB 2005 com o nome de exibeDadosCombo e no formulário padrão form1.vb , inclua um controle combobox e alguns controles TextBox que deverão exibir os dados da tabela Customers. O leiaute deverá parecer assim:

A seguir utilize os seguinte namespace para poder usar os objetos de acesso a dados:

imports System.Data.SqlClient

Vamos declarar os objetos usados no projeto:

Private conn As SqlConnection
Private dAdapter As SqlDataAdapter
Private dvm As DataViewManager
Private dset As DataSet

A seguir defina uma função para retornar a string de conexão com a base de dados:

Function criaStringConexao() As String
Dim stringConexao As String
stringConexao = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True"
Return stringConexao
End Function

Nota: Verifique a string de conexão na sua máquina local. (Poderíamos ter armazenado a string de conexão no arquivo web.config)

A seguir vamos criar uma rotina para preencher a combobox :

Private Sub preencheCombo()
Try
'abre a conexão com o banco de dados
conn = New SqlConnection(criaStringConexao)
conn.Open()
Catch ex As SqlException
MessageBox.Show(("Erro na conexão ..." + ex.Message))
End Try

Dim sqlStr As String = "SELECT * FROM Customers"

'Instancia um DataAdapter passandoo a instrucao SQL e a conexão
dAdapter = New SqlDataAdapter(sqlStr, conn)

'Instancia o dataset
dset = New DataSet()

'Obtem a Coleção que fornece o mapeamento mestre
' entre a tabela fonte e o datatable

dAdapter.TableMappings.Add("Table", "tabelaClientes")

'Usa um data adapter para preencher o dataset ou datable com
' os dados retornados da instrução

dAdapter.Fill(dset)
'
Quando vinculamos um DataSet, a plataforma .NET automaticamente usa o
'DataViewManager correspondente fornecido atraves da propriedade DataSet.DefaultViewManager

Me.dvm = dset.DefaultViewManager

Me.ComboBox1.DataSource = Me.dvm
'exibe a "tabelaClientes.CompanyName no ComboBox
Me.ComboBox1.DisplayMember = "tabelaClientes.CompanyName"
Me.ComboBox1.ValueMember = "tabelaClientes.CustomerID"

'Efetua a vinculação com os controles TextBox
Me.TextBox1.DataBindings.Add("Text", Me.dvm, "tabelaClientes.CustomerID")
Me.TextBox2.DataBindings.Add("Text", Me.dvm, "tabelaClientes.ContactName")
Me.TextBox3.DataBindings.Add("Text", Me.dvm, "tabelaClientes.Phone")
Me.TextBox4.DataBindings.Add("Text", Me.dvm, "tabelaClientes.Address")
Me.TextBox5.DataBindings.Add("Text", Me.dvm, "tabelaClientes.Country")
Me.TextBox6.DataBindings.Add("Text", Me.dvm, "tabelaClientes.City")

' fecha a conexão com o banco de dados
Me.conn.Close()
End Sub

No evento Load do formulário inclua a chamada a rotina acima de forma a preencher a combobox quando o formulário for carregado:

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

Pronto. Você pode executar o projeto e verificar que a combobox é preenchida e a medida que um item da mesma é selecionado os dados relacionados são exibidos nas caixas de texto.

Pegue o projeto completo aqui : exibeDadosCombo.zip

A vinculação entre a origem de dados e os controles de um formulário pode ser de vários tipos dependendo do que você deseja exibir: uma coluna de um registro ou múltiplos registros.

Quando se deseja exibir os dados oriundos de uma única tabela usamos o objeto DataView; para exibir dados de várias tabelas relacionadas usamos o objeto DataViewManager. As propriedades usadas para efetuar a conexão são:

Para saber mais detalhes sobre o DataBinding leia os artigos:

Desvendando os segredos do Data Binding no VB.NET  I
Desvendando os segredos do Data Binding no VB.NET  - II  


José Carlos Macoratti