Usuário com melhor resposta
Geral

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
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!
- Editado Rodrigo CdS terça-feira, 24 de julho de 2018 17:31
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 3 de agosto de 2018 19:21
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!
- Editado Rodrigo CdS terça-feira, 24 de julho de 2018 17:31
- Marcado como Resposta Filipe B CastroModerator sexta-feira, 3 de agosto de 2018 19:21
-