DataReader  - Preenchendo um controle ListView

No artigo - VB .NET - Usando o controle ListView - eu dei  uma pincelada no controle ListView - suas propriedades e métodos , mas não mostrei nenhum exemplo realmente prático no qual você pudesse usar o controle.  É obvio que o controle geralmente é usado para exibir dados ; seguindo este raciocínio vou mostrar neste artigo como preencher um controle ListView com os dados de uma tabela de um banco de dados usando o componente DataReader.

Eu vou usar o banco de dados Teste que esta no meu SQL Server ; no banco de dados existe uma tabela Funcionários que tem os seguintes dados: (Você pode ajustar para exibir os dados de qualquer tabela do seu SQL Server)

Vou exibir os campos : CódigoDoFuncionário , Nome , Sobrenome e Cargo em um controle ListView usando o componente DataReader. Eu poderia usar um DataSet também , mas como vou apenas exibir os dados o DataReader é mais indicado.

Para saber mais sobre o DataReader leia o artigo :ADO.NET - Uma visão geral  I :  Objetos Connection ,  Command e DataReader (Na verdade neste artigo eu já usei o ListView para exibir dados )

Irei fazer uma conexão com o SQL Server acessando a tabela Funcionários do banco de dados Teste; por isso  vou estar usando os provedores SqlConnection , SqlCommand e SqlDataReader.

1 - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

2- No formulário padrão insira um componente ListView e um botão de comando conforme layout abaixo:

3- No evento Click do botão de comando insira o código que vai fazer todo o serviço : 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

 

Dim conexao As New SqlConnection()

Dim dr As SqlDataReader

 

conexao.ConnectionString = "server=(local);Trusted_Connection=yes;database=Teste"

 

Dim cmd As SqlCommand = conexao.CreateCommand

 

cmd.CommandText = "Select CódigoDoFuncionário, Nome ,SobreNome,Cargo From Funcionários"

conexao.Open()

 

dr = cmd.ExecuteReader()

 

'configuração do controle listview

ListView1.Clear()

'modo de visao

ListView1.View = View.Details

' permite o usuario editar o item

ListView1.LabelEdit = True

' permite o usuario rearranjar as colunas

ListView1.AllowColumnReorder = True

' exibe as caixas de marcacao (check boxes.)

ListView1.CheckBoxes = True

' seleciona um item e subitem quando a seleção é feita

ListView1.FullRowSelect = True

' exibe as linhas

ListView1.GridLines = True

' ordena os itens na list na ordem ascendente

ListView1.Sorting = SortOrder.Ascending

 

'cria as colunas com os nomes do cabeçalho usando os nomes dos campos da tabela Funcionários

With ListView1

   .Columns.Add(dr.GetName(0), 120, HorizontalAlignment.Left)

   .Columns.Add(dr.GetName(1), 110, HorizontalAlignment.Left)

   .Columns.Add(dr.GetName(2), 110, HorizontalAlignment.Left)

   .Columns.Add(dr.GetName(3), 90, HorizontalAlignment.Left)

End With

 

' percorre a tabela e exibe todos os dados no listview

While dr.Read

   Dim codigo As String = dr.Item(0)

     Dim ls As New ListViewItem(codigo, 0)

   ls.SubItems.Add(dr.Item(1))

   ls.SubItems.Add(dr.Item(2))

   ls.SubItems.Add(dr.Item(3))

   ListView1.Items.Add(ls)

End While

 

dr.Close()

conexao.Close()

 

End Sub

Destacando:

- O código que cria as colunas com os nomes dos campos :

With ListView1

   .Columns.Add(dr.GetName(0), 120, HorizontalAlignment.Left)

   .Columns.Add(dr.GetName(1), 110, HorizontalAlignment.Left)

   .Columns.Add(dr.GetName(2), 110, HorizontalAlignment.Left)

   .Columns.Add(dr.GetName(3), 90, HorizontalAlignment.Left)

End With

Onde :   dr.getName(0) refere-se ao nome do primeiro campo : CódigoDoFuncionário120 ao tamanho(largura) da coluna e HorizontalAlignment.Left ao alinhamento horizontal , no caso feito a esquerda.

- Percorrendo a tabela atravé do código : While dr.Read / End While

While dr.Read

   Dim codigo As String = dr.Item(0)

     Dim ls As New ListViewItem(codigo, 0)

   ls.SubItems.Add(dr.Item(1))

   ls.SubItems.Add(dr.Item(2))

   ls.SubItems.Add(dr.Item(3))

   ListView1.Items.Add(ls)

End While

Atribuímos o código do funcionário : dr.Item(0) a uma variável String chamada codigo , criamos um novo item -  Dim ls As New ListViewItem(codigo, 0) - com o código do funcionário e incluímos sub-itens relacionados a este item ; no caso Nome, SobreNome e Cargo.

Se você quiser dar uma refinada pode incluir o código que permite ao usuário selecionar um funcionário pressionando um tecla , no caso vamos usar a coluna CódigoDoFuncionário para que quando o usuário teclar um número relacionado ao código a linha seja selecionada e , se , a mesma não estiver visível , haja o componente dá um scroll para exibir a linha correspondente. Este código deverá estar associado ao evento KeyPress do ListView e o código é dado a seguir :

Private Sub ListView1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ListView1.KeyPress

 

Dim i As Integer

   For i = 0 To ListView1.Items.Count - 1

         If ListView1.Items(i).Text.Substring(0, 1) = Char.ToUpper(e.KeyChar) Then

         ListView1.Items(i).Selected = True

         ListView1.Items(i).EnsureVisible()

        End If

   Next

End Sub

Executando o projeto iremos obter o seguinte :

Aguarde mais artigos sobre VB .NET usando o ListView ...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti