none
filtro no ComboBox RRS feed

  • Pergunta

  • OI Gente .. 

    olha eu aki de novo ..

    to com um problema na filtragem de dados em uma ComboBox..

    eu criei uma query , e conforme eh digitado na combo .. aparece somente os valores iniciados com a letra digitada ..
    o problema eh q qdo eu digito uma outa letra, a primeira eh apagada ..

    ex:
    qro filtrar a palavra "ATIVIDADE"
    eu digito a letra "A" aparece todos os valores q iniciam com a letra "A",
    se eu digitar a letra "T", a letra "A" eh apagada e aparecem somente os valores q iniciam com a letra "T".
    e assim sucessivamente ..

    eh alguma propriedade da Combo q devo definir ou algum metodo que devo instanciar ..
    coloquei a chamada no metodo Key_up
    esta correto ??
    ou oq devo fazer ?? 

    Att..

    Daniel
    quinta-feira, 4 de junho de 2009 12:06

Respostas

  • entaum ..
    naum entendi muito bem o pq naum aceitou do modo q eu fiz ..

    entaum eu joguei os valores em um ArrayList e populei ..
    faz todo o processo legalzinho ..

    ArrayList table = new ArrayList(); 
    while (campos.Read()) 
          table.Add(campos["ativ"].ToString(), campos["descr"].ToString()); 
    Combo.DataSource = table; 
    Combo.ValueMember = "Valor"; 
    Combo.DisplayMember = "Descricao";

    vai entender o motivo ..
    agora ele preenche sem comer os caracteres e filtra preenchendo o combo item na ordem ..

    mas bele ..

    falowssssssss
    sexta-feira, 5 de junho de 2009 19:50

Todas as Respostas

  • Olá Daniel

    Experimente usar as opções de autocomplete do combobox para ver se atende o que vc deseja.

    Ficam na janela Properties do combobox na ultima categoria (Misc).
    Altere a propriedade AutoCompleteSource para ListItens (para autocompletar usando os dados que estao no combobox) e o AutoCompleteMode para aquele que voce achar melhor.

    []s
    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    quinta-feira, 4 de junho de 2009 21:15
  • Bom Dia Robson

    Tudo Bom ??

    eu jah fiz essas configurações ..

    mas naum adiantou .. eh estranho ..
    naum entendo o motivo por esta acontecendo esse problema .,.

    a combo em vez de manter o valor jah digitado .. ele apaga e insere o novo caracter ..

    coloquei uma função no evento Key_up e toda letra digitada eh feita a pesquisa para filtrar os dados desejados ..

    segue a função ..

            public void ComboAtividade(TimeSheet windows, string like)
            {
                try
                {
                    select = new MySqlCommand();
                    select.Connection = Connect();

                    Sql = " select cast(ativ as char) as ativ, descr " +
                          " from ativ " +
                          " where ativ is not null ";

                    if (like != null)
                    {
                        Sql += " and descr like('" + like + "%') ";
                    }

                    Sql += " and divi = '" + usuario.Divisao + "' " +
                           " and csup = '" + usuario.Supervisao + "' " +
                           " order by descr ";
                    /*
                    Sql += " and divi = 1 " +
                           " and csup = 1 " +
                           " order by descr ";
                    */
                    dbOpen();

                    select.CommandText = Sql;
                    campos = select.ExecuteReader();
                    Ds = new DataTable("Atividade");
                    Ds.Columns.Add("codigo", typeof(string));
                    Ds.Columns.Add("descricao", typeof(string));
                    
                    if (campos != null)
                    {
                        object[] rows = new object[2];
                        rows[0] = "";
                        rows[1] = "";
                        Ds.Rows.Add(rows);
                        while (campos.Read())
                        {
                            rows[0] = campos["ativ"].ToString();
                            rows[1] = campos["descr"].ToString();
                            Ds.Rows.Add(rows);
                        }
                        windows.cbAtividade.DataSource = Ds;
                        windows.cbAtividade.ValueMember = "codigo";
                        windows.cbAtividade.DisplayMember = "descricao";
                    }
                    dbClose();
                }
                catch (MySqlException erro)
                {
                    MessageBox.Show("Erro ao Selecionar Ciclo de Vida/Disciplina");
                }
            }

    será q tem algo a ver em montar a os dados da Combo a cada letra digitada ??


    []'s

    Daniel
    sexta-feira, 5 de junho de 2009 12:09
  • por acaso o valor não ta ficando tipo "selecionado" ? que é quando fica o fundo azul por cima do "A" que foi digitado?
    Você está alterando o valor do combo, o que faz o foco sair e entrar, e quando entra ele da um selectedtext = all
    ve se após o código acima, você não consegue o "deselecionar" o que tiver sleecionado

    sexta-feira, 5 de junho de 2009 12:15
  • e ai Gente ..


    naum sei se esta certo .. mas eu coloquei o codigo no evento Key_Up ..
    o primeiro caracter naum eh registrado ..
    jah o segundo vem selecionado .. realmente ele naum pode vir selecionado ...

    e se eu coloco o codigo no evento Key_Press ..
    o caracter nem aparace na cx de texto, tanto o primeiro como os caracteres seguintes ..

    como eu faria pra naum selecionar todo o texto q eu escreva, e como eu faria para que o primeiro texto da seguencia filtrada, ou seja, o primeiro da lista em ordem alfabética apareça na combo e ainda me deixe digitar o restante do texo para uma filtragem melhor do Banco de Dados ???


    agradeceria muito se me dessem esse Help ..

    []'s

    Daniel
    sexta-feira, 5 de junho de 2009 13:45
  • Ja penso em usar algum evento do Combobox como "textchanged" ou valuechanged?
    Realmente não recomendo utilizar o keyup!
    de qualquer forma, se for obrigatório, tente procurar alguma propriedade no combobox que deseleciona o texto! essa propriedade existe no textbox. SelectedCursor, ou selectedposition, ou selectedlenght, ou selectedtext! não me recordo de cabeça, mas tem!
    Se achar ela, defina para vazio! = string.empty ou 0 (dependendo do tipo da propriedade)
    estou corrido aqui agora, mas assim que tiver um tempo posso dar um look

    portanto, se corrigir por ai alguma das dicas acima, favor avisar aqui
    :)


    sexta-feira, 5 de junho de 2009 14:19
  • Daniel, só marca qualquer uma das respostas (de preferência a que tu considere correta, mesmo sendo a tua) pro tópico aparecer como encerrado
    :)

    obrigado
    sexta-feira, 5 de junho de 2009 19:33
  • oba Gente .. bele ?? fiz umas alterações no método de armazenamento dos valores .. e creio eu ter dado certo .. criei um ArrayList , deixei as caracteristicas das informações de propriedades da Combo que vcs me passaram .. e obtive um bom resultado .. ArrayList table = new ArrayList(); while (campos.Read()) { table.Add(campos["ativ"].ToString(), campos["descr"].ToString()); } Combo.DataSource = table; Combo.ValueMember = "Valor"; Combo.DisplayMember = "Descricao"; Valew Gente .. T+ e um Ótimo Final de Semana .. e lembrem-se SE FOR DIRIGIR, NÃO BEBA. E SE FOR BEBER, ME CHAMA . huahuahauhauahuau inteh ..
    sexta-feira, 5 de junho de 2009 19:33
  • Opa Daniel

    No final das contas nao entendi nada mas td bem hehe.

    Mas só uma coisa. Se vc quiser, nao precisa nem do loop no DataReader.

    Basta joga-lo para um DataTable com um unica linha:

    datatable.Load(select.ExecuteReader());

    Só isso!

    []s



    Robson Castilho - Desenvolvedor C# - MCTS .Net 2.0 Windows Applications [Se o post foi útil, não esqueça de marcá-lo. Obrigado]
    sexta-feira, 5 de junho de 2009 19:41
  • entaum ..
    naum entendi muito bem o pq naum aceitou do modo q eu fiz ..

    entaum eu joguei os valores em um ArrayList e populei ..
    faz todo o processo legalzinho ..

    ArrayList table = new ArrayList(); 
    while (campos.Read()) 
          table.Add(campos["ativ"].ToString(), campos["descr"].ToString()); 
    Combo.DataSource = table; 
    Combo.ValueMember = "Valor"; 
    Combo.DisplayMember = "Descricao";

    vai entender o motivo ..
    agora ele preenche sem comer os caracteres e filtra preenchendo o combo item na ordem ..

    mas bele ..

    falowssssssss
    sexta-feira, 5 de junho de 2009 19:50