Build Brasil
Build Brasil
Auto Complete com Highlight no ASP .NET AJAX

O ASP .NET AJAX nos trouxe um leque de facilidades para deixar nossas aplicações com uma melhor experiência do usuário. E o mais legal de tudo, é que conseguimos agregar mais funcionalidades a ele, alterando seu código fonte e criando uma nova versão da DLL. No meu caso, foi um pouco diferente. Eu precisava fazer com que, conforme a pessoa iria digitando, na lista abaixo, o texto ficasse em negrito, e para isso eu apenas criei um JavaScript, não precisando gerar outra DLL do AJAX. Para entender melhor, veja a imagem abaixo:

clip_image002

Figura 01

Note na Figura 01, que conforme eu vou digitando, o mesmo texto fica em negrito, e é isso que iremos fazer agora.

Vamos supor que você já tenha criado o seu projeto, adicionado o seu controle AutoCompleteExtender, configurado seu Webservice, ou seja, o necessário para que ele funcione corretamente.

Finalizando isso, iremos adicionar a seguinte classe na CSS:

.AutoComplete_ListItemHighlightText {
    font-weight:bold;
}
E depois iremos adicionar os seguintes métodos em “JavaScript”:
function ClientPopulated(source, eventArgs) {

    if (source._currentPrefix != null) {

        var list = source.get_completionList();
        var search = source._currentPrefix.toLowerCase();

        for (var i = 0; i < list.childNodes.length; i++) {

            var text = list.childNodesIdea.innerHTML; 
            var index = RetiraAcentos(text).toLowerCase().
                    indexOf(RetiraAcentos(search).toLowerCase());

            if (index != -1) {

                var value = text.substring(0, index);
                value += '<span class="AutoComplete_ListItemHighLightText">';
                value += text.substr(index, search.length);
                value += '</span>';
                value += text.substring(index + search.length);

                list.childNodesIdea.innerHTML = value;

            }

        }
    
    }

} 

 O método acima aplica a classe AutoComplete_ListItemHighLightText nos itens da lista que contenham o texto procurado.

A função abaixo apenas regulariza o texto, substituindo as letras com acento para as sem acento. Ela é necessária, por que nem sempre os itens listados no AutoComplete estão com acento, ou seja, escritos corretamente. Voltando na Figura 01, podemos perceber que mesmo digitando apenas a palavra “sao”, a função destaca também os “são”, e é graças a esse método que isso acontece.

function RetiraAcentos(txt) {

    var Acentos = "áàãââÁÀÃÂéêÉÊíÍóõôÓÔÕúüÚÜçÇabcdefghijklmnopqrstuvxwyz";
    var Traducao ="AAAAAAAAAEEEEIIOOOOOOUUUUCCABCDEFGHIJKLMNOPQRSTUVXWYZ";
    var Posic, Carac;
    var TempLog = "";
    var value = txt.toUpperCase();

    for (var i=0; i < txt.length; i++) {
        
        Carac = value.charAt(i);
        Posic = Acentos.indexOf(Carac);

        if (Posic > -1)
            TempLog += Traducao.charAt(Posic);
        else
            TempLog += value.charAt(i);
    }

    return TempLog;

}

E essa trata o conteudo selecionado, ou seja, preenche o campo com o item selecionado.

function itemSelected(source, ev) {

    var index = source._selectIndex;
    var dd = source.get_completionList().childNodes[index]._value;
    source.get_element().value = dd;
}

E agora iremos atribuir o método ClientPopulated no evento OnClientPopulated e itemSelected no evento OnClientItemSelected do controle AutoCompleteExtender.

Pronto! Seu controle está mais completo. Agora é esperar que nas futuras versões isso seja agregado ao Framework do ASP .NET AJAX.


Posted 2 Jun 2009 8:38 by Abdul Hade
Filed under: , ,
Copyright© Build Brasil 2004 - 2009 - Todos os Direitos Reservados
Powered by Community Server (Commercial Edition), by Telligent Systems