Baixe o app para aproveitar ainda mais
Prévia do material em texto
ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual; Este documento é de distribuição gratuita para uso pessoal. É vedada qualquer outra forma de utilização, divulgação, publicação, distribuição etc. sem autorização do autor. Sobre o Autor Fernando Amaral trabalha a mais de 10 anos com o desenvolvimento de software. É certificado Microsoft MCP, MCAD, MCSD, MCDBA e MCT, Comptia CDIA+, Project Managment Institute PMP. É Pós Graduado em Gestão de Sistemas de Informação pela Uniderp e em Melhoria de Processo de Software pela UFLA. Além disso tudo é Ateu. Atualmente reside em Campo Grande MS. Sobre www.fernandoamaral.com.br Eu mantenho um site com alguns artigos e tutoriais de tecnologia no endereço www.fernandoamaral.com.br. Através do site existe um formulário onde posso ser contatado. Sobre ASP.NET 3.5 em VB.NET e C# Existe muito conteúdo para quem quer aprender ASP.NET. Existem centenas de bons livros. Porém este curso em formato digital traz algumas características que talvez você não encontre em nenhum lugar: É completo no sentido que abrange todos os principais temas relacionados ao ASP.NET 3.5; Segue uma seqüência lógica. Você não precisará ficar garimpando informações em lugares diferentes; É em português. Porque não um Livro? Este curso foi criado dentro de minhas possibilidades, de maneira que não precisei assumir nenhum compromisso. ASP.NET 3.5 em VB.NET e C# 1. Introdução ao ASP.NET.................................................... 7 2. Visual Studio 2008: O ambiente e as linguagens............. 13 3. Web Forms....................................................................... 31 4. Controle............................................................................ 33 5. Master Page...................................................................... 44 6. Themes e Skins................................................................. 53 7. Navigation........................................................................ 59 8. WebParts.......................................................................... 71 10 LINQ .............................................................................. 116 11. MemberShip e Roles ..................................................... 119 12 .Manutenção de Estado................................................... 153 13 . ASP.NET AJAX ........................................................... 167 14. Criando e Consumindo WebServices ............................ 179 15. Criando uma página de erros personalizada................... 188 16. Eventos da aplicação...................................................... 191 17. Distribuindo sua Aplicação ........................................... 193 18. Relatórios com Crystal Report ...................................... 202 6 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br 1. Introdução ao ASP.NET Desenvolver aplicações nunca foi tão fácil. Ambientes RAD cada vez mais modernos e amigáveis tem tornado o trabalho dos arquitetos de software cada vez mais simples. Com o versão 3.5 do ASP.NET, conseguiu-se atingir níveis de produtividade nunca antes imaginados. Este curso tem por objetivo introduzir o desenvolvedor no mundo do desenvolvimento de aplicações Web utilizando o ASP.NET 3.5. Não é um curso introdutório de lógica de programação. Os exemplos ao longo do curso serão todos demonstrados em VB.NET e C#. Blocos de código serão precedidos pelo ícone da linguagem utilizada: para código em VB para código em C# O que é o Microsoft .NET FrameWork? Tradicionalmente o desenvolvedor escreve Software para um sistema Operacional ou dispositivo especifico. Por exemplo, ao criar um programa no Delphi 7 ou no Visual Basic 6, ele esta criado um Software para rodar em Sistemas Operacionais Windows sobre a plataforma Intel. Ao desenvolver um software para o .NET, o desenvolvedor ao invés disto esta fazendo um software para rodar em qualquer dispositivo ou plataforma que tenha o .NET Framework instalado. Existem dezenas de linguagem que podem ser usadas para criar um programa .NET, a Microsoft desenvolveu o VB.NET, uma versão Orientada a Objetos do clássico VB e o C#, que herdou sua sintaxe do C++. Outras empresas desenvolveram outras: COBOL, Delphi, Fortran etc. só para citar algumas. Você mesmo pode criar sua própria linguagem. A escolha entre uma linguagem ou outra é apenas uma questão de sintaxe. 7 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Isto é possível porque um programa escrito para .NET é compilado em uma linguagem intermediaria chamada MSIL (Microsoft Intermediate Language). Não importa qual linguagem em que você codificou, o resultado, em termos de performance, qualidade, tamanho dos binários etc. será o mesmo. O arquivo compilado em MSIL normalmente resulta um uma DLL, denominada assembly. Quando o programa for executado pela primeira vez, entre em cena o JIT (Just In Time Compiler), que vai fazer uma nova compilação do programa, desta vez de acordo com as especificações do sistema operacional e do dispositivo em que o .NET Framework se encontra. Desenvolver um sistema para o plataforma .NET, traz mais alugmas vantagens além de das ficaram óbvias nesta introdução. A mais importante é que o seu programa vai rodar em um ambiente protegido e especifico, sem ter que se preocupar com as especificações ou problemas do sistema operacinal. Toda a interação com este, como por exemplo, o gerencimento de memória, é feita pelo .NET. ASP.NET 1.X Nos ultimos anos surgiram fantásticas IDEs para desenvolvimento de aplicações Windows. Algumas permitiam que você abrisse uma tabela qualquer, permitindo ainda a sua edição, sem sequer escrever uma linha de código. Outras através de assistentes automatizavam tarefas poupando tempo e muitas dores de cabeça. Surgiram ainda diversas ferramentas que prometiam a criação de aplicativos inteiros sem a necessidade de escrever uma linha de código qualquer. Porem não podemos dizer o mesmo para as aplicações Web. Além algumas frustadas tentativas, não existiu nenhum ambiente de alta produtividade como existiam para aplicações convencionais. As linguagens, principalmente o ASP classico, semelhante ao Visual Basic, era limitada é sem os recusos de linguagens OO. Ao planejar o .NET, a Microsoft vislumbrou um ambiente para aplicações Web onde se pudesse desenvolver aplicações no mesmo ambiente e com as mesmas facilidades de aplicações convencionais, utilizando a mesma linguagem. 8 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Promessa cumprida: O .NET 1.x junto com o Visual Studio 2002 / 2003 proporcionou um ambiente para aplicações WEB, totalmente integrado, com as facilidades só antes vistas em ambientes de aplicações convencionais: WYSIWYG, Drag and Drop, Intellisense, recursos de depuração avançados etc. Já era possivel exibir uma tabela numa aplicação WEB com duas linhas de código, e sem escrever uma Tag HTML sequer! ASP.NET 2.0Não há duvidas que a plataforma .NET 1.x e o ASP.NET 1.x mudaram a maneira como as aplições Web são desenvolvidas. Porém a equipe de desenvolvimento da plataforma percebeu que muito ainda poderia ser feito, principalmente no que diz respeito a produtividade, e esse foi o objetivo principal da equipe de durante seu desenvolvimento. Como resultado, houve uma melhora de produtividade em até 70% ! Vejamos algumas das melhorias do ASP.NET 2.0 em relação ao seu antecessor: Mais de 50 novos Server Controls Novas ferramentas adiminstrativas Nova IDE do Visual Studio 2005 Site Navigation: Controles que facilitam a navegação em Web Sites Master Pages: Agora é possível utilizar herança visual em aplicações Web, o que na versão 1.x só era possivel com aplicações Windows Forms. Themes: Tornam mais facil o gerenciamento do visual de sua aplicação Acesso a Dados: O ADO.NET embora extramente eficiente, era demasiadamente complexo. O Acesso a dados foi reformulado e simplificado. Snippets: Partes de códigos especificas que podem ser armazenadas para utilização futura. O ASP.NET foi o primeiro ambiente que permitiu que se desenvolvessem aplicações convencionais ou para Web em uma mesma IDE, utilizando a mesma linguagem. Normalmente você não precisa ser um profundo conhecedor de HTML para desenvover uma aplicação Web no VS 2005. Porém um conhecimento básico é recomandado: sempre há necessidade de algum ajuste manual. 9 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br ASP.NET 3.5 As mudanças do ASP.NET 2.0 e 3.5 foram poucas, porém significativas. Na verdade o core engine das duas versões continua o mesmo. Para projetos em ASP.NET 3.5 o ASP.NET AJAX Extensions passou a estar integrado a IDE do Visual Studio, não é mais necessário baixar e instalar separadamente. É encontrado no assemblie System.Web.Extensions.dll. Outra grande novidade, já há bastante esperada é o LINQ. A Gap que existe entre dados relacionais e objetos já não é um assunto novo, já recebendo inclusive artigos meus. Já postei também alguns artigos técnicos sobre LLBLGen e NHibernate. Agora o .NET avança nesse sentido com o LINQ. O LINQ não é nenhuma novidade, porém agora é integrado ao Visual Studio. A idéia do LINQ também não é nova, com esta tecnologia você pode operar o banco de dados em uma linguagem nativa, como se tivesse gerando código VB.NET ou C#. É encontrado nos assemblies System.Core.dll, System.Data.Linq.dll, System.Xml.Linq.dll e System.Data.DataSetExtensions.dll. Também há controles novos. Além dos controles Ajax Extensions que na versão anterior deviam ser instalados separadamente, existem mais três novos controles: ListView, DataPager e LinqDataSource. O Listview é um controle de exibição de dados tabulares, semelhante ao Datagrid e GridView, porém com novas funcionalidades e maior controle sobre o resultado produzido. DataPager é um controle que prove paginação de dados ao Listview. LinqDataSource é mais um controle de acesso a dados, como ObjectDataSource e o SQLDataSource, porém utilizando o modelo LINQ descrito em sessão anterior. Estrutura de uma aplicação ASP.NET 2.0 e 3.5 Nesta sessão apresento algumas considerações sobre o estrutura de aplicações ASP.NET 2.0 e 3.5, que como dito em seção anterior, permaneceram inalterados. Você já percebeu que muita coisa mudou entre o ASP.NET 1.x e seu predecessor. Uma das grandes propagandas no lançamento da primeira versão do ASP.NET era o modelo code-behind, onde apresentação e código de servidor ficam armazenados em arquivos 10 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br fisicamente separados, tornando o código mais limpo e intuitivo tanto para o designer quanto para o programador. Trabalhar com tudo em um único arquivo até era possível, porém desvantajoso. No ASP.NET 3.5, embora o padrão seja um arquivo único, pode-se facilmente optar em trabalhar com arquivos separados, basta desmarcar a opção place code in separated file na caixa de dialogo de criação de um novo Web Form: Este novo modelo é denominado code-inline. Se você optar por trabalhar com este modelo, seu código de servidor vai estar separado entre tags Script. O grande problema na versão 1.x era que trabalhando com um único arquivo perdíamos alguns recursos poderosos de programação, como o Intellisense. Na versão 2.0 e 3.5 não há qualquer problema: tudo que funciona no modelo code-behind funciona também no code-inline. Post-Back entre páginas Até o.NET 1.x um controle só poderia causar um post back para a própria página. Agora esta limitação acabou, através da propriedade PostBackUrl, presente no botão de comando e similares, que permite que seja executa um postback para outra pagina Asp. Este novo recurso é conhecido como Cross-Page Posting. 11 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Agora é possível inclusive ler valores de controles ou propriedades de páginas que deram origem ao postback. Esta fantástica inovação surgida no ASP.NET 2.0 permite tornar o código mais limpo, mas otimizado, além de reduzir a necessidade de utilização de variáveis de sessão, querystring e outros. Pastas A partir da versão 2.0 o ASP.NET uma aplicação Web deixou de ser orientada a projeto e passou a ser orientada a arquivos. Em conseqüência foram definidas uma série de pastas com funções especificas, vamos ver as principais: App_Code: Para armazenamento de classes App_data: Armazena fontes de dados App_Themes: Armazena um tema. Estudaremos temas mais adiante. App_LocalResources: Armazena arquivos de recursos Arquivos Nesta sessão vamos ver os principais tipos de arquivos que uma aplicação ASP.NET pode conter: Web.config: è um arquivo contendo as configurações da aplicação, formatado com XML. .aspx: arquivo contendo a apresentação de uma página. .vb ou .cs: arquivo com código de servidor relacionado a uma página Global.aspx: Arquivo contendo os eventos globais da aplicação. .master: Arquivo contendo uma MasterPage. .ascx: Arquivo contendo um WebUserControl .css: Arquivo css .resx: Arquivo de recursos .sitemap: Arquivo contendo um mapa do site .skin: Arquivo contendo um skin 12 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br 2. Visual Studio 2008: O ambiente e as linguagens Nesta seção vamos ver os principais compontentes da IDE do VS 2008. A esquerda, por padrão oculta, existe a Barra de Ferramentas, onde ficam agrupados por categoria os compontes padrão do VS ou de terceiros instalados no ambiente. Para instalar um novo componente, basta clicar com o botão direito sobre a barra e selecionar Choose Itens. Você pode também personalizar a sua barra de ferramentas da maneira que achar melhor. A direita temos o Solution Explorer, que permite uma navegação rápida entre os arquivos de um projeto ou solução. Abaixo, a janela de propriedades, permite configurar as propriedades de um controle ou de um formulário, bem como acessar eventos. Entre as principais novidadesdo ambiente temos as notificações de status da linha através de cores: Uma nova linha de código ou código alterado é marcado como amarelo. Se a linha já foi salva sua cor muda para verde. 13 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Outra novidade são os Snippets: pedaços de código pré fabricados para executar uma tarefa especifica. Tudo bem que isso não é uma grande novidade e já foi utilizada em outras IDEs por aí a fora, mas com certeza o recurso esta melhor do que nunca e poderá lhe ajudar a poupar bastante trabalho. Para inserir um Snippet basta chama-lo no menu rápido sobre a área de código. Obviamente que você também poderá criar seus proprios snippets. SINTAXE: VISUAL BASIC .NET e C# Vamos introduzir os principais aspectos d a sintaxe de programação do VB.NET e do C#. Este não será um estudo completo ou abrangente, para tal procure bibliografia específica. Comentários No C# comentário de linha são feitos com duas barras. Comentários em bloco são aberto com \* e fechados com *\. No VB.NET Comentários são inseridos com aspas simples no inicio da linha. O VB.NET não permite o comentário de blocos de código, a solução é comentar linha a linha. Porém o Visual Studio possui em sua barra de ferramentas padrão o comando Comment out the selected lines que comenta um bloco de código selecionado e Uncomment the selected lines que remove os comentários, a utilização é simples e intuitiva, e funcina em ambas as linguagens este é um comentário válido Dim i as Integer esta também é um comentário válido //este é um comentário válido int x = 3; /* este também é um comentário válido */ Lembre-se sempre que o C# diferencia entre caracteres maisculos e minusculos, o VB.NET não. Você já deve ter encontrado discussões ardentes na internet sobre C# ser melhor que VB.NET e vice-versa. A verdade que conhecendo os fundamentos da plataforma sabemos que o resultado é exatamente igual. 14 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br No Visual Studio 2008 também é possível documentas seu código sem a necessidade de instalar qualquer plug-in, basta adcionar três aspas (vb.net) ou tres barras (C#) antes do procedimento. O VS automaticamente preenche o esqueleto do documento. Observe o exemplo abaixo: ''' <summary> ''' Função para somar dois números ''' </summary> ''' <param name="x">Primeiro número a somar</param> ''' <param name="y">Segundo número a somar</param> ''' <returns>Resultado da soma</returns> ''' <remarks>By Fulano</remarks> Public Function Somar(ByVal x As Integer, ByVal y As Integer) _ As Integer Dim z As Integer z = x + y Return z End Function /// <summary> /// Função para somar dois números /// </summary> /// <param name="x">Primeiro número a somar</param> /// <param name="y">Segundo número a somar</param> /// <returns>Resultado da soma</returns> int Somar(int x, int y) { int z; z = x + y; return z; } O VS ainda pode gerar um diagrama de sua classe, basta clicar com o botão direito sobre o arquivo, e selecionar View Class Diagram Tipos de Dados Sendo o .NET um framework, não existem tipos de dados desta ou daquela linguagem. Os tipos são todos do .NET. Obviamente que existem diferenças de sintaxe na declaração e manipulação destas variaveis. Abaixo segue uma relação dos principais tipos de dados, para uma relação completa consulte a documentação do VS 2008: Você ainda pode criar comentários no VB.NET utilizando Rem. 15 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Boolean Verdadeiro ou falso Char - caractere unicode de 16 bit String - String Byte inteiro de 8 bit, sem sinal UInt16 - inteiro de 16 bit, sem sinal UInt32 - inteiro de 32 bit, sem sinal UInt64 - inteiro de 64 bit, sem sinal Int16 inteiro de 16 bit, com sinal Int32 - inteiro de 32 bit, com sinal Int64 - inteiro de 64 bit, com sinal SByte - - inteiro de 8 bit, com sinal DateTime data e hora Decimal número decimal Double número de ponto flutuante com 64 bit Single - número de ponto flutuante com 32 bit Operadores VB.NET C# And & Or | XOr ^ Not ! Is Nothing == null <> != & + \ / \= /= Mod % = == Um valor nulo em VB.NET é representado por NOTHING, em C# por null. O tipo Int32 pode ser representado no VB.NET por Integer e int no C#. 16 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Variaveis e Constantes No VB.NET para declarar uma variável usamos a palavra DIM, seguido pelo nome da variável e tipo: Dim i as Integer A sintaxe do C# é semelhante ao do C++: int z; Podemos ainda declara diversas variaveis de um mesmo tipo numa unica declaração: Dim i,j,k as Integer int x, y, z; Ou ainda variaveis de diferentes tipos: Dim i,m as Integer, j,k as Single int i, m; Double j,k; Obviamente i e m serão do tipo inteiro, e j e K do tipo single. É possível ainda incializar a variável na sua declaração: int z = 1; Para declarar uma constante utilizamos a declaração Const: Dim i as Integer = 1 Const x as integer = 1 17 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Enumeradores Para declarar um enumerador usamos a declaração Enum Você opcionalmente pode inicializar cada menbro, se você não o fizer, o primeiro menbro será inicializado com zero e assim sucessimvamente. Coleções Poderíamos dedicar um longo capítulo ao estudo de coleção, sendo nosso objetivo fazer uma introdução a parte de sintaxe, veremos apenas arrays: const int x = 1; Public Enum Semana Domingo Segunda Terça Quarta Quinta Sexta Sabado End Enum enum Semana { Domingo, Segunda, Terça, Quarta, Quinta, Sexta, Sabado }; Enum Semana Domingo = 1 Segunda = 2 Terça = 3 Quarta = 4 Quinta = 5 Sexta = 6 Sabado = 7 End Enum enum Semana { Domingo = 1, Segunda =2, Terça =3, Quarta =4, Quinta =5, Sexta =6, Sabado =7 }; Dim MeuArray(1) As String MeuArray(0) = "Um" MeuArray(1) = "Dois" 18 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Ao contrário do legado VB, um array possui sempre índice iniciado em zero, portanto um array declarado com (1), terá duas posições. Estruturas de decisão O classico if não poderia faltar. A sintaxe é semelhante as suas linguagens legadas:Obviamente que a intrução else é opcional. Outra forma de controle de fluxo conhecido é o Select (VB.NET) ou Switch (C#): string[] MeuArray = new string[1]; arr[0] = "Um"; arr[1] = "Dois"; Dim Nome As String = "ASP.NET" If Nome = "VB.NET" Then MessageBox.Show("Certo!") Else MessageBox.Show("Errado!") End If string Nome = "ASP.NET"; if (Nome == "C#") { MessageBox.Show("Certo!"); } else { MessageBox.Show("Errado!"); } Dim Nome As String = "VB.NET" Select Case Nome Case "VB.NET" MessageBox.Show("Certo!") Case "C#" MessageBox.Show("Errado!") Case Else MessageBox.Show("?") End Select string Nome = "C#"; 19 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Note que no C# devemos usar a palavra break para quebrar o fluxo Laços Vamos estudar três estruturas de laços: For, while e laços em coleções. O laço for tem a sintaxe semelhante em qualquer linguagem: Dim i As Integer For i = 1 To 10 MessageBox.Show(CStr(i)) Next i for (int i = 0; i < 10; i++) MessageBox.Show(Convert.ToString(i)); A sintaxe do C# nos permite facilmente fazer um loop regressivo, basta alterarmos o último argumento de i++ para i--, e obviamente mudarmos a condição: for (int i = 0; i < 10; i++) MessageBox.Show(Convert.ToString(i)); No VB.NET podemos conseguir o mesmo efeito utilizando a palavra chave Step: Dim i As Integer = 0 For i = 10 To 1 Step -1 MessageBox.Show(CStr(i)) Next i Existem laços While com teste de condição no inicio da sentença ou no final, neste último o laço executa sempre uma primeira vez, independente do resultado da avaliação. Vamos ver exemplos do primeiro caso: switch (Nome){ case "VB.NET": MessageBox.Show("Certo!"); break; case "C#": MessageBox.Show("Errado!"); break; default: MessageBox.Show("?"); break; } 20 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Dim i As Integer = 0 Do While i < 5 MessageBox.Show(CStr(i)) i += 1 Loop int i = 0; while (i<5) { MessageBox.Show(Convert.ToString(i)); i += 1; } Finalmente, o que pode ser novidade para quem ainda não conhece a plataforma .NET são os laços em coleções, que permitem percorrer um a um os membros de uma coleção qualquer. Dim numbers() = {4, 5, 6, 1, 2, 3, -2, -1, 0} Dim i As Integer For Each i In numbers MessageBox.Show(Convert.ToString(i)) Next int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 }; foreach (int i in numbers) { MessageBox.Show(Convert.ToString(i)); } Neste exemplo a titulo de simplicidade nossa coleção é um array, porém a estrutura funciona da mesma forma para qualquer tipo de coleção. Convertendo valores Para a conversão entre tipos de dados utilize a classe convert, seguida do método apropriado ao tipo que ser converter: Dim i As Integer, s As String s = Convert.ToString(i) int i; string s; s = Convert.ToString(i); 21 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Procedimentos e funções Em VB.NET uma função começa com a palavra reservada function e termina com o tipo do dado de retorno. Já no C# inicia com o tipo do dado de retorno: Function Somar( x As Integer, y As Integer) _ As Integer Dim z As Integer z = x + y Return z End Function int Somar(int x, int y) { int z; z = x + y; return z; } O retorno é inidicado pela palavra-chave return ou pelo próprio nome da função. Um procedimento que não retorna valor em VB.NET inicia com a palavra chave Sub, e em C# com void: Sub Somar( x As Integer, y As Integer) _ As Integer Dim z As Integer z = x + y End Function void Somar(int x, int y) { int z; z = x + y; } Visibilidade ou Scopo A passagem de parametros por padrão ocorre por valor. Para indicar um parametro a ser passado por referencia, utilize ByRef no VB.BET e ref no C#. 22 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br A visibilidade de um procedimento, classe, inferface etc. é definada através das palavras reservadas a seguir: Public / public: acessível de qualquer lugar do projeto ou de instancias da classe Private / private: Acessível apenas dentro do mesmo contexto; Friend / internal: Acessivel apenas dentro do projeto; Protected / protected: Acessivel apenas dentro da classe ou de uma classe derivada; Protected Friend / Protected Internal: Acessivel apenas dentro da classe derivada ou do mesmo projeto; Tratamento de exceções O tratamento de exceções será surpresa apenas para quem esta começando agora a conhecer o VB.NET, que com o lançamento do linguagem ganhou uma forma estruturada de tratamento de erro semelhante as demais linguagens OO. È o adeus ao On error go to. O tratamento de erro é formando por uma estrutura Try...Catch..Finally. Entre o Try e o Catch deve ser colocado o código que você quer proteger de uma exceção. Entre Catch e Finnally o código a ser executado no caso de ocorrer uma exceção, e finalmente após Finnally algum código que você queira que obrigatóriamente seja executado, ocorrendo ou não uma exceção, geralmente usado para liberar algum recurso alocado. Vale lembrar que você pode usar apenas parte da funcionalidade do bloco, por exemplo, se você que apenas tratar uma exceção, pode contruir um bloco contendo apenas os comando try...catch. Por outro lado se você quer apenas garantir que um recurso seja liberado, como uma conexão com o banco de dados pro exemplo, você pode fazer uso apenas do bloco try...finally. Outra caracteristica importante é que as classes de exceção são executadas da mais especifica para a menos especifica, isto permite um tratamento de erros mais robusto e eficaz. Normalmente você deve terminar seu tratamento com a classe Exception, que é menos específica e que da origem a todas as demais. Ao declarar algo sem a visibilidade, por padrão será private. 23 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Try My.Computer.FileSystem.CopyFile("Aspnet.pdf", "Aspnet.bkp") Catch ex As System.IO.IOException MessageBox.Show("Ocorreu um erro na cópia do arquivo") Catch ex2 As Exception MessageBox.Show("Ocorreu um Erro desconhecido") End Try try { string s = null; } catch (ArgumentNullException s) { MessageBox.Show("Ocorreu um erro na string"); } catch (Exception r) { MessageBox.Show("Ocorreu um Erro desconhecido"); } With O with, que não tem equivalente no C#, permite omitir o nome de um objeto quando o mesmo é utilizado em diversas linhas. With GridView1 .Caption= "GridView" .EditIndex = 0 .Enabled = False End With Orientação a Objetos Vamos também apresentar alguns aspectos da sintaxe da criação de classes no VB.NET e no C#. Porém antes é preciso conhecer o conceito de NameSpaces. NameSpaces é uma estrutura simples, porém muito eficiente de organizar seu código. Por exemplo, uma suposta empresa GoodSoftware pode definir que todas suas classes terão como NameSpace raiz GoodSoftware. Abaixo deste existirão os NameSpaces ERP, CRM e Global. O NameSpace ERP abrigaria as classes de seus novo sistema ERP, o CRM idem, e o Global classes que para serem utilizadas em ambos os projetos. Dentro de cada um destes NameSpaces é possível criar n outros. Outra importante 24 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br vantagem do seu uso é redução de problemas com conflitos com nomes repetidos de classes ou métodos. Abaixo vemos a declaração básica de uma classe de Nome Class1, dentro de um NameSpace Namespace GoodSoftware Public Class ERP '... End Class End Namespace namespace GoodSoftware { public class ERP { // } } Um construtor de uma classe em VB.NET se define com a palavra chave New, já em C# deve ter no mome da classe Public Sub New() ... End Sub public Class1 () { // } Obviamente que você pode criar um construtor com passagem de parametros. Já as propriedades são bastante singular em cada linguagem: Você não é obrigado a criar uma classe dentro de um NameSpace. Não é preciso existir relação entre nomes de classes e namespaces com o nome fisico do arquivo. Você pode inclusive colocar diversas classes ou namespaces dentro de um mesmo arquivo. 25 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Public Property Nome() As String Get Return Pnome End Get Set(ByVal value As String) Pnome = value End Set End Property public String Nome { get { return Pnome; } set { Pnome = value; } } Caso você deseje criar um método que por algum motivo não precise ou não deva ter sua classe instanciada, basta você acrescentar a palavra chave shared no VB.NET ou static no C#, sempre após a declaração de visibilidade do método: Public Shared Function Somar(ByVal x As Integer, ByVal y As Integer) _ As Integer Dim z As Integer z = x + y Return z End Function public static int Somar(int x, int y) { int z; z = x + y; return z; } A herança de uma classe é definida pela palavra chave inherits em VB.NET e em C# através da notação : classe pai Public Class Class2 Inherits Class1 End Class Uma propridade pode ser apenas leitura ou apenas escrita. Além de inicar estas caracteristica na declaração da propriedade, você deverá omitir as sentenças get e set, respectivamente. Lembre-se que um método definido com shared / static, não pode usar qualquer recurso da classe, como por exemplo uma variavel privada ou mesmo, uma propriedade ou um outro método. 26 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br class Class2: Class1 { } Abaixo alguns outros recursos de OO do .NET, não vou demonstrar exemplos porque extrapolam o objetivo básico desta sessão. A primeira palavra é a notação em VB.NET e a segunda em C#: NotInheritable / sealed: Também conhecido com Classe Fechada , indica que uma classe não pode ser usada como base, ou seja, nenhuma outra classe poderá herdá-la MustInherit / abstract: Define uma classe abstrato, onde apenas uma classe filho poderá ser instanciada. Overloads: permite que um método seja sobrecarregado, ou seja, que possa haver métodos com a mesma função, porém com assinaturas diferentes. O uso do termo é desnecessário tanto em VB.NET quanto em C#, pois o ambiente entende que métodos com o mesmo nome porem com assinaturas diferentes estão sobrecarregados. Overridable / virtual: Indica que uma classe filho deve programar uma nova versão do método. Overrides / override: Utilizado para sobrescrever uma implementação na classe pai. MustOverride: Em uma classe marcada como MustInherit. Indica que o método ou propriedade deve não foi implementado na classe pai e deve ser implementado na classe derivada. Interfaces Interfaces é um recurso que permite criar uma padronização maior entre classe. Uma interface é uma assinatura , que compreende nada mais que métodos e propriedades ocas . Uma classe que programe determinada interface deve obrigatoriamente seguir essa assinatura. Você pode definir que determinada classe implemente determinada interface para ter uma certa funcionalidade. Para se referir a classe base, utilize MyBase no VB.NET ou base no C#, seguido do nome do método ou propriedade. 27 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Confuso? Vou citar um exemplo: você pode conectar tanto um array quanto um SqlDataSource a um GridView, pois ambos implementam a interface System.Collections.IEnumerable. Interface Interface1 Sub Metodo1() Function Metodo2() As Integer End Interface Public Class UsaInterface Implements Interface1 Public Sub Metodo1() Implements Interface1.Metodo1 ' End Sub Public Function Metodo2() As Integer Implements Interface1.Metodo2 ' End Function End Class public interface Interface1 { void Metodo1(); int Metodo2(); } public class UsaInterface : Interface1 { public void Metodo1() { // } public int Metodo2() { // } } Utilizando o IIS Como um ambiente de alta produtividade, O VS vai criar automaticamente pra você todas as estruturas que precisam ser implementadas na classe, no momento que você informar que deseja utilzar determinada interface. O .NET não suporta herança multipla, porém uma classe pode implementar diversas interfaces. Certifique-se que o IIS esta devidamente instaldo e rodando. 28 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Ao contrario do seu entecessor, o VS 2005 e 2008 vem com um pequeno servidor Web embutido. Porém devido as limitações deste, vamos trabalhar com IIS. Para criar uma nova aplicação usando o IIS siga os seguintes passos: Na IDE do VS selecione File / New Web Site; Na caixa de dialogo New Web Site selecione ASP.NET Web Site; Clique em Browse; Na caixa de dialogo Chose Location, selecione Local IIS; Selecione Site da Web Padrão; Clique em Create New Web Aplication; Digite um nome para sua aplicação, no exemplo Teste; 29 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitosde propriedade intelectual. www.fernandoamaral.com.br Clique em Open; De volta a new Web Site, clique em Ok.; 30 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br 3. Web Forms Um Web Form é uma pagina de sua aplicação. Na IDE do VS ele se comporta de forma semelhante a um Windows Form: Uma área onde você pode arrastar e soltar controles visuais, codificar eventos e configurar propriedades que vão regrar seu comportamento. Fisicamente, um Web Form é composto por um arquivo com extensão aspx e, dependendo do modelo adotado, poderá ou não estar vinculado a ele um arquivo vb ou cs, com a codificação para execução no servidor. Abaixo você vê o código gerado pelo próprio VS na criação da um Web Form: <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> </div> </form> </body> </html> Nesta página você alguns dos principais elementos que formam uma pagina HTML padrão, como as tags Html, Head, Body, Form e Title. Todos controles e todo conteúdo de apresentação de seu formulário, vai estar entre as Tags Body. Diretivas Na primeira linha da página temos uma diretiva de página. Uma diretiva é representada pelo símbolo <%@. O que nos diz que se trata de uma diretiva de página é palavra page, logo após a abertura da tag. Uma diretiva de página possuiu algumas informações que serão úteis ao compilador no momento da geração da pagina. No código acima, vemos que na diretiva criada por padrão pelo VS, temos já diversos atributos, você pode alterá-las ou mesmo inserir diretivas especificas, desde obviamente que você saiba o que esta fazendo. 31 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Abaixo veremos as principais diretivas existentes no ASP.NET 3.5: @Control: Diretiva de um User Control (arquivo ascx) @Master: Diretiva de uma Máster Page @OutPutCache: Diretiva de controle de cachê @Assembly: Vincula um assembly a página @Import: Importa um namespace especificado @Page: Diretiva de um Web Form (arquivo aspx Cada diretiva pode conter n atributos. Os atributos são configurações que na verdade ditam as funcionalidades da diretiva. Veremos a seguir os principais atributos da diretiva @page: AutoEventWireUp: Determina que os eventos de uma página sejam disparados automaticamente ClassName: Especifica o nome da classe relacionada a página CodeFile: Especifica o arquivo code-behind da página Culture: Especifica as configurações de cultura da página Debug: Compila a página com os símbolos de depuração EnableSessionState: Indica se é permitido armazenamento de sessão na página EnableTheming: indica se é permitido o uso de temas na página EnableViewState:Indica se o viewstate será mantido na página Language: Defina a linguagem em que a página é codificada SmartNavigation: Habilita os recursos do SmartNavigation na página Theme: Defini um tema especifico para a pagina ValidateRequest: Indica se a requisição será validada. Quando este atributo esta com verdadeiro, se existir algum conteúdo potencialmente perigoso postado na página, será gerada uma exceção. No arquivo web.config ou mesmo até no machine.config, podemos configurar muitos dos atributos que também são configuráveis a nível de pagina. Normalmente a configuração através de diretiva de página sobrescreve a definida em um arquivo de configuração. 32 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br 33 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br 4. Controles Em seção posterior veremos os novos controles adicionados no ASP.NET 3.5, que como vimos na seção de novidades desta versão, são poucos. No ASP.NET 2.0 foram adicionados de cerca de 50 novos controles de servidor. Alguns presentes na versão 1.x, como o DataGrid, não estão mais disponíveis na caixa de ferramentas, porém podem ser facilmente adicionados. Você pode criar uma aplicação utilizando basicamente dois grandes grupos de controles: controles HTML, que são os controles padrão conhecidos e Server Controls, ou controles de servidor. Server Controls são controles ricos em funcionalidade, que podem ter seus eventos ou propriedades manipulados no código executado no servidor. Todo controle de servidor é codificado através de uma tag ASP, que não é HTML padrão que conhecemos. Em tempo de execução, o ASP.NET renderiza esta tag em HTML otimizado para o navegador em que a aplicação é executada. Por exemplo, um dos controles mais simples é o Label. Ao colocar um Label em um WebForm o VS gera o seguinte código: Ao executarmos a aplicação, a tag ASP:Label é renderizado em uma tag span: Não estudaremos detalhadamente todos os Server Controls. Você pode criar aplicativos usando apenas controles HTML, porém tenha um bom motivo para fazer isto. <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> Você pode gerenciar a apresentação de seu site manualmente, se preferir. <span id="Label1">Label</span> 34 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br O atributo runat=Server não define que o controle é um controle de servidor, mas sim que ele será visível no código executado no servidor. Isto significa que se adicionarmos este atributo a um controle HTML, este também poderá ser manipulado no servidor, porém de forma mais pobre: Acessando eventos e propriedades de controles Na caixa de propriedades, clicando no botão Events , você tem uma relação de todos os eventos possíveis para um determinado controle. Para que o VS crie automaticamente um manipulador para o evento basta dar um duplo clique no nome. Alguns manipuladores podem ser criados quando clicamos sobre o próprio controle, como o evento Click de um Button: Protected Sub Button1_Click(ByVal sender As Object,ByVal e _ As System.EventArgs) Handles Button1.Click End Sub protected void Button1_Click(object sender, EventArgs e) { } Junto com o evento são passadas duas propriedades, sender, do tipo object, que contem o objeto que disparou o evento, e e, do tipo EventArgs, que contem algumas propriedades especificas do evento. Ler ou alterar propriedades de um controle é feito no modelo controle.propriedade, como nos exemplos abaixo: Protected Sub Button1_Click(ByVal sender As Object, ByVal e _ As System.EventArgs) Handles Button1.Click Button1.Text = "Gravar" Button1.ToolTip = "Clique Aqui para Gravar" End Sub <input id="Text1" runat="server" type="text" /> Não estudaremos controlesHTML. 35 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br protected void Button2_Click(object sender, EventArgs e) { Button1.Text = "Gravar"; Button1.ToolTip = "Clique Aqui para Gravar"; } Você pode definir que mais de um controle dispare um mesmo manipulador de evento, internamente basta você verificar qual foi o controle que causou o evento. De uma maneira geral, para ambas as linguagens, basta você selecionar o evento no dropdown na caixa de propriedades. O interessante é como o VS trata isto em tempo de design de forma tão diferenciada. No C# o nome do manipulador do evento é colocada no arquivo ASPX, no atributo OnClick. No VB.NET, é adicionado o nome do controle ao grupo handles, ao final da assinatura do evento. O resultado em tempo de execução obviamente é o mesmo. Propriedades Comuns Algumas propriedades são comuns, se não a todos, mas a maioria dos controles. Vamos vê-las agora: ID: O nome do controle, deve ser único BackColor: Cor de fundo do controle BorderColor: Cor de Borda do Controle BorderStyle: Estilo da borda do Controle BorderWidt: Largura da borda do controle CssClass: Indica a classe CSS a ser aplicada no controle Enabled: indica se o controle esta habilitado EnableTheming: Indica se é o tema do controle estará ativo EnableViewState: Indica se o controle vai armazenar seu estado no viewstate da pagina Font: Fonte do controle SkinID: Indica o ID do skin a ser utilizado. Skins serão estudados mais adiante Text: Representa o texto que será exibido ao usuário da aplicação ToolTip: é a dica que será exibida ao usuário quando este posicionar o mouse sobre o controle. 36 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Uso de HotKeys Duas propriedades novas e interessantes, que estão presentes em alguns controles, são AcessKey e AssociatedControlID. Com a primeira definimos uma tecla de atalho para o controle, que no navegador e acionado junto com a tecla ALT. Já com AssociatedControlID podemos definir qual o controle vai receber o foco no caso da combinação de teclas ser acionadas. Este recurso é conhecido como HotKeys. Vamos estudar agora os três principais controles de servidor, que formam um conjunto básico para a criação de qualquer aplicativo. Label Um controle simples, porém poderoso, que nos permite exibir algum texto em uma página Web. Todas suas propriedades podem ser manipuladas no código gerado no servidor. É definido pela a tag ASP:Label e quando executado renderizado em uma tag span: TextBox O textbox é um controle de edição simples. Através da propriedade TextMode podemos utilizá-lo ainda para receber senhas ou mesmo transforma-lo em um controle com múltiplas linhas. Uma novidade é a propriedade AutoCompleteType, que pode receber apenas valores pré-definidos. Ao preencher um segundo controle com o mesmo valor para esta propriedade, o navegador deverá sugerir o preenchimento do valor informado no primeiro campo. È definido pela a tag ASP:TextBox e quando executado renderizado em uma tag input do tipo text ou password ou então textarea, de acordo com a propriedade textmode. Alguns exemplos de codificação de controles, mostram primeiro em tempo de design (ASP) e em seguida em tempo de execução (HTML) . <asp:Label ID="Label1" runat="server" Text="ASP.NET 3.5 Rules!!"></asp:Label> span id="Label1">ASP.NET 3.5 Rules!!</span> 37 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Button O button é um botão de comando básico. Sua principal função é causar um post back para a execução de algum código no servidor. O principal evento é Click, que, obviamente, é disparando quando clicamos no botão. É renderizado em uma tag input do tipo submit. Uma importante propriedade é a PostBackUrl, que indica para qual página será executado o post back. Para exemplificar, o código abaixo lê a um TextBox de um formulário que originou o PostBack: LinkButton O controle linkbutton é uma mistura de botão de comando com HyperLink. Sua aparência é de um Link, seu comportamento e suas propriedades o assemelham a um Button. Não existe propriedade NavigateUrl, o redirecionamento deve ser codificado no post back ou através da propriedade PostBackUrl. Nos bastidores, o LinkButton renderiza uma tag a, cujo atributo Href, ao invés de conter uma URL, dispara uma função Java Script gerada pelo ASP.NET. <asp:TextBox ID="TextBox1" runat="server">Normal</asp:TextBox> <asp:TextBox ID="TextBox2" runat="server" TextMode="Password">Senha</asp:TextBox> <asp:TextBox ID="TextBox3" runat="server" TextMode="MultiLine">MultiLine</asp:TextBox> <input name="TextBox1" type="text" value="Normal" id="TextBox1" /> <input name="TextBox2" type="password" id="TextBox2" /> <textarea name="TextBox3" rows="2" cols="20" id="TextBox3">MultiLine</textarea> <asp:Button ID="Button1" runat="server" Text="Button" /> <input type="submit" name="Button1" value="Button" id="Button1" /> Dim Nome As String = CType(PreviousPage.FindControl("Nome"), _ TextBox).Text <asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton> 38 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br ImageButton Um ImageButton é um botão de comando onde podemos adicionar uma imagem para exibição. Possui todas as funcionalidades do Button, mais a propriedade ImageURL onde definimos a imagem. Em tempo de execução é renderizado como Input do tipo Image. HyperLInk O hyperlink permite criar links de navegação, sua propriedade mais importante é NavagateURL, que é valor para a atribuo HREF. É um controle simples que é renderizado com uma tag a. Seu poder maior esta na possibilidade de, por exemplo, definir a URL dinamicamente no código do servidor. Através de uso de HotKey pode-se ainda facilitar a navegação na pagina. A propriedade text define o texto de exibição, já ImageUrl pode definir uma imagem a ser exibida ao invés do texto. CheckBox O checkbox gera um controle HTML input do tipo checkbox <a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">LinkButton</a> <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="web.gif" /> <input type="image" name="ImageButton1" id="ImageButton1" src="web.gif" /> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="http:\\www.fernandoamaral.com.br">Clique Aqui</asp:HyperLink> <a id="HyperLink1" href="http:\\www.fernandoamaral.com.br">Clique Aqui</a> <asp:CheckBox ID="CheckBox1" runat="server" Text="Lembrar" /> <input id="CheckBox1" type="checkbox" name="CheckBox1" /> 39 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br RadioButton O RadioButton gera um controle HTML input do tipo radio Image O controle Image deve ser utilizado para exibição de Imagens. A imagem a ser exibida deve ser definidaatravés da propriedade ImageUrl. DropDownList e ListBox O DropDownList e ListBox são controles altamente poderoso. Suas propriedades e eventos trazem recursos que só poderiam ser obtidos com muita mão de obra em uma aplicação WEB. A propriedade AutoPostBack, causa um post back automático ao servidor quando um valor é selecionado. Os controles podem ter seus itens adicionados em tempo de design ou de execução, através da propriedade Itens. Também é possível vinculá-lo a uma fonte de dados qualquer, que pode ser um array, um dataset ou mesmo um SqlDataSource, só para citar alguns. Para cada item é possível ler e escrever um texto e um valor, armazenados nas propriedades text e value, respectivamente. Isto é muito útil, por exemplo, para recuperar o código de um item selecionado pelo usuário. O exemplo abaixo adiciona um item a um DropDownList: DropDownList1.Items.Add("Selecione uma opção") <asp:RadioButton ID="RadioButton1" runat="server" Text="Lembrar" /> <input id="RadioButton1" type="radio" name="RadioButton1" value="RadioButton1" /> <asp:Image ID="Image1" runat="server" ImageUrl="web.gif" /> <img id="Image1" src="web.gif" /> <asp:DropDownList ID="DropDownList1" runat="server"> <select name="DropDownList1" id="DropDownList1"> 40 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br DropDownList1.Items.Add("Selecione uma opção"); Para recuperar o valor da propriedade text bem como value basta ler as propriedades específicas: Dim s As String = DropDownList1.SelectedValue Dim t As String = DropDownList1.SelectedItem.Text string s = DropDownList1.SelectedValue; string t = DropDownList1.SelectedItem.Text; O evento SelectedIndexChange é executado quando um item do controle é selecionado. Se a propriedade AutoPostBack estiver marcada como verdadeira, um postback é executado imediatamente, caso contrário o evento só será executado no próximo postback. Existem ainda diversos métodos interessantes, como itens.clear, que limpa os itens, e propriedades, como itens.count, que retorna o número de itens no controle. CheckBoxList e RadioButtonList Os controles CheckBoxList e RadioButtonList em tempo de design são apresentados como um conjunto de controles CheckBox e RadioButton, que podem ter suas propriedades gerenciadas mais facilmente e conectados a uma fonte de dados qualquer. Em tempo de execução, o ASP.NET renderiza cada controle como diversos controles input do tipo checkbox ou radiobutton. No exemplo abaixo o código verifica se um determinado item de um If CheckBoxList1.Items(0).Selected = True Then '' End If if (CheckBoxList1.Items[0].Selected==true) { // } 41 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Calendar O Calendar é um calendário que é renderizado utilizando uma tag table, e na sua forma mais simples tem pelo menos 7 KB de texto. É excelente para exibição e entrada de datas. Possuiu um conjunto poderosíssimo de propriedades, métodos e eventos que permitem praticamente exibi-lo de qualquer forma imaginada. Entre seus eventos mais significativos, temos o SelectionChange, que é disparado quando ocorre uma alteração na seleção do calendário, e VisibleMonthChange, que ocorre quando o mês visível no calendário é alterado. A propriedade SelecteDate nos permite ler a data selecionada. No exemplo abaixo um label exibe a data selecionada pelo usuário: Protected Sub Calendar1_SelectionChanged(ByVal sender As _ Object, ByVal e As System.EventArgs) Handles _ Calendar1.SelectionChanged Lbldata.Text = String.Format("A data selecionada é {0:d}",_ Calendar1.SelectedDate) End Sub protected void Calendar1_SelectionChanged(object sender, EventArgs e) { Lbldata.Text = String.Format("A data selecionada é {0:d}", Calendar1.SelectedDate); } Através das propriedades SelectionMode podemos definir se o usuário poderá selecionar um único dia, uma semana, um mês inteiro ou nada. Caso ele possa selecionar, por exemplo, uma semana, podemos recuperar os dias selecionados através de um laço for each, que percorre a coleção de objetos DateTime da propriedade SelectedDates: Dim s As System.DateTime For Each s In Calendar1.SelectedDates ListBox1.Items.Add(String.Format("Data Selecionada {0:d}", s)) Next 42 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br foreach (System.DateTime s in Calendar1.SelectedDates) { ListBox1.Items.Add(String.Format("Data Selecionada {0:d}", s)); } AdRotator O AdRotator nos permite incluir um banner em nosso site, onde o próprio ASP.NET através de um arquivo de configuração, vai cuidar da rotatividade das exibições de imagens. O segredo todo está em um arquivo de configuração, que pode ser um XML ou mesmo uma tabela de banco de dados. Para testar este controle, crie um arquivo XML dentro do diretório App_Data de sua aplicação (se não existir o diretório, crie-o também), com o seguinte texto: <?xml version="1.0" encoding="utf-8" ?> <Advertisements> <Ad> <ImageUrl>~/imagens/cafezinho.bmp</ImageUrl> <NavigateUrl>http://www.cafezinho.com</NavigateUrl> <AlternateText>Café</AlternateText> <Keyword>Café</Keyword> <Impressions>40</Impressions> </Ad> <Ad> <ImageUrl>~/imagens/deserto.bmp</ImageUrl> <NavigateUrl>http://www.deserto.com</NavigateUrl> <AlternateText>Deserto</AlternateText> <Keyword>Site Deserto</Keyword> <Impressions>20</Impressions> </Ad> </Advertisements> Certifique-se que você tem uma pasta imagens com as imagens informadas. Você pode configurar os parâmetros de acordo com sua preferência: NavigateUrl é a URL para qual o usuário será direcionado quando clicar no banner, AlternateText é o texto a ser exibido no local da imagem. Impressions representa o número de impressões do banner. No exemplo acima, note que o primeiro banner deverá aparecer em dobro. Para vincular o seu AdRotator ao arquivo XML basta informá-lo na propriedade AdvertisementFile. Um arquivo XML é sensível a caracteres maiúsculos e minúsculos. 43 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br View e MultiView Mais uma novidade surgida no ASP.NET 2.0. Provavelmente você já necessitou que parte de sua aplicação ficasse invisível em determinados momentos. Claro que isso não era uma tarefa impossível, mas com os controles MultiView e View isto ficou mais simples. A idéia é: Dentro de um Multiview você agrega um ou mais Views. Em cada um dos Views você coloca controles conforme a necessidade. A partir daí é só determinar qual View estará visível através da propriedade ActiveViewIndex. MultiView1.ActiveViewIndex = 0 MultiView1.ActiveViewIndex = 0; Wizard Continuando com as novidades, o Wizard é um assistente para páginas Web, onde você pode determinar passos (Steps). Em cada Step você tem uma área onde pode colocar seus controles conforme a necessidade. Entre os eventos tempos NextButtonClick, que é disparado sempre que o usuários clicarno botão Next, FinishButtonClick, disparado no encerramento, e CancelButtonClick, disparado ao final. O mais interessante de tudo é que Wizard mantém estado de tudo o que é colocado em seus passos. Isto significa que você pode fazer o processamento dos dados ao final do assistente. O controle é totalmente configurável, desde aparências até texto dos botões. Controles de validação 44 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br O ASP.NET desde sua primeira versão tem integrador alguns controles que permitem validar entradas do usuário, tanto no cliente como no servidor, de forma simples e rápida. A partir da versão 2.0 foi incluía a propriedade ValidationGroup, que permite que agrupemos grupos diferentes de validação em um mesmo WebForm. Na versão anterior isto era um problema, ou fazíamos a validação manualmente ou dividíamos a nossa lógica de negocio em dois formulários diferentes. Na versão 3.5 não houveram novidades em relação aos controles de validação. Os controles de validação são: RequiredFieldValidator: Permite validar se um controle foi preenchido. RangeValidator: Permite verificar se o valor informado esta entre determinado intervalo. RegularExpressionValidator: Permite validar o valor informado com uma expressão regular CompareValidator: Permite comparar dois valores. CustomValidator: Permite que customizemos nossa expressão de validação. Um controle de validação vai exibir uma mensagem caso a validação falhe. Com o controle ValidationSummary podemos agrupar as mensagens de todos os controles em um único local ou numa mesma caixa de dialogo. Um controle de validação tem duas propriedades para exibição de mensagens: Text e ErrorMessage. Se você utilizar um ValidationSummary você pode trabalhar com as duas: A mensagem em ErrorMessage será exibida no ValidationSummay, e text no proprio controle de validação (um * por exemplo). Se você quer garantir que um controle tenha um valor preenchido e seja, por exemplo, um inteiro maior que zero, você terá que usar além de um RangeValidator um RequiredFiledValidador, apenas este último obriga o preenchimento do valor. 45 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Para criar grupos de validação, basta escolher um nome para o grupo e preencher as propriedades ValidationGroup tanto dos controles a serem validados quanto dos controles de validação. Se você quiser causar um post back sem disparar os validadores, basta setar a propriedade CausesValidation do controle para False. Para obrigar o preenchimento de um textbox: Coloque num formulário um controle TextBox, um RequiredFieldValidator e um ValidationSummary e um Button; Configure a propriedade ControlToValidade do RequiredFieldValidator para o TextBox adicionado no furmaulario; Preencha a propriedade text do RequiredFieldValidator para *, e ErrorMessage para Preenchimento Obrigatório ; Configure a propriedade ShowMessageBox do ValidationSummary para true, e ShowSummary para false; Rode a aplicação; Clique no botão sem preencher qualquer informação no textbox. 46 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Por fim, para verificar também no servidor se todas as validações foram feitas, verifique a propriedade isvalid da página. 5. Master Pages É comum em aplicações convencionais ou mesmo Web a necessidades de criarmos partes de conteúdo que serão exibidas em todas ou pelo menos em diversas páginas. No ASP clássico isso era resolvido da seguinte forma: Você desenvolvia o conteúdo separadamente e sua inclusão era feito onde necessário através de uma tag Include. No ASP.NET 1.1 surgiu uma novidade: os chamados Web User Controls, que são arquivos com a extensão ascx, que podiam ser programados na IDE do Visual Studio e adicionados a qualquer Web Form. Trouxe significativas vantagens em relação ao uso 47 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br do include, como o fato da pagina host ter a possibilidade de ler ou alterar valores de controles ou propriedades. Sua grande desvantagem era que não possuía herança visual como já há um longo tempo era possível em aplicações convencionais: O user control em tempo de design eram representados na IDE do VS como um botão cinza. No ASP.NET 2.0 uma das grandes novidades apresentadas e que obviamente continuam disponíveis na versão 3.5 são as Master Pages, que trazem finalmente a herança de conteúdo de forma visual. Uma MasterPage é um arquivo com extensão master. Pode ser criada no IDE do VS no modelo code-behing ou code-inline, assim como um Web Form. Sua estrutura básica também é muito parecida com um Web Form: <%@ Master Language="VB" CodeFile="Master.master.vb" Inherits="Master" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> </asp:contentplaceholder> </div> </form> </body> </html> A principal diferença é a diretiva de compilação @Master, no lugar de @Page. Esta diretiva informa ao ASP.NET durante o processo de compilação que trata-se uma Master Page. Uma página aspx que utiliza uma Master Page é chamada de página de conteúdo (Content Page). Uma página de conteúdo não contem os elementos que formam uma página HTML comum, pois estes serão herdados da Master Page. Numa Master Page, 48 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br as áreas onde uma pagina de conteúdo terão disponível para exibir seu conteúdo são definidas através de controles de servidor contentplaceholder. No código acima você pode ver um controle contentplaceholder criado por padrão na criação da MasterPage. Criando uma Master page Criar uma Master Page no Visual Studio é simples: Na caixa de dialogo Add New Item Selecione Master Page, defina um nome para a página. O VS cria a MasterPage com o nome escolhido. Se você optou pelo modelo code-behind, serão criados dois arquivos: um arquivo master e um vb ou cs, conforme a linguagem escolhida. Se a opção foi code-inline, será criado apenas o arquivo .master. Utilizando uma Mater Page Definir a(s) página(s) de conteúdo é simples e pode ser feito quatro maneiras diferentes: Durante a criação da página, na caixa de dialogo Add New Item, marque a opção Select Master Page 49 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Será exibida a caixa de dialogo Master Page, que exibe as Master Pages disponíveis no projeto: Baste selecionar apágina Master e clicar em Ok. A segunda é através da própria pagina Master, selecionando a opção Add Content Page. Será criada uma página de conteúdo em branco. Você não poderá escolher o nome da página no momento da sua criação. A terceira é de forma manual. Crie um Web Form normalmente, remova todo o HTML gerado, com exceção da diretiva de página. Adicione a diretiva de página o atributo MasterPageFile, que indica que esta é uma página de conteúdo que utiliza a Master Page especificada no atributo. Finalmente, a quarta e última, e em tempo de execução: 50 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Protected Sub Page_PreInit(ByVal sender As Object, ByVal e _ As System.EventArgs) Handles Me.PreInit Page.MasterPageFile = "~/MasterUm.master" End Sub protected void Page_PreInit(object sender, EventArgs e) { Page.MasterPageFile = "~/MasterUm.master"; } Obviamente que esta última forma nos priva dos beneficios da herança visual. Trabalhando com uma Master Page Nesta sessão vamos demonstrar de maneira prática como tirar proveito da utilização de uma Master Page. Crie uma nova aplicação ASP.NET; Crie uma nova Master Page; Defina o layout da Master Page de acordo com a figura abaixo: A defninição de uma pagina Master em tempo de execução deve ser feito no evento PreInit da página. Este não é um curso de Web Design, portanto não perca tempo ou se preocupe com a aparência de suas atividades práticas. 51 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Para os quatro controles da esquerda, que deverão funcionar como HyperLinks, utilize controles de Servidor HyperLinks, defina a propriedade text de cada um como Desentupimento, Hidráulica, Limpeza e Hidrojateamento. A propriedade NavigateUrl de cada um deve ser definida pelo mesmo conteúdo da propriedade text mais a extesão aspx, por exemplo: Desentupimento.aspx. Crie quatro páginas de conteúdo com os nomes especificados nas propriedades NavigateUrl acima, especificando como Master Page a página criada. Defina um conteúdo especifico para cada página de conteúdo, conforme exemplo abaixo: Na área Content da página de conteúdo você pode trabalhar livremente: adicionar controles, eventos etc. 52 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Defina uma das páginas de conteúdo criada como página inicial e rode a aplicação. Navega entre as páginas e veja na prática o funcionamento da aplicação. Acessando a página Master da página de conteúdo Você pode facilmente acessar qualquer controle ou propriedade da página Master, na página de conteúdo, através da propriedade Master. Por exemplo, para ler o conteúdo de um dos HyperLinks da página Master: If Not Page.IsPostBack Then Dim s As String = CType(Master.FindControl _ ("Desentupimento"), HyperLink).Text End If if (!Page.IsPostBack) { string s = (Master.FindControl("Desentupimento") as HyperLink).Text; } 53 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br Também podemos alterar o texto ou mesmo qualquer propriedade do controle na Master Page, pois nossa operação é por referencia: Dim Hyper As HyperLink Hyper = CType(Master.FindControl("Desentupimento"), HyperLink) Hyper.ForeColor = System.Drawing.Color.Red HyperLink Hyper; Hyper = (Master.FindControl("Desentupimento") as HyperLink); Hyper.ForeColor = System.Drawing.Color.Red; Neste exemplo, estamos mudando a cor do HyperLink do conteúdo da página Master para vermelho. Alterando o Título das páginas de conteúdo A página de conteúdo deve conter um atributo title, onde deve ser definido o titulo para exibição da página. Na ausência deste, será exibido o titulo da Master Page. Outra alternativa é definir no código o título para a página: Master.Page.Title = "Titulo definido em tempo de execução" Master.Page.Title = "Titulo definido em tempo de execução"; Trabalhando com conteúdo padrão Outra possibilidade interessante é a de trabalhar com conteúdo padrão. Você pode definir um conteúdo padrão de exibição na área da página de conteúdo, da mesma forma que você define o restante da página. Na página de conteúdo, para exibir o conteúdo padrão, basta clicar em Default to Master Content na Smart Tag do controle de conteúdo. Master Pages aninhadas Alem de tudo o que estudamos, é possível mais. Você pode criar Master Pages aninhadas, em diferentes níveis. O VS 2005 não da suporte em sua IDE para este recurso, portanto você terá que fazer todo o trabalho manualmente. 54 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br 55 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br 6. Themes e Skins A formatação de suas páginas ASP.NET poderão ser feitas de diversas maneiras, entre elas: Uso de arquivos CSS; Formatação diretamente nas pagina. Utilizando o novo recurso de temas, é possível definir um padrão para toda a aplicação sem necessidade de altera qualquer página. As possibilidades são muitas, vamos ver um exemplo prático. Crie uma nova aplicação ASP.NET; Crie um WebForm com os seguintes controles: Crie a pasta App_themes. Esta é uma pasta de sistema do ASP.NET. Para criá-la acesse o menu WebSite, ASP.NET Folder, Themes. Na caixa de dialogo Add New Item exibida em seguida, selecione Skin File, de o nome de Red. Clique sobre o botão direito sobre a pasta Themes e crie um novo Skin, desta vez com o nome Gray. 56 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando Amaral. Todos os direitos reservados. Este documento é protegidos por direitos autorais e outros direitos de propriedade intelectual. www.fernandoamaral.com.br A formatação de controles num Skin é definida usando a própria tag de definição do controle, obviamente que alguns atributos não deverão ser utilizados, como ID ou text. No exemplo abaixo o definição para o Skin Red: <asp:Label runat="server" Font-Names="Arial" ForeColor="Maroon" /> <asp:Button runat="server" Font-Bold="True" ForeColor="Maroon" /> <asp:RadioButton runat="server" Font-Names="Arial" ForeColor="Maroon" /> <asp:CheckBox runat="server" Font-Names="Arial" ForeColor="Maroon" /> Já o skin Gray fica assim: <asp:Label runat="server" Font-Names="Verdana" ForeColor="Gray" /> <asp:Button runat="server" Font-Bold="True" ForeColor="DimGray" /> <asp:RadioButton runat="server" Font-Names="Verdana" ForeColor="Gray" /> <asp:CheckBox runat="server" Font-Names="Verdana" ForeColor="Gray" /> Agora vamos definir que sua página ASP.NET vai utilizar um Theme. Clique sobre o formulário e localize a propriedade Theme, note que todos os temas criados estão
Compartilhar