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 :
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 IsConnectingTry
Catch exc As Exception
End Try End WhilefrmStatusMessage.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.LoadTry ' 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: