none
Geral RRS feed

  • Pergunta

  • Boa tarde pessoal.

    Vê se vocês podem me ajudar: Eu tenho uma tabela de Clientes. Eu carrego o meu data grid com todos os clientes. Tem como no momento que eu vá digitando as letras do nome do cliente, automaticamente o meu datagrid vá fazendo automaticamente um filtro dos cliente. se eu digitar a letra "M" o datagrid filtrará todos os clientes com a letra "M". Se eu digitar "MA" o datagrid filtrará todos os cliente que começam com "MA" e assim por diante.

    Garibaldo

    segunda-feira, 23 de julho de 2018 20:47

Respostas

  • Olá, Garibaldo!

       Segue abaixo um exemplo, considerando uma coleção - um data table, no caso do exemplo - que fica carregada em um propriedade, e que é filtrada no evento TextChanged do textbox:

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(this.textBox1.Text))
                {
                    this.dataGridView1.DataSource = this.MeuDataTable;
                }
                else if ((this.MeuDataTable?.Rows?.Count ?? 0) > 0)
                {
                    var dt = this.MeuDataTable.Select($" Nome like '{this.textBox1.Text}%' ");
                    if ((dt?.Count() ?? 0) > 0)
                    {
                        this.dataGridView1.DataSource = dt.CopyToDataTable();
                    }
                    else
                    {
                        this.dataGridView1.DataSource = null;
                    }
                }
            }

    Se você carrega seus dados em um List tipado, pode usar uma expressão lambda, que ficaria mais ou menos assim:

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(this.textBox1.Text))
                {
                    this.dataGridView1.DataSource = this.LstCliente;
                }
                else if ((this.LstCliente?.Count ?? 0) > 0)
                {
                    this.dataGridView1.DataSource = this.LstCliente.Where(i => i.Nome.StartsWith(this.textBox1.Text)).DefaultIfEmpty();
                }
            }

    Se precisar de ajuda ainda, posta aqui, que continuamos o assunto. Bom trabalho!


    terça-feira, 24 de julho de 2018 17:29

Todas as Respostas

  • Olá, Garibaldo!

       Segue abaixo um exemplo, considerando uma coleção - um data table, no caso do exemplo - que fica carregada em um propriedade, e que é filtrada no evento TextChanged do textbox:

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(this.textBox1.Text))
                {
                    this.dataGridView1.DataSource = this.MeuDataTable;
                }
                else if ((this.MeuDataTable?.Rows?.Count ?? 0) > 0)
                {
                    var dt = this.MeuDataTable.Select($" Nome like '{this.textBox1.Text}%' ");
                    if ((dt?.Count() ?? 0) > 0)
                    {
                        this.dataGridView1.DataSource = dt.CopyToDataTable();
                    }
                    else
                    {
                        this.dataGridView1.DataSource = null;
                    }
                }
            }

    Se você carrega seus dados em um List tipado, pode usar uma expressão lambda, que ficaria mais ou menos assim:

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(this.textBox1.Text))
                {
                    this.dataGridView1.DataSource = this.LstCliente;
                }
                else if ((this.LstCliente?.Count ?? 0) > 0)
                {
                    this.dataGridView1.DataSource = this.LstCliente.Where(i => i.Nome.StartsWith(this.textBox1.Text)).DefaultIfEmpty();
                }
            }

    Se precisar de ajuda ainda, posta aqui, que continuamos o assunto. Bom trabalho!


    terça-feira, 24 de julho de 2018 17:29
  • Rodrigo boa tarde. Estive ausente e bom tempo, porém, estou retornando ao sistema 2 anos depois. Tem como agente continuar resolvendo esse problema que ainda não solucionei?

    GAribaldo

     
    domingo, 17 de janeiro de 2021 16:37