VB.NET - Usando o controle ListView
O controle ListView exibe uma lista de itens com ícones e subitens opcionais associados. O controle contém uma coleção de objetos do tipo ListViewItem ; a propriedade Items. Esta propriedade é do tipo ListViewIemCollection, que possui métodos para incluir , remover e manipular itens em uma coleção.
A classe ListViewItemCollection implementa a interface ICollection , a interface IList que deriva dela , e a interface IEnumerable. As duas primeiras interfaces fornecem acesso a items individuais baseado em um índice ; já a interface IEnumerable fornece a capacidade de iteração sobre a coleção. Estas características são as principais de um controle ListView.
O controle ListView possui 3 maneiras de visualização especificada pela propriedade View : large icon, small icon , list e detail. Quando a propriedade View é definida para SmallIcon ou List a imagem exibida com cada item é obtida da lista de imagens definida pela propriedade SmallImageList. Quando a propriedade View é definida para LargeIcon as imagens são obtidas da lista de imagens definidas pela propriedade LargeImageList.
Imagens pequenas são exibidas em 16x16 pixels , enquanto que imagens grandes são exibidas em um quadro de 32 até 64 pixels. Em todas as 3 formas de visualização , a única informação exibida com cada item, é a propriedade Text.
Quando a propriedade View é definida como Details, o ListView exibe colunas contendo subitens. Um ou mais itens em um ListView pode ser selecionado. Se a propriedade é definida como True então múltiplos itens podem ser selecionados .
Os itens selecionados podem ser acessados através das propriedades SelectedItems e SelectedIndices. A propriedade SelectedItems cont[em uma coleção de somente leitura dos itens selecionados e a propriedade SelectedIndices contém uma coleção somente leitura de indices dos itens selecionados.
Quando um item selecionado em um ListView muda, ou quando um item é selecionado e depois desmarcado em uma seleção múltipla então o evento SelectedIndexChanged é disparado. Você pode então processar as coleções em SelectedItems ou SelectedIndices.
Você deve se precaver do fato que o evento SelectedIndexChanged pode ser disparado duas vezes quando um item for selecionado : uma quando o primeiro item é desmarcado e novamente quando um a nova seleção é feita. para evitar o tratamento de eventos em duplicidade teste a propriedade SelectedIndices.Count no interior do tratamento do evento e faça o processamento desejado somente quando a contagem não for igual a zero. Veja o código de exemplo a seguir:
Private Sub
listView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
|
Para incluir um item em um controle ListView basta especificar o item e atribuindo propriedades a ele.
Fazer isto em tempo de desenho é
muito simples , basta selecionar o controle ListView que você inseriu no
formulário de um projeto Windows que você criou e na janela de propriedades do
controle , clique no botão
na propriedade Items. A janela - ListViewItem Collection Editor será aberta e
você poderá incluir itens usando a interface exibida na janela.
![]() |
Ao criar um ListItem no VB.NET você deve explicitamente criar o ListItem e então incluí-lo a coleção de Items do ListView.
O exemplo a seguir criar um ListItem em um controle ListView chamado lvwClientes que foi incluído no formulário:
Dim
lista AS ListItem = New ListViewItem()
lsita.Text = "Primeira Coluna"
lvwClientes.Items.Add(lista)
lista = Nothing
Abaixo temos um exemplo de código onde criamos um ListItem com subitens para um ListView chamado lvwClientes que foi inserido no formulário:
Dim lista AS ListItem = New ListViewItem() lista.Text = "Primeira coluna" lista.SubItems.Add("Segunda coluna") lista.SubItems.Add("Terceira coluna") lista.SubItems.Add("Quarta coluna") lvwClientes.Items.Add(lista) lista = Nothing Para remover um item usamos o método RemoveAt ou Clear da propriedade Items.
RemoveAt - remove um único item : ListView1.Items.RemoveAt(0)
Clear - Remove todos os itens da lista : ListView1.Items.Clear()
Vamos ver agora como podemos preencher um controle ListView com as informações
de um banco de dados.
Inicie um novo projeto no Visual Studio do tipo Windows Application usando a linguagem VB.NET e o no formulário principal inclua um controle ListView e um botão de comando.
No evento Click do botão - Lista Clientes - insira o código abaixo; nele estou invocando a rotina listaClientes().
Private Sub btnListaClientes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListaClientes.Click Call listaClientes() End Sub |
A rotina listaClientes() é exibida a seguir. Nela destacamos o seguinte :
Private Sub listaClientes() Dim conexaoSQLServer As SqlConnection Dim sqlCmd As SqlCommand = New SqlCommand("SELECT CustomerID,ContactName,Address,City,Country FROM Customers") Dim dr As SqlDataReader Dim itmListItem As ListViewItem Dim lvClientes As ListViewData = New ListViewData conexaoSQLServer = New SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind") Try conexaoSQLServer.Open() sqlCmd.Connection = conexaoSQLServer dr = sqlCmd.ExecuteReader lvClientes.carregaLista(lvwClientes, dr) conexaoSQLServer.Close() Catch ex As SqlException MessageBox.Show(ex.ToString) End Try End Sub |
A classe ListViewDados é criada através da inclusão de um módulo de classe no Menu Project. Nela temos o método carregaLista que recebe como parâmetro um objeto ListView e um objeto do tipo DataReader.
Imports System.Data.SqlClient Public Class ListViewDados Public Sub carregaLista(ByRef mListView As ListView, ByRef mDados As SqlDataReader) Dim lvwColuna As ColumnHeader Dim itmListItem As ListViewItem Dim strTeste As String Dim cnt As Short mListView.Clear() 'atribui os nomes das colunas For cnt = 0 To mDados.FieldCount() - 1 lvwColuna = New ColumnHeader lvwColuna.Text = mDados.GetName(cnt) mListView.Columns.Add(lvwColuna) Next 'percorre os dados do datareader e preenche o listview Do While mDados.Read itmListItem = New ListViewItem strTeste = IIf(mDados.IsDBNull(0), "", mDados.GetString(0)) itmListItem.Text = strTeste For cnt = 1 To mDados.FieldCount() - 1 If mDados.IsDBNull(cnt) Then itmListItem.SubItems.Add("") Else itmListItem.SubItems.Add(mDados.GetString(cnt)) End If Next cnt mListView.Items.Add(itmListItem) Loop End Sub End Class |
Executando o projeto temos o resultado exibido na figura abaixo:
![]() |
Eu sei é apenas VB.NET , mas eu
gosto ...
José Carlos Macoratti