 VB .NET - Preenchendo uma Combobox
  
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 :
Um vetor unidimensional
Um lista de vetores
Uma lista bidimensional
Um DataSet
Um DataView
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.)
- 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.SqlClientImports
System.Data.oledb- A seguir o código do evento Load do formulário principal - frmmain :
| PrivateSub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'definimos a conexão que será usadaDim strconnection As String = OLEDB_CONNECTION_STRING ' exibe a mensagem de status da conexãoDim frmStatusMessage As New frmStatus() 
 frmStatusMessage.Show("Efetuando conexão com o banco de dados") ' tenta uma conexão local Dim IsConnecting As Boolean = TrueWhile IsConnecting Try 
 Catch exc As Exception 
 End TryEnd While frmStatusMessage.Close() GroupBox1.Visible = FalseEnd 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:
| PrivateSub 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 RegiaoDim minhaRegiao As New ArrayList() 'insere a estrutura da regiao no vetorWith 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 .
| PrivateSub 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
| PrivateSub 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.vbDim 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 TryEnd 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: