C#  -  ListView - Preenchendo com dados e Exportando para Texto e Excel - I


 Neste artigo vou mostrar como preencher um controle ListView com dados usando o Entity Framework, como exibir os dados selecionados em um linha do ListView e como exportar os dados para o formato texto e Excel.

O controle ListView já deve ser um velho conhecido seu; desde os tempos do VB 6.0 ele permite exibir uma lista de itens com textos e também com ícones para identificar o tipo de um item. O exemplo mais conhecido é o Windows Explorer que exibe uma lista de arquivos e pastas em uma estrutura de árvore.

O controle ListView fornece um grande número de propriedades que permite configurar sua aparência e comportamento de uma forma muito flexível. Dentre as principais propriedades citamos :

  1. View - permite alterar a forma nas quais os itens são exibidos

  2. LargeImageList , SmallImageList e StateImageList - permite especificar o objeto ImageList que contém as imagens exibidas para os itens

  3. Columns - permite o acesso a coleção que armazena os cabeçalhos das colunas

  4. Items - premite acessar os métodos para manipular os itens no controle

  5. Sorting - permite ordenar os itens alfabeticamente

  6. LabelEdit - permite ao usuário editar o texto de um item

  7. CheckedItems - permite saber quais itens estão marcados

  8. AllowColumnReorder - permite reconfigurar a ordem das colunas em tempo de execução

  9. FullRowSelect - permite a seleção de um item e subitem

Além desta propriedades o controle ListView também possui métodos e eventos que podemos usar em nossas aplicações aumentando assim as capacidades do controle ListView.  Vejamos alguns deles :

  1. BeginUpdate e EndUpdate : permite incluir itens em um ListView sem redesenhar o controle a cada item que é adicionado

  2. GetItemAt - permite determinar o item cujos subitens esta sendo clicado

  3. EnsureVisible - pode ser chamado para assegurar que o item especifico esta na área visível do controle.

  4. BeferoLabelEdit e AfterLabelEdit - permite validar o texto que esta sendo editado antes e depois da alteração do texto

  5. ColumnClick - permite ativar uma rotina quando a coluna é clicada.

  6. ItemCheck - permite determinar quando a alteração no estado de um item ocorreu.

A Hierarquia de classe do componente pode ser visto a seguir:

System.Object
    System.MarshalByRefObject
        System.ComponentModel.Component
              System.Windows.Forms.Control
                     System.Windows.Forms.ListView

O ListView possui um menu de tarefas (ListView Tasks) onde podemos editar itens, colunas e grupos além de definir o modo de visão como: Tile, Small Icons, Large Icons, List e Details.

Quando você seleciona o primeiro item no menu de tarefa do ListView o editor de coleção de itens é exibido e ListViewItems pode ser incluídos ou removidos e suas propriedades podem ser definidas. Um objeto ListViewItem pode exibir uma imagem com um texto, neste caso um ImageList deve ser usado para associar a imagem com o objeto ListViewObject.

A classe ListViewItem representa itens em um controle ListView e a classe ListViwSubItem representa um sub-item relacionado ao ListViewItem. A classe ListViewItem expõe a propriedade coleção de SubItems que representa uma lisa de sub-itens relacionas a um item.

Além disso podemos incluir itens manualmente no controle incluindo ListViewItems na propriedade Items da coleção de itens do ListView.

Agora vamos colocar tudo isso em prática em um exemplo onde eu vou acessar a tabela Products do banco de dados Northwind no SQL Server usando o Entity Framework e exibir os dados no ListView.

A seguir vou mostrar como você pode selecionar uma linha do ListView e exibir os detalhes em outro formulário. Para concluir vou mostrar como exportar os dados do ListView para o formato texto e para o Excel.

Vamos lá...

Recursos Usados

Criando o projeto Windows Forms

Abra o VS 2015 Community e crie um novo projeto (File-> New Project) usando a linguagem VB .NET e o template Windows Forms Application.

Informe um nome a seu gosto. Eu vou usar o nome C_ListView1;

No formulário padrão Form1.cs inclua os controles :

  • 1 ListView - Name=lvwDados , MultiSelect = False, GridLines=True, FullRowSelect=True, View=Details

Clique na propriedade Columns e na janela ColumnHeader e Collection Editor defina as colunas:

 

  • Name -  columnHeader1
  • Text - Produto ID
  • Width - 100
  • Name -  columnHeader2
  • Text - Nome do Produto
  • Width - 300
  • Name -  columnHeader1
  • Text - Preço
  • Width - 100
  • Name -  columnHeader1
  • Text - Estoque
  • Width - 100

 

 

  • 3 Buttons - btnCarregar, btnExportarTexto, btnExportarExcel

Disponha os controles conforme o leiaute da figura abaixo:

Definindo a fonte de dados usando o Entity Framework

No menu Project clique em Add New Item e a seguir clique na guia Data e selecione o template ADO .NET Entity Data Model;

Informe o nome NorthwindModel e clique no botão Add;

Selecione o item EF Designer from database e clique em Next;

Selecione a conexão com o banco de dados Northwind e informe o nome NorthwindEntities e clique em Next;

Na próxima janela selecione a tabela Products e marque as opções conforme a figura abaixo e clique no botão Finish;

Será criado a classe Product mapeada para a tabela Products conforme mostra a figura a seguir:

Agora já podemos acessar os dados da tabela Products usando a classe Product mapeada pelo Entity Framework.

Carregando os dados da tabela Products no ListView

Vamos agora preencher o ListView com os dados da tabela Products usando o modelo de entidades criado pelo Entity Framework.

No evento Click do botão Carregar inclua o código abaixo:

    private void btnCarregar_Click(object sender, EventArgs e)
    {
            Cursor.Current = Cursors.WaitCursor;
            using (NorthwindEntities db = new NorthwindEntities())
            {
                List<Product> lista = db.Products.ToList();
                foreach(Product p in lista)
                {
                    ListViewItem item = new ListViewItem(p.ProductID.ToString());
                    item.SubItems.Add(p.ProductName);
                    item.SubItems.Add(p.UnitPrice.ToString());
                    item.SubItems.Add(p.UnitsInStock.ToString());
                    lvwDados.Items.Add(item);
                }
            }
            Cursor.Current = Cursors.Default;
  }

Criamos uma instância do modelo de entidades NorthwindEntities() e obtemos uma lista de produtos ( db.Products.ToList();) e percorremos a lista de produtos preenchendo o ListView.

Executando o projeto teremos o seguinte resultado:

Na segunda parte do artigo veremos como selecionar um item no ListView e exibir os detalhes em outro formulário.

"Porque a lei foi dada por Moisés; a graça e a verdade vieram por Jesus Cristo." Joao 1:17
 

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:


José Carlos Macoratti