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