Neste artigo vou mostrar como podemos sincronizar as informações de dois controles ListBox usando um DataView. |
Volto portanto ao assunto, desta vez usando o Visual Studio 2015 Community numa abordagem feita para quem esta iniciando na linguagem.
É um artigo prático, e vamos realizar as seguintes operações:
Então vamos ao que interessa...
Recursos Usados
Criando o projeto Windows Forms
Abra o VS 2015 Community e crie um novo projeto (File-> New Project) usando a linguagem C# e o template Windows Forms Application.
Informe um nome a seu gosto. Eu vou usar o nome Vbnet_FiltroListBox;
Selecione o formulário Form1.vb e partir da ToolBox inclua os seguintes controles:
2 ListBox - lb1 e lb2
2 Buttons - btnPreencherLb1 e btnRestaurar
Disponha os controles conforme o leiaute da figura abaixo:
A seguir declare os seguintes namespaces no formulário:
Imports System.IO
Após a declaração do formulário
inclua o código a seguir onde definimos as variáveis usadas no formulário:
Dim tabela As DataTable
Dim caminho As String
1-Preenchendo um array com dados de um arquivo texto e exibindo no ListBox
No evento Click do botão de comando - Preencher Dados - inclua o código abaixo:
Private Sub btnPreencherLb1_Click(sender As Object, e As EventArgs) Handles btnPreencherLb1.Click
GeraDados()
End Sub
Private Sub GeraDados()
caminho = "C:\Dados\txt\paises.txt"
Dim Paises() As String = File.ReadAllLines(caminho)
lb1.Items.AddRange(Paises)
tabela = New DataTable("Paises")
CriarTabela(tabela)
Dim dv As New DataView(tabela)
lb2.DataSource = dv
dv.Sort = "Nome"
lb2.DisplayMember = "Nome"
End Sub
|
Neste código estamos invocando o método GeraDados() onde temos o caminho do arquivo paises.txt (obtido neste link: https://gist.github.com/kalinchernev/486393efcca01623b18d) definido na variável caminho.
A seguir criamos um array de strings chamado Paises() e usando o método ReadAllLines() da classe File lemos os dados do arquivo texto para o array.
A seguir exibimos os dados no Listbox - lb1 - usando o método AddRange() ListBox.
Depois chamamos o método CriarTabela() cujo código vemos a seguir:
Private Sub CriarTabela(ByVal tabela As DataTable)
tabela.Columns.Add("Nome")
tabela.Columns.Add("Pais")
For i As Integer = 0 To 8
tabela.Rows.Add(tabela.NewRow)
Next
tabela.Rows(0).ItemArray = {"Jose C Macoratti", "Brazil"}
tabela.Rows(1).ItemArray = {"Igor Klausman", "Germany"}
tabela.Rows(2).ItemArray = {"Mina Feng", "China"}
tabela.Rows(3).ItemArray = {"Italo Sanfelicce", "Italy"}
tabela.Rows(4).ItemArray = {"Fernando Ramirez", "Spain"}
tabela.Rows(5).ItemArray = {"Shang Sheng", "China"}
tabela.Rows(6).ItemArray = {"Reed Kimble", "United Kingdom"}
tabela.Rows(7).ItemArray = {"John Anthony Olivier", "United States"}
tabela.Rows(8).ItemArray = {"Marie Claire", "France"}
End Sub
|
Este método apenas cria um DataTable com duas colunas : Nome e Pais e preenche o DataTable - tabela - com dados.
A seguir criamos um DataView a partir da tabela gerada e definimos o datasource do ListBox - lb2 , ordenamos as informações por nome e exibimos o nome o ListBox :
Dim dv As New DataView(tabela)
lb2.DataSource = dv
dv.Sort = "Nome"
lb2.DisplayMember = "Nome"
Quando o usuário selecionar um país no primeiro ListBox(lb1) desejamos exibir os nomes relacionados ao país no segundo Listbox(lb2).
Para isso basta usar o evento SelectedIndexChanged do primeiro ListBox (lb1) onde usamos o método RowFilter para filtrar o dataview pelo nome do pais selecionado exibindo o resultado no segundo ListBox(lb2) :
Nota: A propriedade RowFilter
define a
expressão usada para filtrar quais linhas serão exibidas em
DataView.
Private Sub lb1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lb1.SelectedIndexChanged
DirectCast(lb2.DataSource, DataView).RowFilter = "Pais = '" & lb1.SelectedItem.ToString & "'"
End Sub
|
O código do botão - Restaurar Dados - apenas invoca o método GeraDados() para restaurar as informações:
Private Sub btnRestaurar_Click(sender As Object, e As EventArgs) Handles btnRestaurar.Click
GeraDados()
End Sub
|
Rodando o projeto e após preencher os listbox, ao selecionar um país no primeiro ListBox temos os dados relacionados exibidos no segundo conforme figura abaixo:
Eu procurei utilizar uma abordagem bem simples para facilitar o entendimento de quem esta começando agora com o VB .NET.
Pegue o projeto completo aqui : Vbnet_FiltroListBox.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.
Deus é Espírito, e importa que os que o adoram o adorem em espírito e em
verdade.
João 4:23,24
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
VB .NET - Transferindo valores entre duas ListBox - Macoratti
VB .NET - Operações com ListBox : Copiar, Colar, Cortar ... - Macoratti