VB .NET - Preenchendo uma Combobox


Vou mostrar neste artigo como realizar uma tarefa muito simples ; a primeira vista pode parecer simples , mas e seu eu perguntar para você agora : Como preencher uma caixa de combinação - Combobox - usando o VB.NET ? O que você responderia ?

Embora seja uma operação básica e fácil de fazer usando as versões anteriores do VB . Como fazer o serviço usando o VB.NET ? O que mudou ? Como carregar os dados de uma tabela , e de um vetor etc... ?

Para responder a essas perguntas iremos mostrar como preencher uma combobox usando as seguintes fonte de dados :

O projeto

O projeto irá preencher uma caixa de combinação usando como as fontes de dados mencionadas acima. Usaremos uma conexão com o banco de dados Northwind.mdb tabela - Produtos(Products)  para preencher o DataSet e o DataView. O projeto irá usar três formulários :

- Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Forms
  3. Name : Preenche_Combobox
  4. Location : c:\vbnet

- O formulário - frmmain - deverá ter a seguinte aparência : Note que ele contém um Menu de opções , 5 controles Buttons , uma combobox , e dois GroupBox e uma Label.

Abaixo temos os formulários : frmStatus e frmAbout.

- O formulário - frmstatus - contém apenas um controle label para exibir a mensagem de status da conexão

- O formulário - frmabout - exibe informações sobre o projeto é e acionado na opção - Ajuda - do menu de opções do formulário - frmmain

formulário : frmStatus formulário: frmAbout

Ao executar o projeto o formulário - frmstatus - exibe o status da conexão e a seguir o formulário frmmain é carregado. De início a combobox esta vazia , cabe ao usuário conforme sua opção preenchê-la clicando nos botões de comando. Veja o resultado em uma simulação :

Usando uma lista de valores pra preencher a combobox Preenchendo a combobox com os dados da tabela produtcs

Agora vamos ao código do Projeto

- Como vamos criar strings de conexão para SQL Server e Access teremos que importar as classes pertinentes :(Vamos usar somente a string para conexão com Access)

Imports System.Data.SqlClient

Imports System.Data.oledb

- A seguir o código do evento Load do formulário principal - frmmain :

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

'definimos a conexão que será usada

Dim strconnection As String = OLEDB_CONNECTION_STRING

' exibe a mensagem de status da conexão

Dim frmStatusMessage As New frmStatus()

 

frmStatusMessage.Show("Efetuando conexão com o banco de dados")

' tenta uma conexão local

Dim IsConnecting As Boolean = True

While IsConnecting

  Try

' Usamos a classe OleDbConnection para conectar com uma base de dados Access

' para conectar com uma base de dados SQl Server usamos a classe SqlConnection

'Dim northwindConnection As New SqlConnection(strConnection)

  Dim northwindConnection As New OleDbConnection(strconnection)

' o SqlDataAdapter é usado para preencher o DataSet

Dim ProductAdapter As New OleDbDataAdapter("SELECT * & FROM products" , northwindConnection)

' Preenche o DataSet com os dados da tabela products

' Como podemos varios result sets em um DataSet

' damos o nome para o nosso de "Products".

ProductAdapter.Fill(dsProducts, PRODUCT_TABLE_NAME)

'cria o dataview; uso construtor para definir a ordem dos dados

dvProducts = New DataView(dsProducts.Tables("products"), "", DEFAULT_SORT, DataViewRowState.OriginalRows)

' Os dados foram recuperados com sucesso

IsConnecting = False

'Se a conexão falhar faz o tratamento

     Catch exc As Exception

If strconnection = SQL_CONNECTION_STRING Then

' Não pode conectar com o SQL Server , então tenta o MSDE

strconnection = MSDE_CONNECTION_STRING

frmStatusMessage.Show("Connecting to MSDE")

Else

' Não houve conexão com SQL Server ou MSDE

frmStatusMessage.Close()

MsgBox("Para rodar este exemplo você precisa ter " & "o MSDE com o banco de dados Northwind instalado ", CAPTION_ICON_BUTTON, CAPTION_TITLE)

'encerra o programa

End

End If

      End Try

End While

frmStatusMessage.Close()

GroupBox1.Visible = False

End Sub

 

- No formulário frmmain  definimos as strings de conexão para uma conexão com um banco de dados SQL Server , MSDE e um banco de dados Access (no artigo estaremos usando a string de conexão para o banco de dados Access)

Protected Const SQL_CONNECTION_STRING As String = "Server=localhost;" & "DataBase=Northwind;" & "Integrated Security=SSPI"

Protected Const MSDE_CONNECTION_STRING As String = "Server=(local)\NetSDK;" & "DataBase=Northwind;" & "Integrated Security=SSPI"

Protected Const OLEDB_CONNECTION_STRING As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\nwind97.mdb"

 

Protected Const CAPTION_TITLE As String = "Vincular dados a ComboBox"

Protected Const DEFAULT_SORT As String = "ProductName ASC"

Protected Const CAPTION_ICON_BUTTON as MsgBoxStyle = ctype(msgboxstyle.Information + MsgBoxStyle.OKOnly,msgboxstyle)

Protected Const PRODUCT_TABLE_NAME As String = "Products"

 

- O código associado ao evento Click do botão de comando - cmdArray - Vetor - carrega a combobox com os valores de um array (vetor).

Private Sub cmdArray_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdArray.Click

'vincula um vetor com os nomes dos meses do ano

Dim meses() As String = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto"}

ComboBox1.DataSource = meses

ComboBox1.SelectedIndex = 0

GroupBox1.Visible = False

lblSource.Text = "Vetor"

End Sub

 

Obs: Note como fazemos a inicialização do vetor meses atribuindo diretamente os valores na sua definição.

- O código associado ao evento Click do botão de comando - cmdArrayList - Lista - carrega a combobox com os valores de um array de lista.

Private Sub cmdArrayList_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdArrayList.Click

'vincula uma lista de vetores com valores preenchidos com alguns times de futebol

Dim times As New ArrayList()

With times

   .Add("Santos")

   .Add("Corinthians")

   .Add("Palmeiras")

   .Add("São Paulo")

   .Add("Portuguesa")

   .Add("São Caetano")

End With

ComboBox1.DataSource = times

ComboBox1.SelectedIndex = 0

GroupBox1.Visible = False

lblSource.Text = "Lista de Vetores"

End Sub

 

O código associado ao evento Click do botão de comando - cmdArrayListA - Lista Avançada - carrega a combobox com os valores de uma lista onde usamos uma estrutura predefinida para os dados:

Private Sub cmdArrayListA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdArrayListA.Click

'vincula uma lista de vetores com base na estrutura definida em Regiao

Dim minhaRegiao As New ArrayList()

'insere a estrutura da regiao no vetor

With minhaRegiao

  .Add(New Regioes("Centro", 1))

  .Add(New Regioes("Oeste", 2))

  .Add(New Regioes("Norte", 3))

  .Add(New Regioes("Sul", 4))

End With

'vincula o vetor ao controle Combo Box

With ComboBox1

  .DataSource = minhaRegiao

  .DisplayMember = "getName"

  .ValueMember = "getId"

End With

 

 ComboBox1.SelectedIndex = 0

 lblAssociated.Text = CType(ComboBox1.SelectedValue, String)

 GroupBox1.Visible = True

 lblSource.Text = "Lista de vetores avançado"

End Sub

- O código da estrutura - Regioes - usada acima é o seguinte:

'define uma estrutura para as regioes com nome e identificador id

Protected Structure Regioes

Private RegiaoNome As String

Private RegiaoId As Integer

Public Sub New(ByVal nome As String, ByVal id As Integer)

   RegiaoNome = nome

   RegiaoId = id

End Sub

Public ReadOnly Property getName() As String

  Get

          Return RegiaoNome

   End Get

End Property

 

Public ReadOnly Property getId() As Integer

   Get

       Return RegiaoId

   End Get

End Property

End Structure

- Agora o código do botão - DataSet. O código preencher a combobox com os dados da tabela Products do banco de dados Northwind. Os dados são carregados do DataSet dsProducts.

Private Sub cmdDS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDS.Click

'vincula á tabela produtos do banco de dados Northwind que foi previamente carregado no dataset dsProducts.

With ComboBox1

     .DataSource = dsProducts.Tables("PRODUCTS")

     .DisplayMember = "ProductName"

    .ValueMember = "ProductID"

End With

 

  ComboBox1.SelectedIndex = 0

  lblAssociated.Text = CType(ComboBox1.SelectedValue, String)

  GroupBox1.Visible = True

  lblSource.Text = "DataSet"

End Sub

- Abaixo o código associado ao evento Click do botão - DataView. Usamos o DataView - dvProducts .

Private Sub cmdDV_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDV.Click

'vincula a visao ordenada da tabela produtos

 

With ComboBox1

      .DataSource = dvProducts

      .DisplayMember = "ProductName"

      .ValueMember = "ProductID"

End With

 

    ComboBox1.SelectedIndex = 0

    lblAssociated.Text = CType(ComboBox1.SelectedValue, String)

    GroupBox1.Visible = True

    lblSource.Text = "DataView"

End Sub

 

Obs: O DataSet - dsProducts e o DataView - dvProducts , foram obtidos na carga do formulário - frmain.

- O código abaixo é associado ao evento - SelectedIndexChanged - da combobox. Assim quando o usuário seleciona um item o seu índice é exibido no label inserido no controle GroupBox1

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

' exibe o valor associado para o item selecionado na combobox

If GroupBox1.Visible = True Then

    lblAssociated.Text = CType(ComboBox1.SelectedValue, String)

End If

End Sub

 

- O código do formuláriuo - frmabout - que exibe informações sobre : versão , titulo, copyright, descrição da aplicação

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

    Try

' define as propriedades Text e Icon usando os valores do formulário Pai

Me.Text = "About " & Me.Owner.Text

Me.Icon = Me.Owner.Icon

 

' Define a imagem picturesbxo do formulário usando o icone do Pai

' antes devemos converter para bitmap pois o picturebox não aceita icones

Me.pbIcon.Image = Me.Owner.Icon.ToBitmap()

 

' Define as labels Title, Version, e Description lendo o metadata Assembly  no arquivo AssemblyInfo.vb

Dim ainfo As New AssemblyInfo()

Me.lblTitle.Text = ainfo.Title

Me.lblVersion.Text = String.Format("Version {0}", ainfo.Version)

Me.lblCopyright.Text = ainfo.Copyright

Me.lblDescription.Text = ainfo.Description

Me.lblCodebase.Text = ainfo.CodeBase

Catch exp As System.Exception

' tratamento de erros

 

MessageBox.Show(exp.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop)

  End Try

End Sub

 

- Para terminar o código do formulário - frmstatus. Observe a palavra chave - Overloads - que declara uma propriedade ou método com o mesmo nome de um membro já existente , mas , com uma lista de argumentos diferentes do original. No caso a procedure Show possui um argumento - String - Message -  e sobrepõe a procedure Show().

Public Overloads Sub Show(ByVal Message As String)

    lblStatus.Text = Message

      Me.Show()

    Application.DoEvents()

End Sub

 

Acabei . Até o próximo artigo VB.NET .

Rom_6:23 Porque o salário do pecado é a morte, mas o dom gratuito de Deus é a vida eterna em Cristo Jesus nosso Senhor.

Referências:


José Carlos Macoratti