none
Fazer pesquisa em um dropdownlist ou listbox RRS feed

  • Pergunta

  • Olá pessoal, sou estudante na área de desenvolvimento e gostaria de implementar um recurso em minha aplicação em que estou desenvolvendo mas encontro dificuldades. Meu objetivo é buscar um valor dentro de um listbox ou dropdown após ter carregado com um filtro select realizado no banco de dados, isso evitaria que toda vez que desejasse fazer tal pesquisa teria que realizar um novo select assim, uma nova consulta no banco de dados, se este recurso é disponível no gridview ajudaria também, desde já agradeço..

    quinta-feira, 11 de fevereiro de 2010 13:10

Respostas

  • Emerson, não entendi como seria uma pesquisa dentro de um dropdownlist.

    Eu vou passar um exemplo de um combobox, e você verifica se ajuda:

    Após preencher o seu combobox, sete a propriedade DropDownStyle = DropDownList.

    Com isso o usuário fica impossibiltado de digitar no combobox, mas ao digitar uma tecla, o combobox vai exibir o primeiro item que inicia com aquele caracter.

    Pode ser que te ajude!




    quinta-feira, 11 de fevereiro de 2010 13:52
  • vc pode usar o linq to object.... mas mesmo assim se for filtrar os dados é melhor usar uma variavel auxliar para isso

    public class MeuForm: Form {
          private TipoDados[] CacheDados;

          public void meuForm_Load(...) {
               this.CacheDados = // Carrega a consulta do banco de dados
               this.listBox1.DataSource = this.CacheDados;
          }
     
          public void Filtrar(string value) {
             this.listBox1.DataSource = this.CacheDados.Where(i => i.PropriedadeDeFiltro == value).ToArray();
          }
    }
    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    quinta-feira, 11 de fevereiro de 2010 14:30
    Moderador
  • Boa tarde!

    O comboBox tem uma propriedade que é o auto complete.

    Basta setar as seguintes propriedades

    comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems; 

    espero ter ajudado

    quinta-feira, 11 de fevereiro de 2010 14:57
  • agora entendi...

    com linq da pra fazer tudo isso que voce precisa, e muito mais. Olha so um exemplo:


    var resultQuery = from p in db.Produto select new { p.codigo, p.descricao };
    var filtroQuery = (from p in resultQuery select new { p.codigo, p.descricao }).Where(n => n.descricao.Contains("AREIA")).FirstOrDefault();


    perceba que a primeira query traz codigo e descricao da tabela de produtos...
    ja a segunda query está fazendo uma pesquisa na primeira query, onde o produto contem certa descricao...

    tenta aprender mais sobre linq, que resolve todos esses problemas de uma maneira bem fácil e rápida!

    sexta-feira, 12 de fevereiro de 2010 13:32
  • na verdade a primeira consulta poderia preencher o seu combobox, e a segunda poderia preencher um textbox, algo do tipo

    var resultQuery = from p in db.Produto select new { p.codigo, p.descricao };


    combobox1.DataSource = resultQuery;

    var filtroQuery = (from p in resultQuery select new { p.codigo, p.descricao }).Where(n => n.descricao.Contains("AREIA")).FirstOrDefault();

    textbox1.Text = filtroQuery.descricao.ToString();


    entendeu?
    • Marcado como Resposta EmersonS sexta-feira, 12 de fevereiro de 2010 14:01
    • Não Marcado como Resposta EmersonS sexta-feira, 12 de fevereiro de 2010 17:27
    • Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 12 de fevereiro de 2010 17:42
    sexta-feira, 12 de fevereiro de 2010 13:56
  • Olá pessoal, obrigado pela ajuda, então, achei interessante a forma que o Daniel demosntrou e irei pesquisar sobre o assunto, mas cheguei de uma forma diferente e para mim mais simples de chegar ao resultado. Como não consegui achar nenhuma função para o pretendido, joguei os valores em um vetor e descobri um método Contains, ele verifica se há este valor dentro das posições do vetor, o valor teste a pesquisar era "João", ficou dessa forma :


                 string instrucao;
                 int Qtde=0;
                 SqlConnection Cn = new SqlConnection(ConfigurationManager.AppSettings["Conexao"]);
                 instrucao = "SELECT COUNT(*)as Qtde FROM tbl_Cliente";
                 SqlCommand Cm = new SqlCommand(instrucao, Cn);
                 Cn.Open();
                 SqlDataReader Dr = Cm.ExecuteReader();
                 Dr.Read();
                 Qtde = Convert.ToInt32(Dr["Qtde"]);
                 Dr.Close();
                 Dr = null;
                 Cm = null;

                 instrucao= "SELECT [Cliente],[Cliente_ID] FROM tbl_Cliente";
                 Cm = new SqlCommand(instrucao, Cn);         
                 Dr = Cm.ExecuteReader();
                 DropDownList1.DataSource = Dr;
                 DropDownList1.DataTextField = "Cliente";
                 DropDownList1.DataValueField = "Cliente_ID";
                 DropDownList1.DataBind();
                 Dr.Close();
                 Dr = null;
                 Cn.Close();
                 Cn = null;
                 Cm = null;
                            
                string[] Valores = new string[Qtde];

                for (int i = 0; i < Qtde; i++)
                { Valores[i] = DropDownList1.Items[i].ToString(); }  
            
                if (Valores.Contains("João"))
                {TextBox1.Text = "ESTE VALOR EXISTE";}
                else { TextBox1.Text = "NÃO EXISTE VALOR";}

    sexta-feira, 12 de fevereiro de 2010 17:36

Todas as Respostas

  • Emerson, não entendi como seria uma pesquisa dentro de um dropdownlist.

    Eu vou passar um exemplo de um combobox, e você verifica se ajuda:

    Após preencher o seu combobox, sete a propriedade DropDownStyle = DropDownList.

    Com isso o usuário fica impossibiltado de digitar no combobox, mas ao digitar uma tecla, o combobox vai exibir o primeiro item que inicia com aquele caracter.

    Pode ser que te ajude!




    quinta-feira, 11 de fevereiro de 2010 13:52
  • vc pode usar o linq to object.... mas mesmo assim se for filtrar os dados é melhor usar uma variavel auxliar para isso

    public class MeuForm: Form {
          private TipoDados[] CacheDados;

          public void meuForm_Load(...) {
               this.CacheDados = // Carrega a consulta do banco de dados
               this.listBox1.DataSource = this.CacheDados;
          }
     
          public void Filtrar(string value) {
             this.listBox1.DataSource = this.CacheDados.Where(i => i.PropriedadeDeFiltro == value).ToArray();
          }
    }
    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    quinta-feira, 11 de fevereiro de 2010 14:30
    Moderador
  • Boa tarde!

    O comboBox tem uma propriedade que é o auto complete.

    Basta setar as seguintes propriedades

    comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems; 

    espero ter ajudado

    quinta-feira, 11 de fevereiro de 2010 14:57
  • Olá Pessoal, primeiramente muito obrigado por tentarem me ajudar, então o meu objetivo é este, ex :

    1.. Fiz minha consulta, trouxe todos os valores de um campo para meu componente.

    string

     

    instrucao = "SELECT [Cliente],[Cliente_ID] FROM tbl_Cliente";

     

     

     

    SqlConnection Cn = new SqlConnection(ConfigurationManager.AppSettings["Conexao"]);

     

    SqlCommand Cm = new SqlCommand(instrucao, Cn);

    Cn.Open();

     

    SqlDataReader Dr = Cm.ExecuteReader();

    DropDownList1.DataSource = Dr;

    DropDownList1.DataTextField =

    "Cliente";

    DropDownList1.DataValueField =

    "Cliente_ID";

    DropDownList1.DataBind();

     

    Dr.Close();

    Dr =

    null;

    Cn.Close();

    Cn =

    null;


    2. Irá aparecer vários clientes, então gostaria de fazer uma pesquisa dentro deste componente sem voltar até o bd com uma consulta de select e verificar se existe um "JOÃO", sabe não sei se é possível mais se alguem souber ou já utilizou ajudaria bastante, acredito que exista uma função para isso não sei, muito obrigado..

    sexta-feira, 12 de fevereiro de 2010 12:53
  • agora entendi...

    com linq da pra fazer tudo isso que voce precisa, e muito mais. Olha so um exemplo:


    var resultQuery = from p in db.Produto select new { p.codigo, p.descricao };
    var filtroQuery = (from p in resultQuery select new { p.codigo, p.descricao }).Where(n => n.descricao.Contains("AREIA")).FirstOrDefault();


    perceba que a primeira query traz codigo e descricao da tabela de produtos...
    ja a segunda query está fazendo uma pesquisa na primeira query, onde o produto contem certa descricao...

    tenta aprender mais sobre linq, que resolve todos esses problemas de uma maneira bem fácil e rápida!

    sexta-feira, 12 de fevereiro de 2010 13:32
  • Daniel, somente uma dúvida, dei uma olhada sobre linq, é algo de armazenar informações na memória e buscá-las, muito interessante irei aprofundar neste assunto muito bom =D..

    Então, nessa sintaxe que você colocou eu substituo os valores de  db.Produto, seria o meu DropDownList1? Poís em meu DropDownList1, ele já está carregado!
    sexta-feira, 12 de fevereiro de 2010 13:51
  • na verdade a primeira consulta poderia preencher o seu combobox, e a segunda poderia preencher um textbox, algo do tipo

    var resultQuery = from p in db.Produto select new { p.codigo, p.descricao };


    combobox1.DataSource = resultQuery;

    var filtroQuery = (from p in resultQuery select new { p.codigo, p.descricao }).Where(n => n.descricao.Contains("AREIA")).FirstOrDefault();

    textbox1.Text = filtroQuery.descricao.ToString();


    entendeu?
    • Marcado como Resposta EmersonS sexta-feira, 12 de fevereiro de 2010 14:01
    • Não Marcado como Resposta EmersonS sexta-feira, 12 de fevereiro de 2010 17:27
    • Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 12 de fevereiro de 2010 17:42
    sexta-feira, 12 de fevereiro de 2010 13:56
  • A sim, compreendi, nunca tinha trabalhado com linq, mas ficou claro, vou estudar referente o mesmo é muito bom =D. Muito obrigado Daniel!!!
    sexta-feira, 12 de fevereiro de 2010 14:01
  • Lembrando que esse é Linq to Entities, tem outros linqs, mas eu não tenho experiencia, somente o Entities!

    pesquise pois vale a pena, eu recomendo
    sexta-feira, 12 de fevereiro de 2010 14:23
  • Olá pessoal, obrigado pela ajuda, então, achei interessante a forma que o Daniel demosntrou e irei pesquisar sobre o assunto, mas cheguei de uma forma diferente e para mim mais simples de chegar ao resultado. Como não consegui achar nenhuma função para o pretendido, joguei os valores em um vetor e descobri um método Contains, ele verifica se há este valor dentro das posições do vetor, o valor teste a pesquisar era "João", ficou dessa forma :


                 string instrucao;
                 int Qtde=0;
                 SqlConnection Cn = new SqlConnection(ConfigurationManager.AppSettings["Conexao"]);
                 instrucao = "SELECT COUNT(*)as Qtde FROM tbl_Cliente";
                 SqlCommand Cm = new SqlCommand(instrucao, Cn);
                 Cn.Open();
                 SqlDataReader Dr = Cm.ExecuteReader();
                 Dr.Read();
                 Qtde = Convert.ToInt32(Dr["Qtde"]);
                 Dr.Close();
                 Dr = null;
                 Cm = null;

                 instrucao= "SELECT [Cliente],[Cliente_ID] FROM tbl_Cliente";
                 Cm = new SqlCommand(instrucao, Cn);         
                 Dr = Cm.ExecuteReader();
                 DropDownList1.DataSource = Dr;
                 DropDownList1.DataTextField = "Cliente";
                 DropDownList1.DataValueField = "Cliente_ID";
                 DropDownList1.DataBind();
                 Dr.Close();
                 Dr = null;
                 Cn.Close();
                 Cn = null;
                 Cm = null;
                            
                string[] Valores = new string[Qtde];

                for (int i = 0; i < Qtde; i++)
                { Valores[i] = DropDownList1.Items[i].ToString(); }  
            
                if (Valores.Contains("João"))
                {TextBox1.Text = "ESTE VALOR EXISTE";}
                else { TextBox1.Text = "NÃO EXISTE VALOR";}

    sexta-feira, 12 de fevereiro de 2010 17:36