none
Filtro no Datagridview, todas as colunas ao mesmo tempo RRS feed

  • Pergunta

  • Queria filtrar minha dgv de produtos, todas as colunas dela ao mesmo tempo (Nome, Cor, estoque, preço...) em apenas um text box, é possível? Eu fiz um filtro mas esse filtro só serve pra uma coluna e uma text box, se alguém puder me ajudar
    domingo, 5 de fevereiro de 2017 22:13

Respostas

  • Olá,

    Poste seu código atual para que possamos orientá-lo seguindo o que já tem.

    Mas um código genérico que poderia ser usado para filtrar a grid, buscando por todas as colunas, baseado no valor de um textbox:

                bool mostrar = false;
                foreach(DataGridViewRow row in dataGridView1.Rows)
                {
                    if (!row.IsNewRow)
                    {
                        mostrar = false;
                        foreach (DataGridViewCell cell in row.Cells)
                        {
                            if ((cell.Value != null && cell.Value.ToString().Contains(textbox1.Text)) || string.IsNullOrEmpty(textbox1.Text))
                            {
                                mostrar = true;
                                break;
                            }
                        }
                        row.Visible = mostrar;
                    }
                }

    OBS: Talvez seja preciso adaptar para o seu caso.

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 6 de fevereiro de 2017 10:21
  • A forma mais fácil de fazer isso seria usando o BindingSource, veja este exemplo do mestre Macoratti

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    segunda-feira, 6 de fevereiro de 2017 13:27

Todas as Respostas

  • Olá,

    Poste seu código atual para que possamos orientá-lo seguindo o que já tem.

    Mas um código genérico que poderia ser usado para filtrar a grid, buscando por todas as colunas, baseado no valor de um textbox:

                bool mostrar = false;
                foreach(DataGridViewRow row in dataGridView1.Rows)
                {
                    if (!row.IsNewRow)
                    {
                        mostrar = false;
                        foreach (DataGridViewCell cell in row.Cells)
                        {
                            if ((cell.Value != null && cell.Value.ToString().Contains(textbox1.Text)) || string.IsNullOrEmpty(textbox1.Text))
                            {
                                mostrar = true;
                                break;
                            }
                        }
                        row.Visible = mostrar;
                    }
                }

    OBS: Talvez seja preciso adaptar para o seu caso.

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 6 de fevereiro de 2017 10:21
  • A forma mais fácil de fazer isso seria usando o BindingSource, veja este exemplo do mestre Macoratti

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    segunda-feira, 6 de fevereiro de 2017 13:27
  • Olá,

    Poste seu código atual para que possamos orientá-lo seguindo o que já tem.

    Mas um código genérico que poderia ser usado para filtrar a grid, buscando por todas as colunas, baseado no valor de um textbox:

                bool mostrar = false;
                foreach(DataGridViewRow row in dataGridView1.Rows)
                {
                    if (!row.IsNewRow)
                    {
                        mostrar = false;
                        foreach (DataGridViewCell cell in row.Cells)
                        {
                            if ((cell.Value != null && cell.Value.ToString().Contains(textbox1.Text)) || string.IsNullOrEmpty(textbox1.Text))
                            {
                                mostrar = true;
                                break;
                            }
                        }
                        row.Visible = mostrar;
                    }
                }

    OBS: Talvez seja preciso adaptar para o seu caso.

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MVP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    Olá, eu estou usando o binding source, e não é possível fazer o filtro que eu quero por ele? 

    quinta-feira, 9 de fevereiro de 2017 01:26
  • E o codigo que eu coloquei foi o bsLista.Filter, no evento textchanged na textbox
    quinta-feira, 9 de fevereiro de 2017 01:30