C# - Preenchendo um ListView com um DataSet


Nesta dica eu mostro como preencher um controle ListView usando o DataSet da ADO .NET e a linguagem C#.

Lembrando que o DataSet é indicado quando você desejar efetuar edição nos dados.

Abaixo temos um esquema do funcionamento do nosso exemplo:

Iremos acessar o banco de dados Northwind.mdf do  SQL Server e exibir os dados da tabela Products.

Vamos usar criar o DataSet através do SqlDataAdapter e extrair a tabela com os dados para exibir no ListView;

Podemos criar o projeto no Sharpdevelop 3.2 ou no Visual C# 2008 Express, ambas ferramentas são gratuitas:

Crie o projeto do tipo Aplicação Windows com o nome ListViewDataSet;

Primeiro devemos incluir referências no formulário aos namespaces usados:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

Em seguida vamos definir as variáveis que iremos usar no projeto:

private DataSet _DataSet;
private SqlConnection _Conn;
private SqlDataAdapter _DataAdapterProducts;

A rotina que inicializa o ListView é dada abaixo:

private void inicializaListView()
{
    // exibe detalhes
    listView1.View = View.Details;
    // permite ao usuário editar o texto
    listView1.LabelEdit = true;
     // permite ao usuário rearranjar as colunas
    listView1.AllowColumnReorder = true;
     // Selecione o item e subitem quando um seleção for feita
    listView1.FullRowSelect = true;
    // Exibe as linhas no ListView
    listView1.GridLines = true;

    // Anexa Subitems no ListView
    listView1.Columns.Add("ProductName", 200, HorizontalAlignment.Left);
    listView1.Columns.Add("ProductID", 70, HorizontalAlignment.Left);
    listView1.Columns.Add("UnitPrice", 100, HorizontalAlignment.Left);
}

A rotina para carregar os dados para o ListView é apresentada a seguir:

// Carrega dados de um DataSet no ListView
private void carregaLista()
{
    // Obtem a tabela do dataset
    DataTable dtable = _DataSet.Tables["Products"];

    // limpa o ListView
    listView1.Items.Clear();

    // exibe os itens no controle ListView 
    for (int i = 0; i < dtable.Rows.Count; i++)
    {
        DataRow drow = dtable.Rows[i];

        // Somente as linhas que não foram deletadas
        if (drow.RowState != DataRowState.Deleted)
        {
            // Define os itens da lista
            ListViewItem lvi = new ListViewItem(drow["ProductName"].ToString());
            lvi.SubItems.Add (drow["ProductID"].ToString());
            lvi.SubItems.Add (drow["UnitPrice"].ToString());

            // Inclui os itens no ListView
            listView1.Items.Add(lvi);
        }
    }
} //fim carregaLista

A rotina GetDados é quem carrega os dados do banco dados no DataSet e possui o código a seguir:

public void GetDaDos()
{
  string strConn = "Server = .\\sqlexpress;Database = NorthWind; Integrated Security = SSPI;";
  try
  {
     _Conn = new SqlConnection(strConn);

     // preenche o dataset 
     string strSQL = "SELECT ProductName, "
           + "ProductID, "
           + "UnitPrice "
           + "FROM Products "
           + "ORDER BY ProductName";

     _DataSet = new DataSet();
     _DataAdapterProducts = new SqlDataAdapter(strSQL, _Conn);
     _DataAdapterProducts.Fill(_DataSet, "Products");
   }
   catch (Exception ex)
   {
     string msg = ex.Message.ToString();

     MessageBox.Show(msg, "Não foi possivel acessar os dados.",
     MessageBoxButtons.OK, MessageBoxIcon.Error);

    this.Close();
    return;
   }
}

A execução do projeto exibe o seguinte resultado:

Aguarde mais dicas sobre o ListView...

Eu sei é apenas C# , mas eu gosto...

Referências:


José Carlos Macoratti