Quick Tips: Busca em um ListView

 

Nesta quick tip veremos como realizar buscas em um listView.

 

Insira um botão e um ListView no formulário e altere a propriedade View para Details.

Insira também um textBox e um botão Buscar, como na figura abaixo.




Declare uma classe Cliente que será quem exibiremos e buscaremos 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)

        {

            listView1.Groups.Add("Realengo","Realengo");

 

            //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 = "Recreio";

            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 no ListView

                ListViewItem item = listView1.Items.Add(cliente.Codigo.ToString());

                //Adicoina os subItems

                item.SubItems.Add(cliente.Nome);

                item.SubItems.Add(cliente.Bairro);

            }

        }

 

Código do botão Buscar

 

        private void BtnBuscar_Click(object sender, EventArgs e)

        {

            //verifica se tem items na lista

            if(listView1.Items.Count > 0){

                //procura o item pelo texto

                ListViewItem foundItem =

                    listView1.FindItemWithText(txtBusca.Text, true, 0, true);               

                //verifica se o item foi encontrado

                if (foundItem != null)

                {

                    //Verifica se não existe o grupo Localizado

                    //senão tiver cria grupo para destacar o item localizado

                    if(listView1.Groups["Localizado"]==null)

                        listView1.Groups.Add("Localizado","Localizado");

                    //se o grupo possuir items entao remove o mesmo do grupo

                    //para que ele volte ao grupo default

                    if (listView1.Groups["Localizado"].Items.Count > 0)

                        listView1.Groups["Localizado"].Items[0].Group = null;

                    //aloca o item encontrado ao grupo localizado

                    foundItem.Group = listView1.Groups["Localizado"];

                }

            }

        }

 

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.