Quick Tips: Carregando uma lista de objetos em um ListView com Reflection
Nesta quick tip veremos como carregar uma lista de objetos dinamicamente em um ListView em uma aplicação WindowsForms.
Insira um botão e um ListView no formulário e altere a propriedade View para Details.
Declare uma classe Cliente que será quem exibiremos na listView.
public class Cliente
{
public int Codigo { get; set; }
public String Nome { get; set; }
public String Bairro { get; set; }
}
Abaixo está o código para carregar a lista de clientes dinamicamente na ListView.
private void BtnLoad_Click(object sender, EventArgs e)
{
//Cria lista de clientes
List<Cliente> lista = new List<Cliente>();
//Cria, alimenta e adiciona clientes à lista
Cliente c = new Cliente();
c.Codigo = 1;
c.Nome = "Ricardo";
c.Bairro = "Relango";
lista.Add(c);
c = new Cliente();
c.Codigo = 2;
c.Nome = "Julia";
c.Bairro = "Barra";
lista.Add(c);
c = new Cliente();
c.Codigo = 3;
c.Nome = "Givonilda";
c.Bairro = "Recreio";
lista.Add(c);
c = new Cliente();
c.Codigo = 4;
c.Nome = "Maria";
c.Bairro = "Irajá";
lista.Add(c);
//Recupera lista de propriedades da classe Cliente
PropertyInfo[] props = typeof(Cliente).GetProperties();
//Percorre lista de propriedades da classe Cliente
foreach (PropertyInfo p in props)
{
//Cria uma nova coluna
ColumnHeader col = new ColumnHeader();
//Adiciona ao listView
listView1.Columns.Add(col);
//Altera o text atribuindo o nome da propriedade de Cliente
col.Text = p.Name;
//Ajusta o tamanho da coluna
col.Width = 100;
}
//Percorre lista de clientes
foreach (Cliente cliente in lista)
{
//Adiciona um item em branco no listView
ListViewItem item = listView1.Items.Add("");
foreach (PropertyInfo p in props)
{
//Se for a primeira propriedade então coloca seu valor no text do item
//Senão adiciona um subItem com o valor da propriedade
if (p == props[0])
{
item.Text = p.GetValue(cliente,null).ToString();
}
else
{
item.SubItems.Add(p.GetValue(cliente,null).ToString());
}
}
}
}
Resultado da execução da rotina.
É isso aí pessoal, vou ficando por aqui.
Fiquem a vontade para criticar, tirar dúvidas e sugerir novos temas.
Abraço.