Trabalhando com controles Vinculados aos Dados

Trabalhar com controles vinculados (data bound) no VB.NET com ADO .NET e WinForms pode ser até divertido. Só o fato de você não ter que escrever muitas linhas de código pois os controles vão fazer todo o serviço para você já é um alívio. Vou mostrar como podemos usar os controles vinculados em aplicativos Windows.

Os controles vinculados são controles que podem ser facilmente ligados aos componentes de dados , e, o ambiente IDE do Visual Studio é um ambiente rico em componentes de dados e controles vinculados.

Vou focar os três controles vinculados que creio são os mais usados : DataGrid , ListBox e ComboBox.

No VB 6.0 , a utilização dos controles vinculados era feita pela definição de propriedades de vinculação do controle : DataChanged, DataField, DataFormat, DataMember, e DataSource.  No VB.NET , a  vinculação aos dados tem um definição mais abrangente : você pode vincular qualquer propriedade de qualquer controle a qualquer estrutura que contém dados. A vinculação nos formulários Windows e realizado via propriedade DataBinding  que contém a coleção de objetos Binding para o controle.

Nota : A vinculação de dados com ADO é suportada no VB.NET por questões de compatibilidade com o VB 6.0.

Os controles vinculados possuem propriedades que podem ser configuradas nos componentes de dados de maneira que eles ficam prontos para exibir os dados nos formulários. Duas destas importantes propriedades são :

  1. DataSource
  2. DisplayMember

A propriedade DataSource dos componentes de dados é a mais importante e você pode definir diferentes tipos de componentes de dados como a propriedade DataSource. Assim você pode definir um DefaultViewManager ou um DataView com esta propriedade :

Dim ds as DataSet = New DataSet()

DataGrid.DataSource = ds.DefaultViewManager

A propriedade DisplayMember pode ser configurada para o campo nome de uma tabela do banco de dados se você desejar vincular um campo particular ao controle.

Dim dv as DataView = ds.Tables("Clientes").DefaultView

ListBox1.DataSource = dv

ListBox1.DisplayMember = "Nome"

Os componentes de dados ADO.NET

O Visual Studio .NET fornece um rico conjunto de componentes de dados : ADO.NET. Estes componentes é que fornecem os dados aos controles WInForms. Os principais componentes são :

  1. Data Connection
  2. DataSet
  3. DataView
  4. Data Adapters
  5. Data Commands

Estes componentes podem ser criados em tempo de desenho ou execução. A criação deles em tempo de projeto é simples : basta arrastar o componente para o formulário e configurar as propriedades desejadas.

Para trabalhar com os componentes de dados temos que efetuar alguns passos básicos :

1- Conectar  com uma fonte de dados (DataSource)

A primeira coisa a fazer é criar uma conexão com a fontes de dados. Usamos um objeto Connection para conectar com a fonte de dados. Criamos uma string de conexão e o objeto Connection. Abaixo vou mostrar um exemplo usando o provedor de dados OLeDB.

Dim strCon As String = "Provider=Microsoft.JET.OLEDB.4.0;data source=c:\teste\teste.mdb"

Dim conexao AS OleDbConnection = New OleDbConnection(Strcon)

2- Criando um Data Adapter

Agora temos que criar um Data Adapter usando dois argumentos : a string SQL e o objeto Connection.

Dim strSQL As String = "Select * From Clientes"

Dim da As OleDbDataAdapter = new OleDbDataAdapter(strSQL ,  conexao)

3- Criando e preenchendo um DataSet

O próximo passo é criar um DataSet e preenchê-lo usando o método Fill.

Dim ds As DataSet = New DataSet()

ds.Fill(ds,"Clientes")

4- Vinculando o controle ao componente de dados

O último passo é vincular os dados a um controle vinculado usando os métodos já citados :

DataGrid.DataSource = ds.DefaultViewManager

Para encerrar vou mostrar um projeto prático onde iremos usar os controles : ListBox , ComboBox e DataGrid com uma vinculação aos componentes dados :

Inicie um novo projeto Windows Application no VS.NET e no formulário padrão insira os controles acima e três botões de comando:

Agora digite o código conforme abaixo :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

' Cria a string de conexão

Dim conStr As String = "Provider=Microsoft.JET.OLEDB.4.0;data source=c:\teste\northwind.mdb"

Dim sqlStr As String = "SELECT Nome , Sobrenome , Cargo FROM Funcionários"

' Cria o objeto para conexao

Dim conn As OleDbConnection = New OleDbConnection(conStr)

' Cria o objeto data adapter

Dim da As OleDbDataAdapter = New OleDbDataAdapter(sqlStr, conn)

' Cria o objeto dataset e preenche-o

Dim ds As DataSet = New DataSet()

da.Fill(ds, "Funcionários")

' Anexa o DefaultView do dataset ao datagrid

DataGrid1.DataSource = ds.DefaultViewManager

End Sub


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

' Cria a string de conexão

Dim conStr As String = "Provider=Microsoft.JET.OLEDB.4.0;data source=c:\teste\northwind.mdb"

Dim sqlStr As String = "SELECT * FROM Funcionários"

' Cria o objeto para conexao

Dim conn As OleDbConnection = New OleDbConnection(conStr)

' Cria o objeto data adapter

Dim da As OleDbDataAdapter = New OleDbDataAdapter(sqlStr, conn)

' Cria o objeto dataset e preenche-o

Dim ds As DataSet = New DataSet()

da.Fill(ds, "Funcionários")

' Anexa o DefaultView do dataset ao datagrid

Dim dv As DataView = ds.Tables("Funcionários").DefaultView

 

ListBox1.DataSource = dv

ListBox1.DisplayMember = "Nome"

End Sub


 

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim conStr As String = "Provider=Microsoft.JET.OLEDB.4.0;data source=c:\teste\northwind.mdb"

Dim sqlStr As String = "SELECT * FROM Funcionários"

Dim conn As OleDbConnection = New OleDbConnection(conStr)

Dim da As OleDbDataAdapter = New OleDbDataAdapter(sqlStr, conn)

Dim ds As DataSet = New DataSet()

da.Fill(ds, "Funcionários")

Dim dv As DataView = ds.Tables("Funcionários").DefaultView

 

ComboBox1.DataSource = dv

ComboBox1.DisplayMember = "Nome"

End Sub

 

End Class

Agora é só executar o projeto e preencher os controles vinculados conforme abaixo:

Você poderia dar uma otimizada no código acima .

Terminei mais um artigo VB.NET , até o próximo ...


José Carlos Macoratti