VB .NET - Transferindo valores entre duas ListBox


Nesta dica vamos ver como transferir itens selecionados entre dois controles ListBox em uma aplicação VB .NET.

Crie um novo projeto usando o Visual Basic 2010 Express Edition: Menu File -> New Project;

Selecione o template Windows Forms Application com o nome : TransferindoItensEntreListBox

A seguir inclua os seguintes controles no formulário form1.vb:

Vamos incluir no evento Click de cada um dos botões de comando o código que irá permitir selecionar e transferir itens entre os controles ListBox.

1 - Evento Click do botão - btnA:

Private Sub btnA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnA.Click
Dim i As Integer = 0

For i = 0 To lsbA.SelectedItems.Count - 1
    lsbB.Items.Add(lsbA.SelectedItem)
    lsbA.Items.RemoveAt(lsbA.SelectedIndex)
Next
End Sub

2- Evento Click do botão = btnB

Private Sub btnB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnB.Click

Dim i As Integer = 0

For i = 0 To lsbB.SelectedItems.Count - 1
   lsbA.Items.Add(lsbB.SelectedItem)
   lsbB.Items.RemoveAt(lsbB.SelectedIndex)
Next
End Sub

Executando o projeto e selecionando um item no primeiro ListBox, após clicar no botão > , o item será transferido para o segundo ListBox:

 

Podemos selecionar mais de um item. É o que fizemos no segundo ListBox , transferindo os valores para o primeiro:

 

Preenchendo o ListBox com um DataTable

Vamos mostrar agora como preencher um controle ListBox com os dados de um tabela de um banco de dados.

Eu vou usar a tabela Products do banco de dados Northwind.mdb (Microsoft Access) mas o código é igual para qualquer banco de dados , o que muda é a string de conexão.

Vamos preencher o ListBox com o nome do produto criando uma rotina chamada preencheLista:

Protected Sub preencheLista()

'define a string de conexão e a instrução SQL
Dim STR_CON As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dados\Northwind.mdb"
Dim STR_SQL As String = "Select ProductID,ProductName From Products"

'abre a conexão e cria o datatable
Using conn As New OleDbConnection(STR_CON)
    Using da As New OleDbDataAdapter(STR_SQL, STR_CON)
      Dim dt As New DataTable()
      da.Fill(dt)

    
  ' 1. Exibe o nome do Produto e Obtem o seu ID na seleção
      lsbA.DisplayMember = dt.Columns(1).ColumnName
      lsbA.ValueMember = dt.Columns(0).ColumnName
    
  ' 2. define o DataSource
      lsbA.DataSource = dt
  End Using
End Using
End Sub

Você pode chamar essa rotina de onde desejar. O resultado pode ser visto na figura abaixo:

Pegue o projeto completo aqui: TransferindoValoresEntreListboxVBNET.zip

"Mas a hora vem, e agora é, em que os verdadeiros adoradores adorarão o Pai em espírito e em verdade: porque o Pai procura a tais que assim o adorem."(João:4-23)

Referências:


José Carlos Macoratti