JQuery 1.4

by Fabiano 27. janeiro 2010 18:53

Olá pessoal, hoje vou escrever sobre a nova versão do JQuery versão 1.4. Vejamos o que melhorou nesta versão, uma coisa que podemos notar e que depois que a Microsoft começou a apoiar a FrameWork vem crescendo bastante e nos que ganhamos com isso!!! 

No inicio do mês eu já dei uma Twitada sobre a nova versão que foi lançada no dia 14 de janeiro, achei bem legal o que foi feito no lançamento, pois o lançamento foi feito no dia do aniversario do JQuery, para celebrar o lançamento eles lançaram um site http://jquery14.com/.

Nota Oficial do Site: Nós estamos empolgados em trazer por 14 dias consecutivos novas liberações para celebrar a versão 1.4 do jQuery. Você observará que nós estamos empolgados com o número 14 desde que a versão 1.4 do jQuery foi liberada no aniversário do jQuery (14 de janeiro). Por isso não deixe de voltar a cada dia porque outro anúncio é feito e um novo conteúdo é liberado

Tem coisas bem legais nesse site, pretendo explorar mais artigos falando dessas mudanças.

Uma das principais mudanças foi a melhoria de performance dos principais métodos do FrameWork, se você já achava rápido imagina agora...

Nota Oficial do Site: Muitos dos principais métodos do jQuery sofreram alterações significantes na nova versão. Quando analisamos o código descobrimos que estávamos aptos à fazer alguns significantes ganhos de performance comparados com a versão anterior: Vendo quantas chamadas para funções internas estavam sendo feitas e o trabalho para reduzir a complexidade do código

Um outro ponto em que a equipe de DEV de preocupou bastante foi com  cobertura de testes e o suporte a uma quantidade maior de browsers.

Nota Oficial do Site: Na versão 1.4 corrigimos cerca de 207 bugs (comparados com 97 na versão 1.3). Adicionalmente nos melhoramos nossa cobertura de testes de 1504 testes no jQuery 1.3.2 para 3060 testes na versão 1.4. A suite de testes do jQuery está passando 100% na maioria dos browsers (Safari 3.2, Safari 4, Firefox 2, Firefox 3, Firefox 3.5, IE 6, IE 7, IE 8, Opera 10.10, e Chrome).

Um outro ponto muito importante foi a reescrita de toda a documentação oficial do jQuery 1.4 e a liberação de um novo fórum de discussão.

Nota Oficial do Site: Nós utilizamos listas de discussões, e posteriormente Grupos do Google, ao longo dos 4 anos para gerenciar as discussões e comunidades em volta do jQuery. Essa solução em particular não tem sido capaz de escalar nossas discussões tanto em termos de participação e no gerenciamento de spam

Você já pode baixar a nova versão clicando aqui e também disponível no Google e Microsoft

Bons Codigos...

Fabiano Belmonte

Twitter.com/fabianobelmonte

 

Tags:

JQuery

C# 4.0 - Tipos Dinâmicos

by Fabiano 15. janeiro 2010 02:03

Olá Pessoal, ha algum tempo comecei a escrever sobre C# 4.0,  acho que já passou da hora de voltar a escrever sobre o assunto.

Hoje vou escrever sobre um funcionalidade bem legal, que acho que vai ajudar bastante nosso dia a dia... Que é Dynamic Typed Objects.

Uma feature bem legal do C# 4.0 e o suporte à programação dinâmica, isso e feito através da criação de tipos dinâmicos de objetos, o que acontéce e que esses tipos são resolvidos em tempo de execução e não em tempo de compilação. 

O que muda? na declaração da variavel utilizamos a palavra "dynamic". A palavra-chave informa o compilador que o objeto foi declarado de forma dinâmica, deve ser tipado em tempo de execução usando o Dynamic Language Runtime (DLR).

Mais não confunda o "dynamic" com o "var", pois eles não são a mesma coisa!!! Pois o "var" e tipado em tempo de compilação diferente do "dynamic" que e tipado em tempo de execução... que são bem diferentes.

Vamos fazer alguns exemplos:

Veja um cenário onde você precisa definir propriedades de um objeto, uma dll, e você vai fazer isso utilizando Reflection:

Assembly objLib= Assembly.LoadFile(@"C:\projects\Testes\bin\Debug\Testes.dll");
Type TesteObjType = objLib.GetType("Teste.TesteClassLib");
object Classobj= Activator.CreateInstance(TesteObjType);
PropertyInfo pInfo= TesteObjType.GetProperty("Nome");
pInfo.SetValue(Classobj, "Fabiano", null);

Agora vou fazer a mesma coisa utilizando "dynamic" basta mudar a terceira e a ultima linha para:

dynamic dynamicTesteObj = Activator.CreateInstance(Classobj);
dynamicTesteObj.Name = "Fabiano";

Simples não é? Vamos ver um slide da palestra do Anders Hejlsberg's no PDC 2008.

Como podemos ver na figura acima, você pode chamar o método (s), tais como x.ToString (), y.ToLower (), z.Add (1), e ele irá funcionar sem problemas.

Esta é mais feature que nos oferece muita flexibilidade.

Quero explorar mais o C# 4.0, pretendo fazer isso separando por features...

Aceito sugestão de proxímas features... Deixe um comentario sugerindo!

Espero que gostem...

Bons Codigos...

Fabiano Belmonte

Tags:

.Net

Introdução ao JQuery

by Fabiano 30. dezembro 2009 09:32

Olá Amigos depois de um longo tempo de ausência estou de volta!
Quero me desculpar pelo relaxo, RS e que também peguei uma faze dura no trampo nossa! Paulera total!!!
Mais estou de volta, e vamos parar de lero lero!  Vamos ao que interessa!
A algum tempo j&  ;aacute; venho utilizando profundamente o JQuery, e quanto mais eu uso mais eu curto a ferramenta, ferramenta bacana que facilita a vida do DEV e o que mais eu curto e a facilidade com que conseguimos fazer as coisas.

Vou começar a falar mais de JQuery aqui no BLOG quero fazer uma serie de artigos vou do básico ate onde der e aceito sugestões...
Vamos la!!!!

O QUE É JQUERY

A biblioteca jQuery é disponibilizada como Open Source, ou seja como código aberto, você pode baixar o código e fazer novas implementações caso precise ou queira criar coisas novas para seu projeto.

O seu criador John Resig, resume o jQuery assim:
“O foco principal da biblioteca jQuery é a simplicidade. Por que submeter os desenvolvedores ao martírio de escrever longos e complexos códigos para criar efeitos simples.”

E quem é desenvolvedor dos "primordios" sabe  muito bem o que isso quer dizer... Quem nunca teve que escrever linhas e linhas de JavaScript para fazer validações de um form por exemplo, mais vamos ao novo!!!

JQuery é uma maneira mais fácil, simples, elegante e sofisticada de codificar javascript; é, nada mais, nada menos, que, segundo minha opinião, um dos melhores  frameworks já desenvolvidos para facilitar a vida dos Devs! 

É um Framework JavaScript que simplifica o modo como você trabalha com documentos XHTML, manipula eventos, cria animações, e principalmente interações AJAX.

Podemos dizer que o nome jQuery significa "javascriptQuery" ou "consultas javascript". Como veremos a seguir, é através de "consultas" a seletores CSS que acessamos os objetos da página e os manipulamos.

A sintaxe do jQuery fundamenta-se nos seletores: CSS2.1 e CSS3.

Benefícios

Por exemplo, com apenas um mecanismo, conseguimos utilizar AJAX de forma CrossBrowser ( Universal, funcionando na maioria dos navegadores atuais ), além de facilitar o desenvolvimento e o tratamento dos dados nas camadas cliente/servidor.

Existem Frameworks que são especialistas em somente um determinado comportamento ou mecanismo do conjunto de tecnologias web, como por exemplo: especialistas em efeitos ou somente em Ajax e etc.

jQuery e os Padrões Web

JQuery foi criado para andar de acordo com os Padrões Web, ou seja, compatível com qualquer navegador em qualquer sistema operacional, além de oferecer total suporte a CSS3 ( Usa-se os seletores CSS3 para selecionar elementos e não estilizar ).

Vantagens de se trabalhar com jQuery

São várias, mas listaremos as principais:

  • Compatibilidade com qualquer navegador.
  • O tamanho do arquivo .JS do jQuery é bem pequeno.
  • Encapsulamento da complexidade, você evita de programar linhas e linhas de código.
  • Você consegue acessa  r a qualquer elemento ou combinações de elementos.
  • Interação CrossBrowser Perfeita, compatível com todos os browsers atuais.
  • Infinitas as possibilidades de se realizar requisições com Ajax
  • Open Source, jQuery é Open Source e está atualmente disponível s  obre as licenças MIT e GPL.

Iniciando com jQuery

Primeiramente, devemos baixar o jQuery, para isso acesse:

www.jquery.com 

Clique no botão:

Temos estas duas opções para download: A compactada, onde é usado um compressor de JavaScript, ficando ilegível para humanos. E a outra versão não compactada, esta que é um pouco maior em Kbs. Mas no final das contas, a versão não compactada é a melhor escolha, por alguns motivos:

O tempo de carregamento é praticamente o mesmo da versão compactada, pelo fato do tempo gasto na descompressão quando o usuário recebe a página. 

A versão compactada tem a desvantagem de não ir para o cache, tendo que ser carregada novamente toda vez que o usuário voltar ao site. Portanto, quando for utilizar em seu site  ou projeto, recomendo o uso da versão não compactada.  

INSTALANDO JQUERY

A API AJAX de bibliotecas do Google fornece aos seus aplicativos um acesso em alta velocidade, estável, confiável   e disponível globalmente a todas as bibliotecas JavaScript de código aberto mais populares. Seu aplicativo pode usar nosso carregador super flexível google.load() ou o acesso direto, baseado em caminhos, para os scripts

A melhor maneira de carregar as bibliotecas é usando o google.load() para nomear uma biblioteca e a versão de sua preferência. Exemplo:

google.load("jquery", "1.3.2");

Como você pode ver nos snippets de código acima, o primeiro argumento para google.load é o nome de uma biblioteca. O segundo argumento é a especificação de uma versão. A lista completa de bibliotecas Ajax é uma coleção crescente das bibliotecas JavaScript de código aberto mais populares.

Você pode utilizar também da maneira tradicional de inclusão de script JS em sua pagina como no snippets de código abaixo:

<script src="script/jquery.js" type="text/javascript"></script>

Utilizando a função jQuery ou $

Para utilizar o JQuery, você precisa utilizar as chaves "JQuery" ou "$" para utilizar suas funções, exemplo JQuery("#Id do elemento") ou $("#Id do elemento").

Observação: Alguns desenvolvedores, usam outras Frameworks (Bibliotecas) numa mesma página com jQuery, como por exemplo, a Framework Scriptaculous , neste caso, acessar elementos com o "símbolo do dólar" $ causa conflitos na página, portanto é recomendado utilizar jQuery("").

A Primeira Função ("Olá Mundo!!!!")

Quase tudo o que fazemos com jQuery lê ou manipula (DOM), primeiramente, antes de inciarmos as interações, manipulação de eventos e etc, devemos certificar se o DOM está pronto ( Se o documento já foi lido, em outras palavras, se o documento já foi carregado ). 

Para faze  rmos isso, devemos registr  ar o evento ready (pronto) para o documento. Veja:

jQuery(document).ready(function() { 

});

Colocar um Alert() no ready do documento, não faz sentido, pelo fato que de que o Alert não manipula nada no DOM e sim é um método do objeto window , assim como close() também é um método do objeto window. Agora, se quisermos colocar um Alert() ao clicar num link, aí sim, devemos usar o ready   do documento. Como por exemplo:

 

JQuery("#linkalert") é um seletor do JQuery ( Aprenderemos seletores a seguir ), neste caso, ele seleciona unicamente o elemento de id  "linkalert". O  jQuery  por si só é um alias para a "classe" jQuery, por outro lado o  JQuery() constrói um novo objeto jQuery. A função  click() que chamamos depois é um método do objeto jQuery. Ele liga o evento clique ao elemento selecionado ( Ou seja, o elemento <a>  que selecionamos ) e executa a função fornecida quando o evento ocorrer. 

Outro detalhe importante: Com jQuery, separamos o conteúdo em camadas: Apresentação(XHTML) X Comportamento(JS), por exemplo, ao invés de:

Usamos jQuery, e acessamos este elemento, a partir de sua identificação id  "linkalert".

Vou para por aqui mais vou me aprofundando mais em outros artigos.

Espero que gostem.

 

Bons Códigos...
Fabiano Belmonte

Tags:

JQuery

Integrando sua Aplicação .Net com Twitter

by Fabiano 31. julho 2009 21:18

Acabei de implementar uma funcionalidade aqui na InfoMoney que integra nossos publicadores de noticias com o Twitter a nova rede social do momento, que e bem legal... 
Quando os redatores publicam uma nova noticia no site ela já vai para o Twitter automaticamente.

E seguindo a Dica do Tarifa vou publicar o conteudo.
Segue o Código Utilizado para que Vocês possam aproveitar também...

Primeiro Fiz integração com o Migre.me que e um serviço bem legal que reduz um URL já que no Twitter cada caractere poupado faz a diferença pois o post só pode ter 140 caracteres 

Segue o Método que gera a url:

    /// <summary>
    /// Que que recebe um URL normal e retorna uma menor gerada pelo migre-me
    /// </summary>
    /// <param name="OriginalURL"></param>
    /// <returns></returns>
    public string GenerateMigreMeURL(string OriginalURL)
    {

        try

        {

            string URIReturn, strURIGenerated; 

            //Trata se a url não começar com http://

            if (!OriginalURL.ToLower().StartsWith("http") && !OriginalURL.ToLower().StartsWith("ftp"))

            {

                OriginalURL = "http://" + OriginalURL;

            }

             var Request = System.Net.WebRequest.Create("http://migre.me/api.xml?url=" + OriginalURL);
             var Response = Request.GetResponse();

 
            XDocument xmlReturn;

            strURIGenerated = "";

            using (var reader = new StreamReader(Response.GetResponseStream()))

            {

                URIReturn = reader.ReadToEnd();

                xmlReturn = XDocument.Load(new StringReader(URIReturn), LoadOptions.SetBaseUri |      LoadOptions.SetLineInfo);

                strURIGenerated = xmlReturn.Descendants("migre").First().Value;

            }

             return strURIGenerated;

        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }

Como o serviço disponibilizado pelo Migre.me retorna um XML, não poderia deixar de utilizar o LINT To XML para fazer o parse do mesmo, o XML retornado e bem completo tem ate mensagem de erro caso ocorra, mas no exemplo eu faço somente o tratamento da mensagem, caso queira aprimorá-lo fique a vontade basta dar uma olhada do XML de retorno e tratar os campos que desejar...

Ah uma dica importante por ser um serviço Free você so poderá gerar 30 URL`s por hora se o seu serviço precisar de mais ai você devera optar pelo serviço pago do Migre.me.

Método que Posta no Twitter:

Aqui eu utilizo uma API do Twitter chamada “Twitterizer.Framework”  que e bem simples de implementar.
Faça o Download da DLL e adicione como referência em seu projeto para poder utiliza-la. E bem legal tem varias funcionalidades, vale dar uma explorada.

 

  /// <summary>
        /// Método que faz o "Post" do texto no twitter.
        /// </summary>
        /// <param name="UserName">Usuário de acesso ao Twitter.</param>
        /// <param name="Password">Senha de acesso do Twitter.</param>
        /// <param name="Text">Texto a ser gravado no Twitter(Deve ter somente 140 caracteres).</param>
        Public static void Post(string UserName, string Password, string Text)
        {
            try
            {
                Twitter Tw = new Twitter(UserName, Password);
                TwitterStatus TwS = new TwitterStatus();
                TwS = Tw.Status.Update(Text);
            }
            catch (Exception ex)
            {
                throw new Exception("Ocorreu um erro ao salvar as informções: ", ex);
            }
        }

 

E o mais legal dessa API e que e muito rápido o post, muito rápido mesmo.
E fiz também um método que faz a regra para fazer a contagem dos caracteres para garantir que sua mensagem tenha mesmo os 140 caracteres.

///Onde faz o post literalmente

private void PostNews(int NewsId)
{

            string url = @"";

          //titulo da noticia. Aqui eu tiro tudo que tiver de tag HTML
          string tituloNoticia = FrameWork.Util.UtilString.UtilString.RemoverTags(HttpUtility.HtmlDecode(TITULOVINDODOBANCO), true, true, true, true, true, true); 

 

                //gera a url.

                string URLGerada = BiMigreMe.GenerateMigreMeURL(url);

                 //trata os erros.

                if (URLGerada != "")

                {

                    string TwPost = "";

                    TwPost = tituloNoticia + "..." + " " + URLGerada; // Aqui junto tudo para poder saber qu tamanho vai ficar o post inteiro

 

                    //verifica se o tamanho total é maior que 140.

                    if (TwPost.Length > 140)

                    {

                        //Agora separo todo mundo pra peder montar to tamanho correto cortando o somente o texto e nao o link

                        int totallink = URLGerada;

                        TwPost = tituloNoticia;

                        TwPost = TwPost.Substring(0, 137 - totallink);

                        TwPost = TwPost + "..." + URLGerada;

                    }

 

                    try

                    {

                        TwitterFrameWork.Post(UserTwitter, PasswordTwitter, TwPost);

                        lblInf.Text = "Notícia postada com sucesso!!";

                    }

                    catch (Exception ex)

                    {

                        lblInf.Text = "Ocorreu um erro: " + ex.Message.ToString();

                    }

                }

            }

        }

 

    }

PS: Segue abaixo o metod que retira os caracterer indesejado no post

 

public static string RemoverTags(string Texto,

                                         bool IsLink,

                                         bool IsHtml,

                                         bool IsCss, bool IsScript,

                                         bool IsHref, bool IsImg)

        {

            string ReturnText = string.Empty;

            StringBuilder Patterns = new StringBuilder();

 

            if (IsLink)

                Patterns.Append(@"(\<link[^\>]+\>)" + "|");

            if (IsHtml)

                Patterns.Append(@"<(.|\n)*?>" + "|");

            if (IsCss)

                Patterns.Append(@"(class=[""\w].*?[a-z].\"")" + "|");

            if (IsScript)

                Patterns.Append(@"(\<script[^\>]+\>)|(\</script[>])|(\<script[>])" + "|");

            if (IsHref)

                Patterns.Append(@"(\<a[^\>]+\>)|(\</a[>])" + "|");

            if (IsImg)

                Patterns.Append(@"(\<img[^\>]+\>)" + "|");

            try

            {

                return System.Web.HttpContext.Current.Server.HtmlDecode(Regex.Replace(Texto, Patterns.ToString().Substring(0, Patterns.Length - 1), string.Empty));

            }

            catch (Exception)

            {

                return Texto;

            }

        }

 

Bem pessoal e isso... E bem simples mais funciona.

 

Espero ter ajudado...

Bons Códigos...
Fabiano Belmonte


 

Tags: ,

.Net

C# 4.0

by Fabiano 19. junho 2009 01:31

O Visual Studio 2010 e .NET Framework 4,0 em breve estará em fase beta, e existem alguns novos recursos excelentes que todos nós podemos esperar  animados com este novo lançamento. Juntamente com o Visual Studio 2010 e do. NET Framework 4,0 veremos a versão 4.0 da linguagem de programação C #. Neste artigo eu gostaria de olhar um pouco a trás de onde começou a linguagem de programação C # e olhar para onde Anders Hejlsberg  do C #  e sua equipa querem chegar.

Em 1998, o projeto C # começou com o objetivo de criar uma simples, moderna e orientada a objeto, linguagem de programação que se tornou conhecido como o. NET. A Microsoft lançou o. NET e a linguagem de programação C #, em meados 2000 e desde então, C # tornou-se uma das mais populares linguagens de programação em uso hoje. Foi lançado então o C# 1.0

A versão 2.0 da linguagem evoluiu de mais, particularmente acho que e umas das maiores evoluções em tão pouco tempo de uma linguagem e passou a dar suporte aos genéricos, métodos anônimos, iterators, tipos parciais e tipos anuláveis.

Ao conceber a versão 3.0 da linguagem a ênfase foi para permitir a LINQ (Language Integrated Query), que exigia a adição das seguintes funcionalidades:
• Implictly Typed Local Variables.
• Extension Methods.
• Lambda Expressions.
• Object and Collection Initializers.
• Annonymous types.
• Implicitly Typed Arrays.
• Query Expressions and Expression Trees.
No passado linguagens de programação foram projetadas com um determinado paradigma em mente, e como tal, temos linguagens que foram, como exemplo, destinadas a serem orientadas a objeto ou funcionais. Hoje, porém, as linguagens que a ser concebidas com vários paradigmas em mente. Na versão 3.0 da linguagem de programação C # adquiriu várias capacidades funcionais normalmente associados a programação para permitir Language Integrated Query (LINQ).

Na versão 4.0 do C # continua a evoluir, embora desta vez, a equipe  do C # foram inspiradas por linguagens dinâmica como Perl, Python e Ruby. A realidade é que existem vantagens e desvantagens para ambas as linguagens seja ela escrita estaticamente e dinamicamente.

Outro paradigma alem do design e inovação é concorrente  que é um paradigma que tem certamente influenciaram o desenvolvimento do Visual Studio 2010 e do. NET Framework 4.0.

Agora o que o C# traz de novo:
• Dynamically Typed Objects.
• Optional and Named Parameters.
• Improved COM Interoperability.
• Safe Co- and Contra-variance.
Chega de papo e vamos olhar para algum exemplos em C # 4.0 utilizando essas inovações língua ...

Em C # Hoje você pode ter, o seguinte código que é uma instância de uma clase escrita estaticamente . NET então chama o método Add em que a classe para obter a soma de dois inteiros:
Calculator calc = GetCalculator();
int sum = calc.Add(10, 20);
Nosso código fica ainda mais interessante se a classe Calculadora não é escrita estaticamente, mas está escrito em COM, Ruby, Python, ou mesmo JavaScript. Mesmo se soubéssemos que a classe é uma calculadora. objeto NET, mas não sabemos qual o tipo específico que é, então, teria de utilizar reflection para descobrir atributos e o tipo em tempo de execução e, em seguida, dinamicamente invocar o método Add.

object calc = GetCalculator();
Type type = calc.GetType();
object result = type.InvokeMember("Add",
                                  BindingFlags.InvokeMethod, null,
                                  new object[] { 10, 20 });
int sum = Convert.ToInt32(result);
Se a calculadora classe foi escrito em JavaScript, então nosso código ficaria algo como a seguinte.

ScriptObect calc = GetCalculator();
object result = calc.InvokeMember("Add", 10, 20);
int sum = Convert.ToInt32(result);

Com C # 4,0 teríamos simplesmente escrever o seguinte código:

dynamic calc = GetCalculator();
int result = calc.Add(10, 20);

No exemplo acima declaramos uma variável calc, cujo tipo estático é dinâmico. Sim, você leu corretamente que nós escrevemos estaticamente nosso objeto a ser dinâmico. Teremos então dinâmico usando método invocação para chamar o método Add e em seguida, dinâmico conversão para converter o resultado da dinâmica de uma invocação digitado estaticamente inteiro.
Você está ainda encorajado a usar tipagem estática sempre que possível, porque os benefícios que oferecem línguas escrita estaticamente nós. Usando C # 4,0 no entanto, deve ser menos doloroso nessas ocasiões em que você tem de interagir com objetos dinamicamente digitado.

Outro grande benefício do uso de C # 4.0 é que a linguagem suporta agora facultativa e parâmetros nomeados e por isso vamos agora dar uma olhada em como esta característica irá mudar a maneira de conceber e escrever o seu código.

Um desenho padrão você ver como muitas vezes que um determinado método está sobrecarregado, porque o método deve ser chamado com um número variável de parâmetros.

Vamos assumir que temos o seguinte método OpenTextFile juntamente com três sobrecargas do método com diferentes assinaturas. Sobrecargas do método primário em seguida chame o método primário de passar os valores padrão no lugar desses parâmetros para os quais um valor não foi especificado na chamada para o método sobrecarregado.

public StreamReader OpenTextFile(
         string path,
         Encoding encoding,
         bool detectEncoding,
         int bufferSize) { }

public StreamReader OpenTextFile(
         string path,
         Encoding encoding,
         bool detectEncoding) { }

public StreamReader OpenTextFile(
         string path,
         Encoding encoding) { }

public StreamReader OpenTextFile(string path) { }

No C # 4.0 O método primário pode ser refactored para usar parâmetros opcionais como mostra o seguinte exemplo:

public StreamReader OpenTextFile(
         string path,
         Encoding encoding = null,
         bool detectEncoding = false,
         int bufferSize = 1024) { }
Perante esta declaração, é agora possível chamar o método OpenTextFile omitindo um ou mais dos parâmetros opcionais.
OpenTextFile("foo.txt", Encoding.UTF8);
Também é possível usar o C # 4,0 suporte para parâmetros nomeados e, como tal, o método pode ser chamado OpenTextFile omitindo um ou mais dos parâmetros opcionais, enquanto especificando também outro parâmetro pelo nome.
OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4098);
O nome dos argumentos deve ser fornecido somente estância última embora desde quando eles podem ser fornecidas em qualquer ordem.

Se você alguma vez escrito qualquer código que executa um certo grau de interoperabilidade COM você provavelmente visto como o código seguinte.

object filename = "test.docx";
object missing = System.Reflection.Missing.Value;
doc.SaveAs(ref filename,
           ref missing, ref missing, ref missing,
           ref missing, ref missing, ref missing,
           ref missing, ref missing, ref missing,
           ref missing, ref missing, ref missing,
           ref missing, ref missing, ref missing);

Com os parâmetros opcionais e nomeado linguagem C # 4,0 prevê melhorias significativas na interoperabilidade COM e, portanto, o código acima pode agora ser refactored tal que o convite é apenas:

doc.SaveAs("foo.txt");

Ao realizar a interoperabilidade COM você perceber que você é capaz de omitir a ref modifer embora o uso do modificador ref ainda é necessário quando não exerçam COM interoperabilidade.

Com as versões anteriores das tecnologias era necessário também um navio Primary Interop Assembly (PIA), juntamente com o seu aplicativo gerenciado. Isso não é necessário quando se utiliza C # 4.0, porque o compilador irá injetar vez o interop tipos diretamente para as Assembly de seu aplicativo gerenciado e só vai injetar os tipos que você está usando e não de todos os tipos encontrados no interior da PIA.

O último aperfeiçoamento lingüístico que vamos explorar é co-variância e contra-variância e vamos começar por explorar com a co-variância. NET matrizes.

string[] names = new string[] {
                     "Anders Hejlsberg",
                     "Mads Torgersen",
                     "Scott Wiltamuth",
                     "Peter Golde" };

Write(names);
Desde versão 1.0 em um array o. NET Framework foi co-variante significando que uma matriz de strings, por exemplo, pode ser passada para um método que espera um array de objetos. Como tal, a matriz acima pode ser transmitida para o seguinte Escreve método que espera um array de objetos.
private void Write(object[] objects)
{
}

Infelizmente, em matrizes. NET não são co-seguro variante como podemos ver na seguinte código. Partindo do pressuposto de que os objetos variável é uma matriz de strings da seguinte terá êxito.

objects[0] = "Hello World";

Embora se uma tentativa é feita para atribuir um inteiro à matriz de strings uma ArrayTypeMismatchException é jogado.
objects[0] = 1024;
Em ambos os C # 2.0 e C # 3,0 invariantes são genéricos e, portanto, um erro compilador iria resultar o seguinte código:

List<string> names = new List<string>();

Write(names);

Quando o Escreve método é definido como:

public void Write(IEnumerable<object> objects) { }

Generics com C # 4,0 apoiar agora segura co-variância e contra-variância através do uso das palavras-chave dentro e fora contextuais. Vamos dar uma olhada em como isso muda a definição do <T> IEnumerable e IEnumerator <T> interfaces.
public interface IEnumerable<out T>
{
    IEnumerator<T> GetEnumerator();
}

public interface IEnumerator<out T>
{
    T Current { get; }
    bool MoveNext();
}
Você perceberá que o tipo de parâmetro T da interface IEnumerable foi prefixado com o fora contextuais palavra-chave. Dado que a interface IEnumerable é somente leitura, não há capacidade especificada na interface para inserir novos elementos com a lista, ela é segura para o tratamento de algo mais derivados como algo menos derivados. Com a palavra-chave fora contextuais estamos afirmando que contratualmente IEnumerable <out T> segurança é co-variante. Dado que IEnumerable <out T> segurança é co-variante podemos agora escrever o seguinte código:

IEnumerable<string> names = GetTeamNames();
IEnumerable<object> objects = names;

Porque a interface IEnumerable <out T> utiliza a palavra-chave no contexto do compilador podem motivo que a atribuição acima é seguro.

Utilizando a palavra-chave no contexto podemos alcançar seguro contra-variância, ou seja, tratar algo menos derivados como algo mais derivados.

public interface IComparer<in T>
{
    int Compare(T x, T y);
}
Dado que IComparer <in T> é segura contra-variante podemos agora escrever o seguinte código:
IComparer<object> objectComparer = GetComparer();
IComparer<string> stringComparer = objectComparer;

Embora o actual build CTP do Visual Studio 2010 e do. NET Framework 4,0 tem suporte limitado para a variância melhorias em C # 4,0 a próxima versão beta permite que você use o novo para dentro e para fora contextuais tais como palavras-chave em tipos IComparer <in T>. O. NET Framework equipa está a atualizar os tipos, no âmbito de ser co-seguro e contra-variante.

Eu mostrei aqui alguns recursos que você pode achar útil para explorar as capacidades da linguagem de programação C # 4,0 e gostaria de encorajá-lo a também fazer download e instalar a versão beta.

Bons Códigos...

Tags: , ,

.Net

Utilizando ListView e DataPager novos componentes da FrameWork 3.5

by Fabiano 19. setembro 2008 01:25

O ASP.NET 3.5 introduziu dois novos controles de manipulação de dados o ListView e o DataPager
ListView  Server controlsque nos permitem exibir dados de uma fonte de dados e com o DataPager podemos paginar os dados exibidos no ListView de maneira muito simples. O listView dá ao usuário total controle sobre o processamento da página. using templates and styles(CSS) the user can generate clean HTML UI according to his needs. usando modelos e estilos (CSS), o usuário pode gerar HTML interface limpa, de acordo com suas necessidades..

ListView: E um controle de dados parecido com o DataList e o DataRepeater com as funcionalidade de edit, insert, e delete , sort, como o GridView. Uma coisa que ele tem que o GridView  não possui e a possibilidade de controlar todo seu HTML de output, utilizar css gerando um output mais limpo e de qualidade.

DataPager: E um controle Web utilizado para paginar um controle de data e exibir os controles de navegação de paginas, ele so pode ser utilizado com controles que implementam a interface IPageableItemContainer. O ListView implementa esta interface e portanto pode utilizar o DataPager para fazer o trabalho de paginação de dados, e o que vamos fazer agora em nossa artigo.

Implementando um DataSource no ListView:

Podemos utilizar qualquer controle ASP.NET de DataSource para Bindar os dados no ListView, Colocando o DataSourceID propriedade do ListView para o nome do DataSource que será utilizado.

Podemos utilizar qualquer controle ASP.NET de DataSource para Bindar os dados no controle ListView, fixando o DataSourceID propriedade do controle ListView para o nome do controle de DataSource.

Neste Exemplo Utilizaremos o LinqDataSource para recuperar os dados que serão exibidos no ListView


<
asp:ListView ID="lvwExemplo" DataSourceID="LinqDataSource1" runat="server" OnSorting="ListView1Sorting" DataKeyNames="id" OnItemCommand="ItemUpdate">

 

 ListView fornece uma espécie de apoio para a funcionalidade de SORT. It has a sort event, which can be specified by setting the commandName property of the control, which is part of the ListView control to the 'Sort'. Tem um evento, que pode ser especificado através da definição da propriedade do controle commandName, que faz parte do controle ListView ao efetuar o "Sort". The Sort event supports command argument which can be used to identify which control raised the sort event. O evento Sort suporta  o command argument que pode ser usado para identificar qual controlo disparou o evento.  O evento SORT e registrado no controle  atravez da diretiva The handler for sort event is registered by setting the OnSorting property of the ListView to the handler name. OnSorting propriedade do ListView para o manipulador nome.

Exemplo de como utilizar o evento SORT no ListView:

<asp:ListView ID="lvwExemplo" DataSourceID="LinqDataSource1" runat="server" OnSorting="ListView1Sorting" DataKeyNames="id" OnItemCommand="ItemUpdate">

 

<asp:LinkButton runat="server" ID="lnkOrdenarNome" Texto="Corpo" CommandName="Ordenar" CommandArgument="Nome" />

 

Manipulando o evento SORT

 

protected void ListView1Sorting(Object sender, ListViewSortEventArgs e)

    {

        String strImage;

        if (e.SortDirection == SortDirection.Ascending)

            strImage = "asc.gif";

        else

            strImage = "desc.gif";

        Image sortSender = (Image)lvwExemplo.FindControl("Image1");

        Image sortSubject = (Image)lvwExemplo.FindControl("Image2");

        Image sortRecdate = (Image)lvwExemplo.FindControl("Image3");

        Image sortBody = (Image)lvwExemplo.FindControl("Image4");

 

        if (e.SortExpression == "From")

        {

            sortSender.ImageUrl = strImage;

            sortSender.Visible = true;

            sortSubject.Visible = false;

            sortRecdate.Visible = false;

            sortBody.Visible = false;

        }

        else if (e.SortExpression == "Subject")

        {

            sortSubject.ImageUrl = strImage;

            sortSender.Visible = false;

            sortSubject.Visible = true;

            sortRecdate.Visible = false;

            sortBody.Visible = false;

        }

        else if (e.SortExpression == "recdate")

        {

            sortBody.ImageUrl = strImage;

            sortSender.Visible = false;

            sortSubject.Visible = false;

            sortRecdate.Visible = true;

            sortBody.Visible = false;

        }

        else if (e.SortExpression == "Body")

        {

            sortBody.ImageUrl = strImage;

            sortSender.Visible = false;

            sortSubject.Visible = false;

            sortRecdate.Visible = false;

            sortBody.Visible = true;

        }

        else

        {

 

            sortSender.Visible = false;

            sortSubject.Visible = false;

            sortRecdate.Visible = false;

            sortBody.Visible = false;

        }

    }

 

Entendendo os templates do ListView:

- LayoutTemplate
- ItemTemplate
- ItemSeparatorTemplate
- GroupTemplate
- GroupSeparatorTemplate
- EmptyItemTemplate
- EmptyDataTemplate
- SelectedItemTemplate
- AlternatingItemTemplate
- EditItemTemplate
- InsertItemTemplate

O principal esquema do controle ListView é criada pela definição de um LayoutTemplate. The LayoutTemplate will include controls that acts as a placeholder for the data like Table, Panel, Label or HTML controls like table, div, or span elements that have a runat attribute set to "server". O LayoutTemplate irá incluir controles que funciona como um marcador para os dados,
pois dentro dele serão inseridos os outros controles ele será a moldura dos elementos que o ListView irá exibir.

Item template is the main template which will show the data bounded to the ListView in a repeated manner. Item template é o principal modelo que irá exibir os dados como um repetidor. This template typically contains controls that are data-bound to data columns or other individual data elements. Este template geralmente contém itens data-bound, que são vinculados aos dados de cada coluna ou outros elementos de dados individuais.These two templates are mandatory. Estes dois templates são obrigatórios.

GroupTemplate will be used to group the items.GroupTemplate serão usados para agrupar os itens. The EditItemtemplate, SelectedItemTemplate, InsertItemTemplate are shown at that particular operation like insert, edit, select. ItemSeparatorTemplate, GroupSeparatorTemplate are used to separate the individual items and group Items Separately. O EditItemtemplate, SelectedItemTemplate, InsertItemTemplate são exibidos em operação como inserir, editar, selecionar. ItemSeparatorTemplate, GroupSeparatorTemplate são utilizados para separar os itens individuais e separador de grupo de itens.

We will use each template to embed the necessary HTML controls like table, tr, td, div, span or server controls to display the UI according to our needs.Vamos utilizar cada modelo para incorporar os necessários controlos HTML como tabela, tr, td, div, span ou Server control pra que a  exibição da UI saia de acordo com nossas necessidades.

The following example shows the basic structure of a ListView with mandatory templates... O exemplo a seguir mostra a estrutura básica de um ListView com os templates obrigatórios modelos ...

<asp:ListView runat="server" ID="lvwExemplo1" DataSourceID="SqlDataSource1">

    <LayoutTemplate>

                <table runat="server" id="table1" runat="server">

                    <tr runat="server" id="itemPlaceholder">

                    </tr>

                </table>

            </LayoutTemplate>

            <ItemTemplate>

                <tr runat="server">

                    <td id="Td1" runat="server">

                        <%-- Data-bound content. --%>

<asp:Label ID="NameLabel" runat="server" Text='<%#Eval("Name") %>' />

                    </td>

                </tr>

            </ItemTemplate>

        </asp:ListView>

Um itemplaceholder deve ser especificado dentro do LayoutTemplate, pois será nele que o  ListView irá inserir o itemTemplate quando compilado. Parece confuso mais não é! Vamos La, primeiro definimos o LayoutTemplate que será a moldura de nosso quando como no exemplo acima colocamos uma Tabela como LayoutTemplate, e dentro dele definimos um itemPlaceholder que será utilizado para repetir o itemPlaceholder com os dados do DataSorce.

Lets Rock!!!

Agora Vamos colocar a mão na massa! Vamos criar um ListView que irá exibir uma lista de clientes.

Preparando o LayoutTemplate


Precisamos criar o LayoutTemplate usando os controles necessários HTML como tabela, tr, td (com estilos) para a formatação e ASP.Net Server Controls (Botões, LinkButtons, DataPager) para exibir os cabeçalhos, assim como rodapés.
We need to use a itemplaceholder for displaying the items from data source. Temos de usar uma itemplaceholder para exibir os itens da fonte de dados.


Preparando DataPager

The DataPager control is used to page data and to display navigation controls for data-bound controls that implement the IPageableItemContainer interface. O controle DataPager é usado para exibir a página de dados e controles de navegação de dados vinculada controlos que implementam a interface IPageableItemContainer.

A DataPager control can be associated to the data-bound control by using the PagedControlID property. Um controle DataPager pode estar associada ao controle de dados vinculados usando a propriedade PagedControlID. Alternatively, the DataPager control can be placed inside the data-bound control hierarchy. Alternativamente, o controle DataPager pode ser colocado no interior do controlo de dados vinculado.

DataPager control will display navigation controls by adding the pager fields to the control. Controle DataPager exibirá a navegação do controle adicionando ao campos para o controlo. DataPager supports following types of pager fields. DataPager utiliza os seguintes tipos de campos.

NextPreviousPagerField: Enables to navigate through pages one page at a time, or to jump to the first or last page. NextPreviousPagerField: Permite navegar através das páginas uma página de cada vez, ou para saltar para a primeira ou a última página. It shows first, prev, next, last buttons. Ele mostra os botões primeiro, anterior, próximo e último. The button type may be of Button, Image, LinkButton. O botão pode ser do tipo Button, Imagem, LinkButton.

NumericPagerField: enables to navigate through pages by displaying page numbers on the datapager. NumericPagerField: permite navegar por páginas apresentando números de página sobre o datapager.

TemplatePagerField: we can create custom UI by using TemplatePagerField. TemplatePagerField: podemos criar UI personalizado utilizando TemplatePagerField. We can use Labels, buttons, images to create custom UI as well as programmatic control of the DataPager. Podemos usar Label, botões, para criar imagens personalizadas IU programáticos, bem como o controlo da DataPager.

 

Para criar o DataPager de acordo com a imagem acima, temos de usar NumericPagerField bem como TemplatePagerField como parte do DataPager Fields. We can use DataPager control's properties like PageSize, TotalRowCount, StartRowIndex to create the TemplatePagerField. Podemos usar propriedades como PageSize do controle DataPager, TotalRowCount, StartRowIndex para criar o TemplatePagerField.

PageSize: qual página esta sendo exibido no DataPager.
TotalRowCount is the no of rows presented in the datasource attached to the DataPager. TotalRowCount:
é o numero de linhas apresentados no DataPager.
StartRowIndex is the current first row's index in the data source . StartRowIndex: é a primeira linha, o primeiro registro que será exibido.

<asp:DataPager runat="server" ID="ItemDataPager" PageSize="12" PagedControlID="ListView1">

            <Fields>

                <asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="true" ShowPreviousPageButton="true"

                    ShowLastPageButton="true" ShowNextPageButton="true" />

                <asp:TemplatePagerField>

                    <PagerTemplate>

                        <b>showing

                            <asp:Label runat="server" ID="CurrentPageLabel" Text="<%# Container.StartRowIndex %>" />

                            to

                            <asp:Label runat="server" ID="TotalPagesLabel" Text="<%# Container.StartRowIndex+Container.PageSize %>" />

                            ( of

                            <asp:Label runat="server" ID="TotalItemsLabel" Text="<%# Container.TotalRowCount%>" />

                            records)

                            <br />

                        </b>

                    </PagerTemplate>

                </asp:TemplatePagerField>

            </Fields>

        </asp:DataPager>

Preparando ItemTemplate & Alternative ItemTemplate

We need to embed the necessary HTML tags as well as Server controls like checkboxes, labels, buttons in order to get the following look for the ItemTemplates as well as AlternativeItemTemplates.
Precisamos inserir as tags HTML, bem como Server controls como checkboxes, labels, buttons, a fim de obter o layout dos itens dentro do ItemTemplates assim como no AlternativeItemTemplates.
The data will be bounded to the properties of the control's by using inline ASP.Net code <% # Eval( "datafieldname" )%>, where datafiledname is the column name in the datasoure.
Os dados serão inseridos nos controles usando o código inline do ASP.Net
<% # Eval ( "datafieldname")%>, onde o datafiledname é o nome da coluna no datasoure.

<ItemTemplate>

                <tr title="Tooltip text goes here!" onmouseover="this.style.backgroundColor='#FFCCFF'"

                    onmouseout="this.style.backgroundColor='#FFFFFF'">

                    <td>

                        <asp:CheckBox ID="ID" runat="server" />

                    </td>

                    <td>

                        <asp:Label ID="lbFrom" runat="server"> <%#Eval("FirstName")%> </asp:Label>

                    </td>

                    <td>

                        <asp:Label ID="lbSubject" runat="server"><%#Eval("LastName")%></asp:Label>

                    </td>

                    <td>

                        <asp:Label ID="lbrecdate" runat="server"><%#Eval("BirthDate")%></asp:Label>

                    </td>

                    <td>

                        <asp:Label ID="lbBody" runat="server"><%#Eval("Country")%></asp:Label>

                    </td>

                    <td>

                        <asp:Button ID="EditButton" runat="Server" Text="Read" CommandName="Edit" />

                    </td>

                </tr>

            </ItemTemplate>

Preparando EditItemTemplate & InsertItemTemplate

Similarly we can create EditItemTemplate as well as InsertItemTemplate, but instead of labels we will use TextBoxes like below. Da mesma forma que vamos criar o EditItemTemplate bem como InsertItemTemplate, mas em vez de Label, vamos utilizar como TextBox

<EditItemTemplate>

                <tr>

                    <td>

                        <asp:TextBox ID="tbFrom" runat="server" Enabled="false" Text='<%#Bind("FirstName")%>' />

                    </td>

                    <td>

                        <asp:TextBox ID="tbSubject" runat="server" Enabled="false" Text='<%#Bind("LastName")%>' />

                    </td>

                    <td>

                        <asp:TextBox ID="tbrecdate" runat="server" Enabled="false" Text='<%#Bind("BirthDate")%>' />

                    </td>

                    <td>

                        <asp:TextBox ID="tbBody" runat="server" Enabled="false" Text='<%#Bind("Country")%>' />

                    </td>

                    <td>

                        <asp:Button ID="DeleteButton" runat="Server" Text="Delete" CommandName="Delete" />

                    </td>

                </tr>

            </EditItemTemplate>

Insert:

<InsertItemTemplate>

                <tr>

                    <td>

                        <asp:TextBox ID="tbFrom" runat="server" Enabled="true" Text='<%#Bind("FirstName")%>' />

                    </td>

                    <td>

                        <asp:TextBox ID="tbSubject" runat="server" Enabled="true" Text='<%#Bind("LastName")%>' />

                    </td>

                    <td>

                        <asp:TextBox ID="tbrecdate" runat="server" Enabled="false" Text='<%#Bind("BirthDate")%>' />

                    </td>

                    <td>

                        <asp:TextBox ID="tbBody" runat="server" Enabled="true" Text='<%#Bind("Country")%>' />

                    </td>

                    <td>

                        <asp:Button ID="InsertButton" runat="Server" Text="Send" CommandName="Insert" />

                    </td>

                </tr>

            </InsertItemTemplate>

 

Bem pessoal neste artigo pudemos ver como o ListView pode ser bem útil em nossos projetos, ainda mais hoje em dia em que a qualidade dos código HTML gerado levado mais a serio, e com esse controle podemos controlar toda a saída da nossa aplicação. E o mais legal e poder utilizar o controle DataPager para fazer a paginação dos dados de maneira simples e funcional.

Bons Códigos...

Tags: , ,

.Net

Trabalhando com Dynamic Data Controls

by Fabiano 19. setembro 2008 01:11

 

O ASP.NETultimamente vem  revolucionou o desenvolvimento de aplicações para web oferecendo uma plataforma robusta e altamente produtiva elevando o potencial dos desenvolvedores com excelente recursos como: GridView, DataControls, Validators , WebParts entre outros.

Ao longo dos anos, outras necessidades foram surgindo no mercado como a criação de telas automáticas de cadastro conhecidas atualmente como Scaffold bastante populares com o Ruby on Rails. 

Já faz algum tempo que a Microsoft vem investindo em linguagens dinâmicas e agora, com o lançamento do Service Pack 1 do .NET 3.5, foi disponibilizando dentro do ASP.NET um novo conjunto de controles conhecido como Dynamic Data Controls que tem objetivo de montar as telas para as ações básicas de qualquer CRUD (Create, Read, Update, Delete). 

 

Logo após instalar o Service Pack 1 do Visual Studio 2008, vai aparecer, conforme apresentado na figura abaixo, mais um novo tipo de projeto web para o .NET 3.5 chamado de "Dynamic Data"



Após criar seu novo projeto, verifique nas referências e vai observar que ele traz as os novos namespaces System.Web.DynamicData e System.Web.DynamicData.Design.
A funcionalidade Dynamic Data Controls trabalha em conjunto com o LINQ TO SQL e Entities FrameWork, pois ele precisa de uma interface de acesso a dados que será utilizada para gerar as funcionalidade em tempo de execução.
Bem agora para continuarmos com o exemplo precisamos de uma base de dados e um diagrama LINQ que será utilizado pela aplicação. Vou utilizar um banco de dados .mdb so SQLExpress que já tenho pronto.


Agora vou criar o Diagrama LINQ e adicionar as tabelas que desejo trabalhar em meu projeto, para isso basta clicar com o lado direto do mouse no projeto, selecionar a opção add new item, e selecionar o DataClasses.dbml do LINQ. Como na imagem abaixo.

 

Feito isso, agora vamos arrastar as tabelas que iremos utilizar no projeto para o diagrama do LINQ. Como na imagem abaixo.

 

Agora vem a parte mais simples do projeto que será a implementação propriamente dita, ou seja onde colocamos a mão na massa, mais fique tranqüilo que com esta ferramenta trabalharemos muito pouco pois a idéia e que tudo seja gerado em tempo de execução. Para isso temos que configurar o Dynamic Data para utilizar o LINQ to SQL e gerar automaticamente as telas de manipulação das tabelas do diagrama.

O primeiro lugar que vamos alterar e no arquivo global.asax nele devemos localizar o método RegisterRoutes() e dentro do mesmo modifique a linha Model.RegisterContext adicionando o nome do diagrama gerado pelo LINQ que para o nosso exemplo que foi DataClassesDataContext  alterando o valor de ScaffoldAllTables para true


 

OBS: Esta linha geralmente vem comentada dentro do arquivo global.asax  devemos descomenta-la e fazer as alterações necessárias 

Pronto acabamos nosso projeto! Você pode estar se perguntando, nossa mais não fiz “quase nada”... 
Para ver o resultado basta rodar sua aplicação, e você verá as paginas de lista, inserção, deleção e edição prontas para utilização. Como nas imagens abaixo.

Aqui temos o menu principal com acesso a todas as paginas do sistema:


 

Ao Clicar no link de Produtos olha que legal, teremos um grid com os produtos cadastrados, onde as colunas do Grid são as mesmas colunas da Tabela, e o mais interessante e o filtro que foi gerado automaticamente de acordo com as Chaves da tabela de Produtos, tem também a paginação do Grid e tudo isso sem escrever nenhuma linha de código, temos também links para edição e deleção do produto e isso acontece para todas as tabelas relacionadas no diagrama.

Note fizemos esse projeto em 45 min.



 



Você pode estar se perguntando e o layout como fica, não gostei desse, esta fora do padrão da minha empresa ou do meu site, não tem problema ele e feito todo em cima de CSS, você poderá customizar tudo, pode também gerar paginas personalizadas editar somente o GRID de Produtos, a ferramenta e bem Flexível. Agora você precisa tomar cuidado para que sua customização não te leve a fazer tudo do zero ai vale mais apena fazer de outra maneira. Esta ferramenta trará maior benefício se tiver pouca customização.

Bons Códigos...

Tags:

.Net

jQuery e Microsoft

by Fabiano 19. agosto 2008 00:40

Para quem não sabe jQuery é uma biblioteca JavaScript open source leve (apenas 15kb de tamanho) que, em um tempo relativamente curto espaço de tempo se tornou uma das mais populares bibliotecas na web. Você pode estar se perguntando o que a JQuery tem a ver com a Microsoft, pois bem eu explico, desde de setembro de 2008 a Microsoft anunciou a parceria com a JQuery como biblioteca de JavaScript que será distribuída juntamente com o Visual Studio, o intuito da Microsoft não e de adquirir e modificar a biblioteca mais sim distribuí-la do jeito que ela e, deixando assim de ter um time para cuidar desse assunto e assumindo uma biblioteca open source o que e muito legal. Com essa integração passamos a ter o intellisense que desde a versão 2008 do Visual Studio já dava suporte a JavaScript agora da suporte ao JQuery facilitando ainda mais o desenvolvedor em duas atividades. Obs: A biblioteca de intellisense do JQuery ainda não e nativa do Visual Studio para ter acesse a ela e preciso fazer download de um HotFix para integração com o Visual Studio que se encontra no endereço abaixo:

http://code.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736

Apos instalar o HotFix, basta adicionar o script de documentação do JQuery no seu projeto para ter todo suporte via intellisense no Visual Studio. Para baixar o script de documentação do Intellisense basta acessar este endereço:

http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3-vsdoc.js

Agora vamos conhecer um pouco mais sobre o JQuery e como ele pode nos ajudar em nosso dia a dia de Desenvolvedor.

jQuery

Acredito que o maior apelo da jQuery é que ela permite que você possa elegantemente e de eficiente encontrar e manipular elementos HTML com o mínimo de linhas de código possíveis e isso pode acreditar ajuda muito na implementação do seu projeto.
 A jQuery da esse suporte através de uma “API”que permite que os desenvolvedores consigam fazer consultas a elementos HTML e executar comandos nos elementos encontrados. Uma das características do JQuery e que os comandos podem ser agrupados onde o resultado de um comando acaba contribuindo em outros, a biblioteca jQuery também inclui um conjunto de “APIs” de animação pode ser usada como comandos.

A combinação permite fazer algumas coisas muito legais, com apenas algumas linhas de código. Agora vamos fazer alguns exemplos de como utilizar a JQuery. Antes de começar a desenvolver com a biblioteca e preciso fazer o download da mesma que se encontra no LINQ abaixo.

http://docs.jquery.com/Downloading_jQuery

Alguns Exemplos

Para podermos utilizar o JQuery e preciso adicionar o script da biblioteca no projeto em que vamos trabalhar como na imagem abaixo:

Clique com o lado direito do mouse no WebSite e selecione a opção nova pasta coloque o nome de scripts.
Clique com o lado direito do mouse em cima da pasta script e seleciona a opção de adicionar item existente e seleciona o jquery-1.3.js Repita o procedimento para adicionar ao projeto o script de documentação do Intellisense selecionando o jquery-1.3-vsdoc.js Depois de feito tudo isso temos que arrastar o script jquery-1.3.js para a pagina para adicionarmos a referencia para o mesmo.
Como na imagem abaixo:

 

Pronto agora podemos começar de vez, o processo parece meio complicado mais não e são os procedimentos básicos para se utilizar qualquer script, e você vera o beneficio que trará. Chega de lero lero vamos ao que interessa.

Vamos fazer um exemplo básico de exibir uma mensagem de “alert” na tela utilizando um asp:button.

Adicione um botão asp:Button na pagina.

<asp:Button ID="Button1" runat="server" Text="Button" />

Nota: para adcionarmos eventos no load da pagina basta incluirmos o script abaixo e ai todo código escrito dentro dele será executado no evento load da pagina.

<script type="text/javascript">

        $(document).ready(function() {

        // add code here

        });

    </script> 

Agora vamos adicionar os comandos para disparar o “alert ” no click do botão.

<script type="text/javascript">

        $(document).ready(function() {

        $("#Button1").click(function() {

            alert("Hello world!");

        });

      });
</script>

Quando clicamos no botão:

Agora vamos fazer uma animação no Clique de um botão utilizando JQuery.
No primeiro exemplo fizemos algo bem simples um tradicional “Hello world” agora vamos seguir a mesma linha e fazer uma animação utilizando um <asp:Panel>. Agora na pagina vamos adicionar um imput button e o panel como no codigo abaixo:

<form id="form1" runat="server">           

        <input id="btnAnimate" type="button" value="Animate" />
        <asp:Panel ID="Panel1" runat="server">
        Some sample text in this panel       
        </asp:Panel>
</form>

Também vamos acrescentar um  CSS para embelezar o div (lembrando  asp: Painel torna como uma <div> quando a pagina e carregada). O <style> tag tem sido mantida no elemento  <head> da página.

 

<style type="text/css">

        div {
        background-color:#D5EDEF;
        color:#4f6b72;
        width:50px;
        border: 1px solid #C1DAD7;

       }
 </style>

Por fim vamos adicionar o código jQuery para animar o painel quando clicarmos no botão.Vamos utilizar a função 'animar'. Observe como o IntelliSense nos ajuda a com os parâmetros.



Depois de adicionar nos parâmetros para a função animar (), o código completo será o seguinte:

<script type="text/javascript">

     $(document).ready(function() {

         $("#btnAnimate").click(function() {

             $("#Panel1").animate(

            {

              width: "350px",
              opacity: 0.5,
              fontSize: "16px"
            }, 1800);

         });

     });

 </script>

Aqui, a animação ocorre enquanto alteramos a largura, a opacidade ea font do painel quando o botão é clicado. O valor'1800 'representa o número de milissegundos para executar a animação.

Veja como ficou após a execução:

Antes da animação:





Após a animação:


Agora vamos fazer um exemplo de como selecionar e deselecionar todos os itens de uma CheckBox list, notem como e bem simples o código. 

Primeiro adicionamos o? Script “js” do JQuery:
<script src="scripts/jquery-1.3.js" type="text/javascript"></script>

Depois arrastamos da ToolBox o objeto CheckBoxList e um unico CheckBox:

<asp:CheckBox ID="chkAll" runat="server" Text="Check All" /><br />
<asp:CheckBoxList ID="cbList" runat="server"></asp:CheckBoxList>

No load da pagina ASPX iremos carregar o CheckBoxList utilizando o código abaixo:

if (!Page.IsPostBack)

    {

        cbList.Items.Add(new ListItem("Items 1", "Items 1"));

        cbList.Items.Add(new ListItem("Items 2", "Items 2"));

        cbList.Items.Add(new ListItem("Items 3", "Items 3"));

        cbList.Items.Add(new ListItem("Items 4", "Items 4"));

        cbList.Items.Add(new ListItem("Items 5", "Items 5"));

    }

Agora vamos fazer o código JQuery pra selecionar e deselecionar os CheckBoxs, se fossemos fazer isso utilizando um Javascript normal teríamos que loopar todos os controles Checando um por um, daria um trabalhinho considerável, vamos ver como fazemos isso com o JQuery.

script type="text/javascript">

        $(document).ready(function() {

            $('#chkAll').click(

             function() {

                 $("INPUT[type='checkbox']").attr('checked', $('#chkAll').is(':checked'));

             });

         });    

     </script>

Veja como vai funcionar:

Antes do Clique:


E isso pessoal, espero ter contribuído pelo menos um pouco com seu crescimento profissional, a temos eu queria escrever sobre este assunto que e uma novidade que vai ajudar muito em nosso dia a dia, esta biblioteca esta so começando a ser implementada e já faz coisas fantásticas o que fiz aqui e so um pequeno exemplo do que se pode fazer com a ferramenta, vale apena estudar mais afundo.

Bons Códigos...

Tags: ,

.Net

Lambda Expressions

by Fabiano 10. agosto 2008 01:05

 

Expressão lambda foi adicionada ao Visual Basic 2008 e C# 3.0, com o objetivo de apoiar ”Language Integrated Queries “(LINQ) .Quanto mais  você utilizar a Expressão lambda, mais você verá sua potência e flexibilidade.

A lambda é uma grande inovação da linguagem, mas para você que está iniciando agora como desenvolvedor ou tem pouco tempo com a linguagem pode parecer bem complicado. Não desanime, pois quando você começar a conhecer mais sobre lambda irá entender o quanto ela pode ser útil para o seu dia a dia.

Métodos Anônimos

Não poderia falar sobre expressão lambda sem falar de método anônimos que é  uma  das evoluções existentes no framework 2.0 lançado no final de 2005. Eles  podem ser usados para passar um bloco de código para um delegate, de acordo com o parâmetro do delegate,  também  podem  ser utilizados em lugares onde a criação de um método não é realmente necessária.Vejamos abaixo dois exemplos, um utilizando delegate e outro utilizando métodos anônimos

class ShowClassDelegate

{

     delegate void MeuDelegate();

     public void EiMetodo()

     {

         MeuDelegate del = new MeuDelegate(ImprimeMensagem);

         del();

     }

     void ImprimeMensagem()

     {

         Console.WriteLine("E ai!!");

     }

}

Veja como fica com Métodos Anônimos

class ShowClassComAnonimos

{

    delegate void MeuDelegate();

    public void EiMetodo()

    {

       MeuDelegate delAnonimo = delegate()

       {

           Console.WriteLine("E ai!!");

       };

       delAnonimo();

    }

 }

Note que não precisamos escrever o método ImprimeMensagem, fazemos diretamente.

No entanto, métodos anônimos tem uma desvantagem no que diz respeito à legibilidade. Ele modifica a escrita e o código, por vezes se torna realmente difícil de ler.

Então, se tivermos realmente que fazer alguma coisa que seja fácil de ler, e também simples de usar, é aí que as expressões lambda trabalham a nosso favor
.
Por isso muitos dizem que as Expressão lambda são uma evolução natural dos  Métodos Anônimos.

Expressão lambda?

O C# 2.0 introduziu o conceito de métodos anônimos, que permitem que blocos de código sejam escritos "em linha" onde delegamos os valores esperados. Assim podemos escrever códigos mais inteligentes e com um menor número de linhas.

As expressões lambda  são muito utilizadas quando escrevemos métodos anônimos
, elas nos permitem trabalhar de uma forma mais inteligente e lógica. Eles também se tornam muito úteis quando escrevemos expressões LINQ para pesquisa e também podem ser utilizadas em funções, como anteriormente já comentadas conseguimos escrever funções muito mais enxutas.

 

 

Criamos uma Lambda desta forma  (parametro  { =>} o que teremos de retorno), onde o  “=>” e o operador e o que vem a antes dele é o parâmetro e após, o retorno.

Vamos dizer que queremos uma função que irá receber um  inteiro, e irá retornar se o inteiro é superior a  10.

private bool Emaiorq10(int i)

{

    if (i > 10)

        return true;

     else

        return false;

}

A mesma função pode ser escrita como uma expressão lambda, em uma linha.

(int i => i > 10);

A Expressão lambda faz o mesmo trabalho como a função acima. O mais interessante é que podemos escrever isso em apenas uma linha.

 

 

 

 

Agora vamos criar uma classe para que possamos exemplificar melhor a Expressão lambda, como disse anteriormente ela é muito utilizada em consultas LINQ  que é o que veremos a seguir:

 

public class Carros

{

   public string Marca { get; set; }

   public string Modelo { get; set; }

   public int Ano { get; set; }

 

}

 

Agora vou construir e popular minha Classe de Carros.

 

List<Carro> Carros = new List<Carro>

{ new Carro { Modelo = "Astra", Marca="Chevrolet", Ano=2005},

  new Carro { Modelo = "Corsa", Marca="Chevrolet", Ano=2004},

  new Carro { Modelo = "Stilo", Marca="FIAT", Ano=2008},

  new Carro { Modelo = "Doblo", Marca="FIAT", Ano=2006},

  new Carro { Modelo = "Escort", Marca= "Ford", Ano=2000},

  new Carro { Modelo = "Explorer", Marca="Ford", Ano=2007}

};

 

PS:Se você ainda não está familiarizado com o C# 3.0 deve estar estranhando a criação das propriedades com os gets e sets direto e também a da Lista de carros populando direto no construtor sem antes ter criado um construtor para fazer isso. Pois bem, “seja bem-vindo”, essas são apenas duas de muitas novidades da linguagem, mas isto é assunto para o próximo artigo.

Eu mostrei como criar e instanciar um List<Carro> já passando os valores, agora vou utilizar alguns métodos chamados métodos estendidos  no namespace LINQ  onde podemos fazer consultas em coleções.

 

var Resultado = Carros.Where(p => p.Marca == "FIAT");

var Resultado1 = Carros.Average(p => p.Ano);

 

Note que o (p =>) é Expressão lambda, que no primeiro exemplo especifica um filtro para a Marca “FIAT” em seguida  utilizamos uma lambda a partir do Objeto Carro para calcular a média.  A partir daí podemos explorar vários exemplos de utilização.

var Resultado2 = Carros.Where(p => p.Ano > 2005);

var Resultado3 = Carros.Where(p => p.Modelo.Contains("o"))

                                    .OrderBy(o => o.Ano);

 

Pra finalizar, um filtro utilizando o Contains que funciona como o Like do SQL e um OrderBy para ordenar o resultado pelo ano.

Bem pessoal espero ter passado o conceito básico da Expressão lambda, agora é só você se aprofundar  e colocar em prática mais uma das novidades do C# e Visual Basic .NET 9.

Bons Códigos...

 

 

Tags: ,

.Net

Como executar um método de uma página em um UserControl

by Fabiano 19. junho 2008 00:32

Algumas vezes precisamos executar métodos de uma página a partir de um UserControl  é, isso pode parecer muito complicado, mas não é. Isso pode ocorrer por exemplo com um UserControl de paginação quando o Usuário clica na página de destino precisa bindar novamente os dados da página, só que o método de bindar o grid está na página e o evento ocorre no controle,  que são coisas distintas. Como fazer então para do controle disparar o evento na página? A seguir faremos um pequeno exemplo mostrando como faze-lo. A idéia é mostrar que é possível, e como, a partir daí e com vocês...

Vamos lá!

Em um projeto web tenho uma página default.aspx essa página tem um Label como no código abaixo:.

<body>

    <form id="form1" runat="server">

    <div>

        <asp:Label ID="lblMessage" runat="server" />

    </div>

    </form>

</body>

Vou criar um UserControl dentro deste site. Vou chamá-lo de ucDisparaEvento.ascx no controle vide código abaixo:.

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ucDisparaEvento.ascx.cs" Inherits="ucDisparaEvento" %>

Agora vou adcionar o controle a página:

***Não esqueça da diretiva de registro do controle no início da página.

 

<form id="form1" runat="server">

 <div>

   <asp:Label ID="lblMessage" runat="server" />

   <br />

   <uc1:ucDisparaEvento ID="ucDisparaEvento1" runat="server" />

 </div>

</form>

No UserControl vou adcionar um TextBox onde poderemos digitar a mensagem e um LinkButton com um evento OnClick que fará a chamada para o método da Página “Default.aspx”

 

<asp:TextBox ID="txtMessage" runat="server" />

<br />

<asp:LinkButton ID="lnkExibeMsg" runat="server" Text="Exibe Mensagem na Pagina" OnClick="lnkExibeMsg_Click" />

Agora de volta a página Default.aspx vamos criar um método que irá receber uma string e imprimir no Label.

public void RecebeMensagem(string MSG)
{
    lblMessage.Text = MSG;
}

Agora que são elas! Como fazer para que no onClick do controle o método RecebeMensagem na página seja executado também. Parece complicado mas ... Veja como podemos solucionar este impasse, criamos uma Interface que irá implementar esse método. Segue o código da Interface:;

public interface IMensagem
{
    void RecebeMensagem(string Mensagem);

 

}

Uma solução simples, elegante e eficiente. Vamos lá! E agora a Página passa a implementar esta Interface.

public partial class _Default : System.Web.UI.Page, IMensagem

E agora no controle utilizamos a interface para fazer a chamada do método na página. Como no exemplo abaixo.

((IMensagem)Page).RecebeMensagem(txtMessage.Text);

Porque a página implementa esta interface que expõe o método RecebeMensagem e nos possibilita utilizá-lo no UserControl. Esta solução e bem legal porque além disso podemos controlar se a página que esta utilizando esse UserControl implementa a Interface, se não implementar podemos gerar uma exeption por exemplo,como no código abaixo.

if (this.Page is IMensagem)

 ((IMensagem)Page).RecebeMensagem(txtMessage.Text);

else

throw new Exception("A página precisa implementar a interface IMensagem");

É isso ai pessoal espero ter passado uma experiência nova para vocês! E que esse artigo contribua mais para seu aprendizado. Para saber mais truques como este, não percam a próxima turma de ASP.NET, pois temos muitas dicas interessantes como esta.

Bons Códigos...

Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

Fabiano Belmonte

Senior Architect, especialista em aplicações e-business com larga experiência em B2B (Submarino. Com e Saraiva.Com). Trabalha há 5 anos com a tecnologia .Net, aplicando conhecimentos nas diversas áreas: instituições financeiras (sistema SPB), e-commerce, gerenciamento logístico entre outras.