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.