Quick Tips: TreeView em WindowsForms – Parte 2

 

Nesta quick tip veremos como usar o montar visualizações em árvore de um objeto dinamicamente usando Reflection.

 

Para isso vamos usar o mesmo exemplo da primeira parte da quickTip. Apenas inclua um botão “LoadList” , como mostrada na figura abaixo.




Implemente a classe Cliente da seguinte forma:

 

    public class Cliente

    {

        public int Codigo { get; set; }

        public String Nome { get; set; }

        public String Bairro { get; set; }

    }

 

É este domínio que trabalharemos para exibir na treeview.

 

        private void button2_Click(object sender, EventArgs e)

        {

            //Cria lista de clientes

            List<Cliente> lista = new List<Cliente>();

            //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);

 

            //percorre lista de clientes

            foreach(Cliente cliente in lista){

                //recupera propriedades de Cliente

                PropertyInfo[] props = cliente.GetType().GetProperties();

 

                //Insere um nó raiz com o código do cliente

                TreeNode NodeIns = treeView.Nodes.Add(cliente.GetType().Name + ": " + props[0].GetValue(cliente, null));

                //percorre a lista de propriedades

                foreach(PropertyInfo p in props){

                    //Insere nó filho no nó inserido na raiz anteriormente

                    NodeIns.Nodes.Add(p.Name + ": " + 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.