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