Guilherme's profileGuilherme de Carvalho Ca...PhotosBlogListsMore Tools Help

Blog


    September 09

    Apenas para descontrair (Mudei de Lado).

    MUDEI DE LADO . . .

    Resolvi ficar ao lado de Lula ...
    Que me desculpem meus amigos, e por favor não me critiquem, mas após esfriar a cabeça e analisar melhor a situação atual, considerei melhor... e mudei..... de agora em diante, ficarei ao lado do Lula !

    Se eu ficar atrás... Ele me caga.
    Se eu ficar na frente... Ele me fode!
    Como não há alternativa, resolvi ficar ao lado dele...

    ENTÃO, PENSANDO BEM, CONCLUI QUE QUANDO TUDO VOLTAR AO NORMAL...

    Será o dia em que:

    - GENUÍNO será algo verdadeiro;
    - GENRO apenas o marido da filha;
    - SEVERINO apenas o porteiro do prédio;
    - FREUD voltará a ser o só criador da Psicanálise;
    - LORENZETTI será só uma marca de chuveiro;
    - GREENGALGH voltará a ser um almirante que participou de nossa história;
    - Dirceu, Palloci, Delúbio, Silvio Pereira, Berzoini,Gedimar,Valdebran, Bargas, Expedito Veloso, Gushiken, etc, serão simples.... presidiários.
    - E LULA APENAS UM FRUTO DO MAR.

    Agora, quando olho meu titulo de eleitor, entendo o verdadeiro significado do nome  'ZONA ELEITORAL' !

    September 06

    AutoComplete com jQuery e asp.net

    O objetivo deste post não é determinar qual a melhor abordagem a ser adotada no desenvolvimento de um componente de autocompletar nas aplicações asp.net, mas mostrar uma alternativa ao AutoComplet do Toolkit.
     
    Vamos utilizar o jQuery[1], framework para desenvolvimento com JavaScript e AJAX, fazendo o download do arquivo [2], podemos colocá-lo dentro de uma pasta js na nossa aplicação. Após isto poderemos referenciar o framework na nossa webform, onde queremos implentar tal solução. Por ser um arquivo js basta colocarmos no head do nosso webform o link para o arquivo assim: 
     

    <asp:ScriptReference Path="~/jQuery/jquery-1.3.2.js" />

     Você pode estar achando estranho a forma com que referenciei o arquivo, mas como estou usando MasterPage, é necessário que a referencia ao arquivo siga este padrão. Esta referência deve ser feita no arquivo da MasterPage.

    Agora podemos ir para a parte de criação da aplicação que irá fazer a busca no banco de dados para trazer os dados do banco e disponibilizá-los para o componente onde queremos implementar a função de autocomplete, que no nosso caso será um TextBox. Não iremos utilizar um webservice, pois com o uso do jQuery podemos criar esta funcionalidade com uma simples página aspx, bastando para isto criar a função no evento page_load, como mostrado abaixo.

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Response.Expires = -1
            Response.ContentType = "text/plain"
            Dim txtResposta As New Text.StringBuilder
            Dim Dr As Npgsql.NpgsqlDataReader
            Dim conPgsql As New NpgsqlConnection(PgConexao.ToString)
            Dim comPgsql As New NpgsqlCommand
            Dim usuarioLogado As Integer = Request.Cookies("UserID").Value
            Try
                comPgsql.Connection = conPgsql
                conPgsql.Open()
                With comPgsql
                    .CommandType = Data.CommandType.Text
                    .CommandText = "SELECT CAST(proc.numero AS TEXT) FROM advogaweb.processo proc INNER JOIN advogaweb.advogado_processo advpr ON proc.idprocesso = advpr.fkprocesso WHERE proc.situacao=0 AND advpr.fkadvogado = CAST(:s1 AS Integer)"
                    .Parameters.Add(New NpgsqlParameter("s1", NpgsqlDbType.Text))
                    .Parameters(0).Value = usuarioLogado
                    Dr = .ExecuteReader()
                End With
                If Dr.HasRows Then
                    While Dr.Read
                        txtResposta.Append(Dr(0).ToString)
                        txtResposta.Append(" ")
                    End While
                    txtResposta.Remove(txtResposta.Length - 1, 1)
                End If
            Catch exPgsql As NpgsqlException
                conPgsql.Close()
            Catch ex As Exception
                conPgsql.Close()
            Finally
                conPgsql.Close()
            End Try
            Response.Write(txtResposta.ToString())
            Response.End()
        End Sub

      A função é auto explicativa, bastando prestar atenção em alguns detalhes, como o tipo do retorno que deve ser uma string e tem que ser retornada pelo response.write. Outro ponto que devemos ter atenção é nas primeiras linhas.

            Response.Expires = -1
            Response.ContentType = "text/plain"

    Estas configurações são necessárias para funcionar da maneira correta, lembrando que você pode adotar uma outra abordagem. Agora podemos partir para a configuração do evento jQuery a ser executado.

    Neste caso foi criada uma função para poder aproveitar o máximo a reusabilidade.

    (function($) {
            $.getProcessosAutocomplete = function() {           
               $.ajax({
                    url: "../admsistema/jQuery.aspx",
                    async: false,
                    success: function(data){                    
                        var processos = data.split(" ");
                        $('.inputProcesso').autocomplete(processos,
                            {
                                width:180, highlight: false, multiple: false, scroll: true, scrollHeight: 300, autoFill:true
                            }
                        );
                    }
                });
            }
        })(jQuery);   


    Neste caso estamos usando o plugin autocomplete[3] do jQuery. A função javascript acima faz requisição ajax ao webform jquery.aspx que tem a função mostrada acima. Depois de tal requisição o resultado é jogado dentro da variável data, que recebe uma string no formato "a b d e f g h i j ..." seria uma string separada por espaços em branco, entretanto o plugin autocomplete precisa de um Array, por isto eu faço o data.split(" ") jogando o resultado dentro da variável processos, que será passado como primeiro parâmetro do autocomplete.

    Foi necessário configurar o async: false ou seja nosso evento será de forma sincrona, porque no meu caso eu precisei implementar a rotina no load da página, mas se desejar que seja de forma assincrona basta configurar para async: true, ou retirar tal parâmetro, porque o default é true

    O segundo parâmetro serve apenas para configurar a exibição do autocomplete, e tais configurações podem ser consultadas na página do autocomplete.

    [1] http://www.jquery.com
    [2] http://docs.jquery.com/Downloading_jQuery
    [3] http://plugins.jquery.com/project/autocompletex

    Bom espero ter sido bem claro neste post, e que sirva de ajuda para quem necessitar implementar tal funcionalidade nas suas aplicações.