C# - Usando ListView para exibição de dados


Neste artigo vou mostrar algumas propriedades e recursos do controle ListView para exibição e organização de dados.

Eu estou usando o SharpDevelop 2.2 mas podemos usar o Visual C# Express Edition.

Veja na figura abaixo o leiaute do formulário da nossa primeira aplicação usando ListView com C#. Ela tem o objetivo de mostrar como exibir dados no ListView. No exemplo eu estou usando o banco de dados Northwind.mdb e a aplicação tem o objetivo de executar consultas SQL que o usuário digita na caixa de texto e exibir o resultado no controle ListView.

Inicie o SharpDevelop e no menu Arquivo selecione Novo -> Solução;

A seguir na janela Novo Projeto selecione C# -> Aplicações Windows e informe o nome executaSQL e clique em Criar;

No formulário MainForm.cs inclua os componentes conforme o leiaute abaixo;

Os controles usados no formulário são:

1- TextBox - txtSql ; Multiline = True

2- Button - cmdExecuta

3- TextBox - txtBD

4- Listview - lvwResultado ; View = Details

No evento Click do botão de comando Executar temos o código que acessa o banco de dados Northwind.mdb informado, executa um comando com a instrução SQL informada e gera um datareader exibido o resultado no ListView; (Veja o comentário no código para detalhes)

 private void cmdExecuta_Click(object sender, System.EventArgs e) 
 {
	 
      //verifica se foi informada uma consulta
     if (txtSql.Text.Equals(""))
     {
     	MessageBox.Show("Digite uma instrução válida.");
        return;
     }

       //define a string de conexão
       string sDBstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + txtBD.Text;

     //criar o objeto connection
     OleDbConnection conn = new OleDbConnection(sDBstr);

     try
     {
        //limpa o listview
        lvwResultado.Columns.Clear() ;
        lvwResultado.Items.Clear();

        //abre a conexao
        conn.Open();

       //cria um comando oledb
       OleDbCommand cmd = conn.CreateCommand();
       //define o tipo do comando como texto 
       cmd.CommandText = txtSql.Text;

       //executa o comando e gera um datareader
       OleDbDataReader dr = cmd.ExecuteReader();

       //preenche o cabeçalho do listview com os nomes dos campos
       for (int i = 0; i< dr.FieldCount; i++) 
       {
         ColumnHeader ch = new ColumnHeader();
         ch.Text=dr.GetName(i);
         lvwResultado.Columns.Add(ch);
       }

       //define um item listview
       ListViewItem item; 

       //inicia leitura do datareader
       while (dr.Read()) 
       {
         item=new ListViewItem(); 
         item.Text= dr.GetValue(0).ToString();

         //preenche o listview com itens
         for (int i=1 ; i< dr.FieldCount; i++) {
            item.SubItems.Add(dr.GetValue(i).ToString());
         }
         lvwResultado.Items.Add(item);
       }
       //fecha o datareader
       dr.Close();
     } 
     catch ( System.Data.OleDb.OleDbException  ex)
     {
       MessageBox.Show("Ocorreu um erro durante a execução da instrução SQL." +
               "Erro : " + ex.Message, "SQL");
     } 
     finally 
     {
     	//fecha a conexao
       conn.Close();
     }
    }

Executando o projeto para a instrução SQL : Select * from Products; temos o seguinte resultado:

Como podemos ver o controle ListView é muito versátil e fácil de usar. Vejamos alguns recursos deste controle:

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. Veja um exemplo abaixo:

ListViewItem listViewItem1 = new ListViewItem();
ListViewSubItem listViewSubItem1 = new ListViewSubItem();

listViewItem1.Text = "Macoratti";
listViewSubItem1.Text = "www.macoratti.net";

listViewItem1.SubItems.Add(listViewSubItem1);
listView1.Items.Add(listViewItem1);

Da mesma forma para incluir colunas manualmente basta inserir objetos ColumnHeader a coleção Columns do ListView. Neste caso as colunas serão exibidas somente se o modo de exibição do ListView estiver definido para Details. Exemplo:

ColumnHeader columnHeader1 = new ColumnHeader();
ColumnHeader columnHeader2 = new ColumnHeader();

columnHeader1.Text = "Nome";
columnHeader2.Text = "E-mail";

listView1.Columns.Add(columnHeader1);
listView1.Columns.Add(columnHeader2);


Para incluir um grupo via código inserimos objetos ListViewGroup a coleção Groups do ListView. Exemplo:

listView1.Groups.Add(new ListViewGroup("Friends", HorizontalAlignment.Left));

Para definir o modo de visão via código fazemos:

listView1.View = View.Details;

Em um próximo artigo vou mostrar como podemos exibir, incluir, e ler dados em um ListView sem usar um banco de dados.

Aguarde...

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 ?

Referências:


José Carlos Macoratti