Sei sulla pagina 1di 212

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.

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;que talvez você não encontre em nenhum lugar: Segue uma seqüência lógica. Você não precisará ficar

Segue uma seqüência lógica. Você não precisará ficar garimpando informações em lugares diferentes;todos os principais temas relacionados ao ASP.NET 3.5; É em português. Porque não um Livro? Este

É em português.ficar garimpando informações em lugares diferentes; Porque não um Livro? Este curso foi criado dentro de

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

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:

serão precedidos pelo ícone da linguagem utilizada: para código em VB para código em C# O

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.

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

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.

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

O ASP.NET foi o primeiro ambiente que permitiu que se desenvolvessem aplicações convencionais ou para

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.

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!

duas linhas de código, e sem escrever uma Tag HTML sequer! Normalmente você não precisa ser

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.

ASP.NET 2.0

Nã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 Controlsdas melhorias do ASP.NET 2.0 em relação ao seu antecessor: Novas ferramentas adiminstrativas Nova IDE do

Novas ferramentas adiminstrativasao seu antecessor: Mais de 50 novos Server Controls Nova IDE do Visual Studio 2005 Site

Nova IDE do Visual Studio 200550 novos Server Controls Novas ferramentas adiminstrativas Site Navigation: Controles que facilitam a navegação em

Site Navigation: Controles que facilitam a navegação em Web Sitesferramentas adiminstrativas Nova IDE do Visual Studio 2005 Master Pages: Agora é possível utilizar herança visual

Master Pages: Agora é possível utilizar herança visual em aplicações Web, o queControles que facilitam a navegação em Web Sites na versão 1.x só era possivel com aplicações

na versão 1.x só era possivel com aplicações Windows Forms.

Themes: Tornam mais facil o gerenciamento do visual de sua aplicaçãoversão 1.x só era possivel com aplicações Windows Forms. Acesso a Dados: O ADO.NET embora extramente

Acesso a Dados: O ADO.NET embora extramente eficiente, eramais facil o gerenciamento do visual de sua aplicação demasiadamente complexo. O Acesso a dados foi

demasiadamente complexo. O Acesso a dados foi reformulado e simplificado.

Snippets: Partes de códigos especificas que podem ser armazenadas paracomplexo. O Acesso a dados foi reformulado e simplificado. utilização futura. 8 ASP.NET 3.5 em VB.NET

utilização futura.

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

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

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

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.

fisicamente separados,

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:

file na caixa de dialogo de criação de um novo Web Form: Este novo modelo é

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.

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

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 classespastas com funções especificas, vamos ver as principais: App_data: Armazena fontes de dados App_Themes: Armazena um

App_data: Armazena fontes de dadosver as principais: App_Code: Para armazenamento de classes App_Themes: Armazena um tema. Estudaremos temas mais

App_Themes: Armazena um tema. Estudaremos temas mais adiante.armazenamento de classes App_data: Armazena fontes de dados App_LocalResources: Armazena arquivos de recursos Arquivos

App_LocalResources: Armazena arquivos de recursosArmazena um tema. Estudaremos temas mais adiante. Arquivos Nesta sessão vamos ver os principais tipos de

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.tipos de arquivos que uma aplicação ASP.NET pode conter: .aspx: arquivo contendo a apresentação de uma

.aspx: arquivo contendo a apresentação de uma página.as configurações da aplicação, formatado com XML. .vb ou .cs: arquivo com código de servidor relacionado

.vb ou .cs: arquivo com código de servidor relacionado a uma página.aspx: arquivo contendo a apresentação de uma página. Global.aspx: Arquivo contendo os eventos globais da

Global.aspx: Arquivo contendo os eventos globais da aplicação.arquivo com código de servidor relacionado a uma página .master: Arquivo contendo uma MasterPage. .ascx: Arquivo

.master: Arquivo contendo uma MasterPage.Arquivo contendo os eventos globais da aplicação. .ascx: Arquivo contendo um WebUserControl .css: Arquivo css

.ascx: Arquivo contendo um WebUserControlda aplicação. .master: Arquivo contendo uma MasterPage. .css: Arquivo css .resx: Arquivo de recursos .sitemap:

.css: Arquivo cssuma MasterPage. .ascx: Arquivo contendo um WebUserControl .resx: Arquivo de recursos .sitemap: Arquivo contendo um

.resx: Arquivo de recursos.ascx: Arquivo contendo um WebUserControl .css: Arquivo css .sitemap: Arquivo contendo um mapa do site .skin:

.sitemap: Arquivo contendo um mapa do siteWebUserControl .css: Arquivo css .resx: Arquivo de recursos .skin: Arquivo contendo um skin 11 ASP.NET 3.5

.skin: Arquivo contendo um skinde recursos .sitemap: Arquivo contendo um mapa do site 11 ASP.NET 3.5 em VB.NET e C#

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

2. Visual Studio 2008: O ambiente e as linguagens

Nesta seção vamos ver os principais compontentes da IDE do VS 2008.

vamos ver os principais compontentes da IDE do VS 2008. A esquerda, por padrão oculta, existe

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 novidades do 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.

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

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.

Lembre-se sempre que o C# diferencia entre caracteres maisculos e minusculos, o VB.NET não.

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

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.

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

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

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

é simples e intuitiva, e funcina em ambas as linguagens este é um comentário válido Dim

este é um comentário válido Dim i as Integer esta também é um comentário válido

este é um comentário válido Dim i as Integer esta também é um comentário válido
este é um comentário válido Dim i as Integer esta também é um comentário válido
Dim i as Integer esta também é um comentário válido //este é um comentário válido int

//este é um comentário válido int x = 3; /* este também é um comentário válido */

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

Você ainda pode criar comentários no VB.NET utilizando Rem.

Você ainda pode criar comentários no VB.NET utilizando Rem.

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:

preenche o esqueleto do documento. Observe o exemplo abaixo: ''' <summary> ''' Função

''' <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

Return z

End Function

=

x + y

Dim z As Integer z Return z End Function = x + y /// <summary> ///

/// <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; = x + y;

z

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:

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

BooleanChar - caractere unicode de 16 bit String - String Byte UInt16 - inteiro de

Char - caractere unicode de 16 bitBoolean String - String Byte UInt16 - inteiro de 16 bit, sem sinal UInt32 - inteiro

String - StringBoolean Char - caractere unicode de 16 bit Byte UInt16 - inteiro de 16 bit, sem

ByteBoolean Char - caractere unicode de 16 bit String - String UInt16 - inteiro de 16

UInt16 - inteiro de 16 bit, sem sinalChar - caractere unicode de 16 bit String - String Byte UInt32 - inteiro de 32

UInt32 - inteiro de 32 bit, sem sinalString - String Byte UInt16 - inteiro de 16 bit, sem sinal UInt64 - inteiro de

UInt64 - inteiro de 64 bit, sem sinalde 16 bit, sem sinal UInt32 - inteiro de 32 bit, sem sinal Int16 Int32 -

Int16de 32 bit, sem sinal UInt64 - inteiro de 64 bit, sem sinal Int32 - inteiro

Int32 - inteiro de 32 bit, com sinalbit, sem sinal UInt64 - inteiro de 64 bit, sem sinal Int16 Int64 - inteiro de

Int64 - inteiro de 64 bit, com sinal64 bit, sem sinal Int16 Int32 - inteiro de 32 bit, com sinal SByte - -

SByte - - inteiro de 8 bit, com sinalde 32 bit, com sinal Int64 - inteiro de 64 bit, com sinal Verdadeiro ou falso

Verdadeiro ou falso

inteiro de 8 bit, sem sinal

inteiro de 16 bit, com sinal

data e horainteiro de 8 bit, sem sinal inteiro de 16 bit, com sinal DateTime número decimal Decimal

DateTime

número decimalsem sinal inteiro de 16 bit, com sinal data e hora DateTime Decimal número de ponto

Decimal

número de ponto flutuante com 64 bitbit, com sinal data e hora DateTime número decimal Decimal Single - número de ponto flutuante

Single - número de ponto flutuante com 32 bitdecimal Decimal número de ponto flutuante com 64 bit Double Um valor nulo em VB.NET é

Double

Um valor nulo em VB.NET é representado por NOTHING, em C# por null.

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#.

O tipo Int32 pode ser representado no VB.NET por Integer e int no C#.

Operadores

VB.NET

C#

And

&

Or

|

XOr

^

Not

!

Is Nothing

== null

<>

!=

&

+

\

/

\=

/=

Mod

%

=

==

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

Variaveis e Constantes

No VB.NET para declarar uma variável usamos a palavra DIM, seguido pelo nome da variável e tipo:

usamos a palavra DIM, seguido pelo nome da variável e tipo: Dim i as Integer A

Dim i as Integer

A sintaxe do C# é semelhante ao do C++:

Dim i as Integer A sintaxe do C# é semelhante ao do C++: int z; Podemos

int z;

Podemos ainda declara diversas variaveis de um mesmo tipo numa unica declaração:

diversas variaveis de um mesmo tipo numa unica declaração: Dim i,j,k as Integer int x, y,

Dim i,j,k as Integer

um mesmo tipo numa unica declaração: Dim i,j,k as Integer int x, y, z; Ou ainda

int x, y, z;

Ou ainda variaveis de diferentes tipos:

int x, y, z; Ou ainda variaveis de diferentes tipos: Dim i,m as Integer, j,k as

Dim i,m as Integer, j,k as Single

de diferentes tipos: Dim i,m as Integer, j,k as Single int i, m; Double j,k; Obviamente

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:

possível ainda incializar a variável na sua declaração: Dim i as Integer = 1 int z

Dim i as Integer = 1

a variável na sua declaração: Dim i as Integer = 1 int z = 1; Para

int z = 1;

Para declarar uma constante utilizamos a declaração Const:

Para declarar uma constante utilizamos a declaração Const: Const x as integer = 1 16 ASP.NET

Const x as integer = 1

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

const int x = 1;

const int x = 1;

Enumeradores

Para declarar um enumerador usamos a declaração Enum

Para declarar um enumerador usamos a declaração Enum Public Enum Semana Domingo Segunda Terça Quarta Quinta

Public Enum Semana Domingo Segunda Terça Quarta Quinta Sexta Sabado

End Enum

Domingo Segunda Terça Quarta Quinta Sexta Sabado End Enum enum Semana { Domingo, Segunda, Terça, Quarta,

enum Semana { Domingo, Segunda, Terça, Quarta, Quinta, Sexta, Sabado };

Você opcionalmente pode inicializar cada menbro, se você não o fizer, o primeiro menbro será inicializado com zero e assim sucessimvamente.

menbro será inicializado com zero e assim sucessimvamente. Enum Semana Domingo = 1 Segunda = 2

Enum Semana Domingo = 1 Segunda = 2 Terça = 3 Quarta = 4 Quinta = 5 Sexta = 6 Sabado = 7

End Enum

= 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 };

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:

uma introdução a parte de sintaxe, veremos apenas arrays: Dim MeuArray(1) As String MeuArray(0) = "Um"

Dim MeuArray(1) As String MeuArray(0) = "Um" MeuArray(1) = "Dois"

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

string [] MeuArray = new string [1]; arr[0] = "Um" ; arr[1] = "Dois" ;

string[] MeuArray = new string[1]; arr[0] = "Um"; arr[1] = "Dois";

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:

faltar. A sintaxe é semelhante as suas linguagens legadas: Dim Nome As String = "ASP.NET" If

Dim Nome As String = "ASP.NET" If Nome = "VB.NET" Then MessageBox.Show("Certo!")

Else

MessageBox.Show("Errado!") End If

) Else MessageBox.Show( "Errado!" ) End If string Nome = "ASP.NET" ; if (Nome ==

string Nome = "ASP.NET"; if (Nome == "C#")

{

 

MessageBox.Show("Certo!");

}

else

{

 

MessageBox.Show("Errado!");

}

Obviamente que a intrução else é opcional.

Outra forma de controle de fluxo conhecido é o Select (VB.NET) ou Switch (C#):

de fluxo conhecido é o Select (VB.NET) ou Switch (C#): Dim Nome As String = "VB.NET"

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

) Case Else MessageBox.Show( "?" ) End Select string Nome = "C#" ; 18 ASP.NET 3.5

string Nome = "C#";

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

switch (Nome){ case "VB.NET":

MessageBox.Show("Certo!"); break; case "C#":

MessageBox.Show("Errado!");

break;

default:

MessageBox.Show("?");

break;

}

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:

O laço for tem a sintaxe semelhante em qualquer linguagem: Dim i As Integer For i

Dim i As Integer For i = 1 To 10 MessageBox.Show(CStr(i))

Next i

For i = 1 To 10 MessageBox.Show( CStr (i)) Next i for ( int 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:

de i++ para i--, e obviamente mudarmos a condição: for ( int i = 0; i

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:

conseguir o mesmo efeito utilizando a palavra chave Step : Dim i As Integer = 0

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:

da avaliação. Vamos ver exemplos do primeiro caso: 19 ASP.NET 3.5 em VB.NET e C# Copyright©2008,

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

Dim i As Integer = 0

Do While i < 5 MessageBox.Show(CStr(i))

Loop

i += 1

While i < 5 MessageBox.Show( CStr (i)) Loop i += 1 int i = 0; while

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.

percorrer um a um os membros de uma coleção qualquer. Dim numbers() = {4, 5, 6,

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

i In numbers MessageBox.Show(Convert.ToString(i)) Next int [] numbers = { 4, 5, 6, 1, 2, 3,

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:

, seguida do método apropriado ao tipo que ser converter: Dim i As Integer, s As

Dim i As Integer, s As String

s = Convert.ToString(i)

Dim i As Integer, s As String s = Convert.ToString(i) int i; string s; s =

int i; string s;

s = Convert.ToString(i);

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

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:

de retorno. Já no C# inicia com o tipo do dado de retorno: Function Somar( x

Function Somar( x As Integer, y As Integer) _ As Integer Dim z As Integer

z

Return z

End Function

= x + y

Dim z As Integer z Return z End Function = x + y int Somar( int

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:

em VB.NET inicia com a palavra chave Sub, e em C# com void: Sub Somar( x

Sub Somar( x As Integer, y As Integer) _ As Integer Dim z As Integer

z

= x + y

End Function

_ As Integer Dim z As Integer z = x + y End Function void Somar(

void Somar(int x, int y)

{

 

int z;

z

= x + y;

}

x, int y) {   int z; z = x + y; } A passagem de

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#.

Visibilidade ou Scopo

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

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;

apenas dentro da classe derivada ou do mesmo projeto; Ao declarar algo sem a visibilidade, por

Ao declarar algo sem a visibilidade, por padrão será private.

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 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

Finally. Entre o Try e o

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

catch.

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.

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

Try My .Computer.FileSystem.CopyFile( "Aspnet.pdf" , "Aspnet.bkp" ) Catch ex As

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

um Erro desconhecido") End Try try { string s = null; } catch (

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.

de um objeto quando o mesmo é utilizado em diversas linhas. With GridView1 .Caption = "GridView"

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

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

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

básica de uma classe de Nome Class1, dentro de um NameSpace Namespace GoodSoftware Public Class ERP

Namespace GoodSoftware Public Class ERP

'

End Class

End Namespace

Public Class ERP ' End Class End Namespace namespace GoodSoftware { public class ERP } {

namespace GoodSoftware

{

public class ERP

}

{

}

//

Você não é obrigado a criar uma classe dentro de um NameSpace.

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

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.

Um construtor de uma classe em VB.NET se define com a palavra chave New, já em C#

deve ter no mome da classe

a palavra chave New, já em C# deve ter no mome da classe Public Sub New()

Public Sub New()

End Sub

em C# deve ter no mome da classe Public Sub New() End Sub public Class1 ()

public Class1 ()

{

}

//

Obviamente que você pode criar um construtor com passagem de parametros.

Já as propriedades são bastante singular em cada linguagem:

as propriedades são bastante singular em cada linguagem: 24 ASP.NET 3.5 em VB.NET e C# Copyright©2008,

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

Public Property Nome() As String

Get

Return Pnome End Get Set(ByVal value As String) Pnome = value End Set End Property

value As String) Pnome = value End Set End Property public String Nome { get {

public String Nome

{

get { return Pnome; } set { Pnome = value; }

}

{ get { return Pnome; } set { Pnome = value ; } } Uma propridade

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.

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:

C#, sempre após a declaração de visibilidade do método: Public Shared Function Somar(ByVal x As Integer,

Public Shared Function Somar(ByVal x As Integer, ByVal y As Integer) _ As Integer Dim z As Integer

z =

Return z

x + y

End Function

Dim z As Integer z = Return z x + y End Function public static int

public static int Somar(int x, int y)

{

 

int z;

z

= x + y;

return z;

}

{   int z; z = x + y; return z; } Lembre-se que um método

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.

A herança de uma classe é definida pela palavra chave inherits em VB.NET e em C#

através da notação : classe pai

em VB.NET e em C# através da notação : classe pai Public Class Class2 Inherits Class1

Public Class Class2 Inherits Class1 End Class

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

class Class2 : Class1 { }

class Class2: Class1

{

}

class Class2 : Class1 { } Para se referir a classe base, utilize MyBase no VB.NET

Para se referir a classe base, utilize MyBase no VB.NET ou base no C#, seguido do nome do método ou propriedade.

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 queprimeira palavra é a notação em VB.NET e a segunda em C#: uma classe não pode

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 filhocomo base, ou seja, nenhuma outra classe poderá herdá-la poderá ser instanciada. Overloads: permite que um

poderá ser instanciada.

Overloads: permite que um método seja sobrecarregado, ou seja, que possaonde apenas uma classe filho poderá ser instanciada. haver métodos com a mesma função, porém com

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 novaporem com assinaturas diferentes estão sobrecarregados. versão do método. Overrides / override: Utilizado para

versão do método.

Overrides / override: Utilizado para sobrescrever uma implementação na classeuma classe filho deve programar uma nova versão do método. pai. MustOverride: Em uma classe marcada

pai.

MustOverride: Em uma classe marcada como MustInherit . Indica que o método 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.

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

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.

implementam a interface System.Collections.IEnumerable. Interface Interface1 Sub Metodo1() Function Metodo2() As

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

Interface1.Metodo2 ' End Function End Class public interface Interface1 { void Metodo1(); int

public interface Interface1

{

void Metodo1(); int Metodo2();

}

public class UsaInterface : Interface1

{

 

public void Metodo1()

{

//

}

public int Metodo2()

{

//

}

}

Como um ambiente de alta produtividade, O VS vai criar automaticamente pra você todas as

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.

O .NET não suporta herança multipla, porém uma classe pode implementar diversas interfaces.

Utilizando o IIS

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;

Na caixa de dialogo New Web Site selecione ASP.NET Web Site; Clique em Browse; Na caixa

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;

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

Clique em Open; De volta a new Web Site, clique em Ok.; 29 ASP.NET 3.5

Clique em Open; De volta a new Web Site, clique em Ok.;

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 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"

<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.

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

Abaixo veremos as principais diretivas existentes no ASP.NET 3.5:

@Control: Diretiva de um User Control (arquivo ascx)veremos as principais diretivas existentes no ASP.NET 3.5: @Master: Diretiva de uma Máster Page @OutPutCache: Diretiva

@Master: Diretiva de uma Máster Page3.5: @Control: Diretiva de um User Control (arquivo ascx) @OutPutCache: Diretiva de controle de cachê @Assembly:

@OutPutCache: Diretiva de controle de cachêControl (arquivo ascx) @Master: Diretiva de uma Máster Page @Assembly: Vincula um assembly a página @Import:

@Assembly: Vincula um assembly a páginaMáster Page @OutPutCache: Diretiva de controle de cachê @Import: Importa um namespace especificado @Page: Diretiva

@Import: Importa um namespace especificadocontrole de cachê @Assembly: Vincula um assembly a página @Page: Diretiva de um Web Form (arquivo

@Page: Diretiva de um Web Form (arquivo aspxa página @Import: Importa um namespace especificado Cada diretiva pode conter n atributos. Os atributos são

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 disparadosVeremos a seguir os principais atributos da diretiva @page: automaticamente ClassName: Especifica o nome da classe

automaticamente

ClassName: Especifica o nome da classe relacionada a páginaos eventos de uma página sejam disparados automaticamente CodeFile: Especifica o arquivo code-behind da página

CodeFile: Especifica o arquivo code-behind da páginaClassName: Especifica o nome da classe relacionada a página Culture: Especifica as configurações de cultura da

Culture: Especifica as configurações de cultura da páginaCodeFile: Especifica o arquivo code-behind da página Debug: Compila a página com os símbolos de depuração

Debug: Compila a página com os símbolos de depuraçãoCulture: Especifica as configurações de cultura da página EnableSessionState: Indica se é permitido armazenamento de

EnableSessionState: Indica se é permitido armazenamento de sessão na páginaDebug: Compila a página com os símbolos de depuração EnableTheming: indica se é permitido o uso

EnableTheming: indica se é permitido o uso de temas na páginaIndica se é permitido armazenamento de sessão na página EnableViewState:Indica se o viewstate será mantido na

EnableViewState:Indica se o viewstate será mantido na páginaindica se é permitido o uso de temas na página Language: Defina a linguagem em que

Language: Defina a linguagem em que a página é codificadase o viewstate será mantido na página SmartNavigation: Habilita os recursos do SmartNavigation na

SmartNavigation: Habilita os recursos do SmartNavigation na páginaLanguage: Defina a linguagem em que a página é codificada Theme: Defini um tema especifico para

Theme: Defini um tema especifico para a paginaHabilita os recursos do SmartNavigation na página ValidateRequest: Indica se a requisição será validada.

ValidateRequest: Indica se a requisição será validada. Quando este atributo estana página Theme: Defini um tema especifico para a pagina com verdadeiro, se existir algum conteúdo

com verdadeiro, se existir algum conteúdo potencialmente perigoso postado na

existir algum conteúdo potencialmente perigoso postado na página, será gerada uma exceção. No arquivo web.config

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.

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

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

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.

de ferramentas, porém podem ser facilmente adicionados. Não estudaremos detalhadamente todos os Server Controls.

Não estudaremos detalhadamente todos os Server Controls.

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.

conhecidos e Server Controls, ou controles de servidor. Você pode criar aplicativos usando apenas controles HTML,

Você pode criar aplicativos usando apenas controles HTML, porém tenha um bom motivo para fazer isto.

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:

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

Text ="Label"></ asp : Label > Você pode gerenciar a apresentação de seu site

Você pode gerenciar a apresentação de seu site manualmente, se preferir.

Ao executarmos a aplicação, a tag ASP:Label é renderizado em uma tag span:

<span id="Label1">Label</span>

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

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:

<input id="Text1" runat="server" type="text" />

runat ="server" type ="text" /> Não estudaremos controles HTML. Acessando eventos e

Não estudaremos controles HTML.

Acessando eventos e propriedades de controles

HTML. Acessando eventos e propriedades de controles Na caixa de propriedades, clicando no botão Events ,

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:

sobre o próprio controle, como o evento Click de um Button: Protected Sub Button1_Click( ByVal sender

Protected Sub Button1_Click(ByVal sender As Object,ByVal e _ As System.EventArgs) Handles Button1.Click

End Sub

e _ As System.EventArgs) Handles Button1.Click End Sub protected void Button1_Click( object sender, EventArgs

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:

no modelo controle.propriedade, como nos exemplos abaixo: Protected Sub Button1_Click( ByVal sender As Object ,

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

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

protected void Button2_Click( object sender, EventArgs e) { Button1.Text = "Gravar" ; Button1.ToolTip =

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 únicoa todos, mas a maioria dos controles. Vamos vê-las agora: BackColor: Cor de fundo do controle

BackColor: Cor de fundo do controleVamos vê-las agora: ID: O nome do controle, deve ser único BorderColor: Cor de Borda do

BorderColor: Cor de Borda do Controledeve ser único BackColor: Cor de fundo do controle BorderStyle: Estilo da borda do Controle BorderWidt:

BorderStyle: Estilo da borda do Controlede fundo do controle BorderColor: Cor de Borda do Controle BorderWidt: Largura da borda do controle

BorderWidt: Largura da borda do controleBorda do Controle BorderStyle: Estilo da borda do Controle CssClass: Indica a classe CSS a ser

CssClass: Indica a classe CSS a ser aplicada no controleborda do Controle BorderWidt: Largura da borda do controle Enabled: indica se o controle esta habilitado

Enabled: indica se o controle esta habilitadoCssClass: Indica a classe CSS a ser aplicada no controle EnableTheming: Indica se é o tema

EnableTheming: Indica se é o tema do controle estará ativono controle Enabled: indica se o controle esta habilitado EnableViewState: Indica se o controle vai armazenar

EnableViewState: Indica se o controle vai armazenar seu estado no viewstate da paginaEnableTheming: Indica se é o tema do controle estará ativo Font: Fonte do controle SkinID: Indica

Font: Fonte do controleo controle vai armazenar seu estado no viewstate da pagina SkinID: Indica o ID do skin

SkinID: Indica o ID do skin a ser utilizado. Skins serão estudados mais adianteseu estado no viewstate da pagina Font: Fonte do controle Text: Representa o texto que será

Text: Representa o texto que será exibido ao usuário da aplicaçãodo skin a ser utilizado. Skins serão estudados mais adiante ToolTip: é a dica que será

ToolTip: é a dica que será exibida ao usuário quando este posicionar o mouse sobre o controle.o texto que será exibido ao usuário da aplicação 35 ASP.NET 3.5 em VB.NET e C#

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

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.

podem ser manipuladas no código gerado no servidor. Alguns exemplos de codificação de controles, mostram

Alguns exemplos de codificação de controles, mostram primeiro em tempo de design (ASP) e em seguida em tempo de execução (HTML) .

É definido pela a tag ASP:Label e quando executado renderizado em uma tag span:

<asp:Label ID="Label1" runat="server" Text="ASP.NET 3.5 Rules!!"></asp:Label>

span id="Label1">ASP.NET 3.5 Rules!!</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.

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

<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>

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.

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

<input type="submit" name="Button1" value="Button" id="Button1" />

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:

lê a um TextBox de um formulário que originou o PostBack: Dim Nome As String =

Dim Nome As String = CType(PreviousPage.FindControl("Nome"), _ TextBox).Text

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.

<asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>

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.

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

<a

id="LinkButton1"

href="javascript:

doPostBack('LinkButton1','')">LinkButton</a>

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.

<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="web.gif" />

<input type="image" name="ImageButton1" id="ImageButton1" src="web.gif" />

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.

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="Clique">http:\\www.fernandoamaral.com.br">Clique Aqui</asp:HyperLink>

<a id="HyperLink1" href="Clique">http:\\www.fernandoamaral.com.br">Clique Aqui</a>

CheckBox

O checkbox gera um controle HTML input do tipo checkbox

<asp:CheckBox ID="CheckBox1" runat="server" Text="Lembrar" />

RadioButton

O RadioButton gera um controle HTML input do tipo radio

<asp:RadioButton ID="RadioButton1" runat="server" Text="Lembrar" />

<input id="RadioButton1" type="radio" name="RadioButton1" value="RadioButton1" />

Image

O controle Image deve ser utilizado para exibição de Imagens. A imagem a ser exibida

deve ser definida através da propriedade ImageUrl.

<asp:Image ID="Image1" runat="server" ImageUrl="web.gif" />

<img id="Image1" src="web.gif" />

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.

<asp:DropDownList ID="DropDownList1" runat="server">

<select name="DropDownList1" id="DropDownList1">

O exemplo abaixo adiciona um item a um DropDownList:

O exemplo abaixo adiciona um item a um DropDownList: DropDownList1.Items.Add( "Selecione uma opção" )

DropDownList1.Items.Add("Selecione uma opção")

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

DropDownList1.Items.Add( "Selecione uma opção" );

DropDownList1.Items.Add("Selecione uma opção");

Para recuperar o valor da propriedade text bem como value basta ler as propriedades específicas:

text bem como value basta ler as propriedades específicas: Dim s As String = DropDownList1.SelectedValue Dim

Dim s As String = DropDownList1.SelectedValue

Dim t As String = DropDownList1.SelectedItem.Text

Dim t As String = DropDownList1.SelectedItem.Text string s = DropDownList1.SelectedValue; string t =

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

abaixo o código verifica se um determinado item de um If CheckBoxList1.Items(0).Selected = True Then ''

If CheckBoxList1.Items(0).Selected = True Then '' End If

= True Then '' End If if (CheckBoxList1.Items[0].Selected== true ) { // }

if (CheckBoxList1.Items[0].Selected==true)

{

//

}

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

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:

abaixo um label exibe a data selecionada pelo usuário: Protected Sub Calendar1_SelectionChanged( ByVal sender As

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

é {0:d}" ,_ Calendar1.SelectedDate) End Sub protected void Calendar1_SelectionChanged( object sender,

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:

coleção de objetos DateTime da propriedade SelectedDates: Dim s As System.DateTime For Each s In

Dim s As System.DateTime For Each s In Calendar1.SelectedDates ListBox1.Items.Add(String.Format("Data Selecionada {0:d}", s))

Next

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

foreach (System. DateTime s in Calendar1.SelectedDates) { ListBox1.Items.Add( String .Format( "Data

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.

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.

estará visível através da propriedade ActiveViewIndex. MultiView1.ActiveViewIndex = 0 MultiView1.ActiveViewIndex =

MultiView1.ActiveViewIndex = 0

propriedade ActiveViewIndex. MultiView1.ActiveViewIndex = 0 MultiView1.ActiveViewIndex = 0; Wizard Continuando com as

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 clicar no 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

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

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.controles de validação. Os controles de validação são: RangeValidator: Permite verificar se o valor informado esta

RangeValidator: Permite verificar se o valor informado esta entre determinadoPermite validar se um controle foi preenchido. intervalo. RegularExpressionValidator: Permite validar o

intervalo.

RegularExpressionValidator: Permite validar o valor informado com umase o valor informado esta entre determinado intervalo. expressão regular CompareValidator: Permite comparar dois

expressão regular

CompareValidator: Permite comparar dois valores.Permite validar o valor informado com uma expressão regular CustomValidator: Permite que customizemos nossa expressão

CustomValidator: Permite que customizemos nossa expressão de validação.regular CompareValidator: Permite comparar dois valores. Um controle de validação vai exibir uma mensagem caso a

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.

controles em um único local ou numa mesma caixa de dialogo. Se você quer garantir que

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.

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).

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

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.

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

Por fim, para verificar também no servidor se todas as validações foram feitas, verifique a

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

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

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"

<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,

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

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

de dialogo Add New Item, marque a opção Select Master Page 48 ASP.NET 3.5 em VB.NET

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

Será exibida a caixa de dialogo Master Page, que exibe as Master Pages disponíveis no

projeto:

Page, que exibe as Master Pages disponíveis no projeto: Baste selecionar a página Master e clicar

Baste selecionar a pá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:

Finalmente, a quarta e última, e em tempo de execução: 49 ASP.NET 3.5 em VB.NET e

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

Protected Sub Page_PreInit(ByVal sender As Object, ByVal e _ As System.EventArgs) Handles Me.PreInit Page.MasterPageFile = "~/MasterUm.master" End Sub

Page.MasterPageFile = "~/MasterUm.master" End Sub protected void Page_PreInit( object sender, EventArgs e)

protected void Page_PreInit(object sender, EventArgs e)

{

Page.MasterPageFile = "~/MasterUm.master";

}

{ Page.MasterPageFile = "~/MasterUm.master" ; } A defninição de uma pagina Master em tempo de execução

A defninição de uma pagina Master em tempo de execução deve ser feito no evento PreInit da página.

Obviamente que esta última forma nos priva dos beneficios da herança visual.

Trabalhando com uma Master Page

da herança visual. Trabalhando com uma Master Page Este não é um curso de Web Design,

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.

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:

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

Para os quatro controles da esquerda, que deverão funcionar como HyperLinks, utilize controles de Servidor

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:

para cada página de conteúdo, conforme exemplo abaixo: Na área Content da página de conteúdo você

Na área Content da página de conteúdo você pode trabalhar livremente:

adicionar controles, eventos etc.

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

Defina uma das páginas de conteúdo criada como página inicial e rode a aplicação. Navega

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:

para ler o conteúdo de um dos HyperLinks da página Master: If Not Page.IsPostBack Then Dim

If Not Page.IsPostBack Then Dim s As String = CType(Master.FindControl _ ("Desentupimento"), HyperLink).Text

End If

_ ( "Desentupimento" ), HyperLink).Text End If if (!Page.IsPostBack) { string s =

if (!Page.IsPostBack)

{

string s = (Master.FindControl("Desentupimento") as HyperLink).Text;

}

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

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 =

Dim Hyper As HyperLink Hyper = CType(Master.FindControl("Desentupimento"), HyperLink) Hyper.ForeColor = System.Drawing.Color.Red

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:

alternativa é definir no código o título para a página: Master.Page.Title = "Titulo definido em tempo

Master.Page.Title = "Titulo definido em tempo de execução"

= "Titulo definido em tempo de execução" Master.Page.Title = "Titulo definido em tempo de

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.

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

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

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;poderão ser feitas de diversas maneiras, entre elas: Formatação diretamente nas pagina. Utilizando o novo

Formatação diretamente nas pagina.de diversas maneiras, entre elas: Uso de arquivos CSS; Utilizando o novo recurso de temas, é

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:

ASP.NET; Crie um WebForm com os seguintes controles: Crie a pasta App_themes. Esta é uma pasta

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.

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

A formatação de controles num Skin é definida usando a própria tag de definição do

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 disponíveis:

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

Escolha o tema Red. Nos bastidores o tema escolhido é adicionado em uma diretiva da

Escolha o tema Red. Nos bastidores o tema escolhido é adicionado em uma diretiva da página:

<%

@ Page Language="VB" Theme="RED" AutoEventWireup="false"

CodeFile="Default.aspx.vb" Inherits="_Default"

%>

 

Rode a aplicação e observe o resultado.

57

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

Altere o tema para Gray e rode a aplicação novamente. Definindo o tema dinamicamente Você

Altere o tema para Gray e rode a aplicação novamente.

Altere o tema para Gray e rode a aplicação novamente. Definindo o tema dinamicamente Você pode

Definindo o tema dinamicamente

Você pode definir o tema durante a execução do programa, através de uma escolha do usuário, por exemplo. Para isto basta alterar a propriedade Theme da página:

58

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

Page.Theme = "red"

Page.Theme = "red"

Page.Theme = "red" Page.Theme = "Red" ; A alteração de tema dinamicamente deve ser feita no

Page.Theme = "Red";

Page.Theme = "red" Page.Theme = "Red" ; A alteração de tema dinamicamente deve ser feita no

A alteração de tema dinamicamente deve ser feita no evento PreInit da

página.

Definindo um tema para toda a aplicação

Você também pode definir um tema no arquivo de configuração da aplicação, no nó

system.web. Esta configuração será aplicada automaticamente para todas as páginas da

aplicação:

<pages theme="Red" >

da aplicação: < pages theme ="Red" > O nó pages já deve existir no seu arquivo

O nó pages já deve existir no seu arquivo de configuração, localize-o ao invés

de criar um novo nó.

Vale lembrar que uma configuração de página sobrescreve a de aplicação. Portanto se

em determinada página você não quiser usar o tema padrão da aplicação, basta definir o

tema desejado na página.

Apresentação diferenciada

Se você precisar dar uma apresentação diferente para um determinado controle que já

esta definido no arquivo skin, você pode criar um nova definição deste controle

adicionando a ele um SkinId. Para exemplificar, vamos alterar o arquivo skin Red de

maneira que o titulo da página, Cadastro, seja exibido maior e de outra cor.

Primeiramente alteramos nosso arquivo Red:

<asp:Label runat="server" Font-Names="Arial" ForeColor="Maroon" /> <asp:Label SkinId="Titulo" runat="server" Font-Names="Arial" Font- Size="X-Large" ForeColor="Black" /> <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" />

Observe que foi adicionada uma nova tag asp:label, com SkinID como Titulo. Agora

basta na página, alterar a propriedade SkinID do controle para Titulo:

59

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

Certifique-se que sua página esta utilizando o Skin Red. Rode a aplicação: 60 ASP.NET 3.5

Certifique-se que sua página esta utilizando o Skin Red. Rode a aplicação:

sua página esta utilizando o Skin Red. Rode a aplicação: 60 ASP.NET 3.5 em VB.NET e

60

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

7. Navigation

Surgido no ASP.NET 2.0, são uma série de controles para auxiliar a navegação do usuário. Estes controles podem ser encontrados no grupo Navigation da barra de ferramentas do VS 2008, são eles:

SiteMapPathNavigation da barra de ferramentas do VS 2008, são eles: Menu TreeView SiteMapPath O controle SiteMapPath

Menuda barra de ferramentas do VS 2008, são eles: SiteMapPath TreeView SiteMapPath O controle SiteMapPath permite

TreeViewbarra de ferramentas do VS 2008, são eles: SiteMapPath Menu SiteMapPath O controle SiteMapPath permite exibir

SiteMapPath

O controle SiteMapPath permite exibir um mapa de navegação para o usuário, numa estrutura hierárquica a partir da página raiz da aplicação. Para demonstrar as funcionalidades do controle, vamos criar um suposto aplicativo de comércio eletrônico, com a seguinte estrutura:

de comércio eletrônico, com a seguinte estrutura: 61 ASP.NET 3.5 em VB.NET e C# Copyright©2008, Fernando

61

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 funcionalidade do controle SiteMapPath esta baseada em arquivo xml denominado web.sitemap, que pode ser facilmente criado pela opção Add New Item. Sua estrutura básica é a seguinte:

<?xml version="1.0" encoding="utf-8" ?>

>

<siteMapNode url="" title="" description=""> <siteMapNode url="" title="" description="" /> <siteMapNode url="" title="" description="" /> </siteMapNode> </siteMap>

Trata-se de um arquivo XML padrão. O nó raiz é denominado SiteMap. A estrutura do site deve ser representada por nós SiteMapNode, onde estes devem ser organizados de forma a representar a estrutura hierárquica do site. O atributo Url define o endereço da página, Title o titulo a ser exibido no controle, e descrição o Tool Tip que também será exibido no controle.

Importante ressaltar que o arquivo deve ser montado de forma hierárquica, ou seja, uma página deve ser adicionada dentro do nó siteMapNode da página hierarquicamente superior.

Para nossa aplicação proposta anteriormente, montei o seguinte arquivo:

<?xml version="1.0" encoding="utf-8" ?>

>

<siteMapNode url="Index.aspx" title="Página Principal" description="Página Principal da Site"> <siteMapNode url="~/Informatica/Informatica.aspx" title="Departamento de Informática" description="Produtos de Informática"> <siteMapNode url="~/Informatica/Impressoras/Impressoras.aspx" title="Impressoras" description="VImpressoras Diversas" /> <siteMapNode url="~/Informatica/Monitores/Convencionais/Convencionais.aspx" title="Monitores Convencionais" description="Monitores Convencionais" />

<siteMapNode url="~/Informatica/Monitores/LCD/LCD.aspx" title="Monitores LCD" description="Monitores LCD" /> </siteMapNode> </siteMapNode> </siteMap>

62

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

Observe que as impressoras estão dentro do nó do departamento de informática. Se não

criarmos o arquivo desta forma, da página do departamento de informática poderemos

navegar apenas para a página inicial.

Observe o sistema rodando:

apenas para a página inicial. Observe o sistema rodando: Você não precisa configurar nenhuma propriedade do
apenas para a página inicial. Observe o sistema rodando: Você não precisa configurar nenhuma propriedade do

Você não precisa configurar nenhuma propriedade do controle SiteMapPath para o mesmo funcionar, desde que o arquivo Web.sitemapth esteja correto. Bbasta adicionar o controle ao Web Form.

Analisando a janela de propriedades do SiteMapPath, você pode descobrir algumas

coisas interessantes: Por exemplo, a propriedade Path Separator permite definir um

caractere de separação entre os caminhos.

Através da Smart Tag você também pode definir uma auto-formatação para seu

controle.

Menu

O controle Menu permite adicionar as funcionalidades de um menu em uma aplicação

Web. Seu uso é simples: após adicionar um controle a um Web Form, basta abrir o

63

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

editor de itens do menu através da Smart Tag do controle ou mesmo da janela de propriedades, onde é possível gerenciar o conteúdo do Menu.

onde é possível gerenciar o conteúdo do Menu. O funcionalidades: editor de menu possui uma pequena

O

funcionalidades:

editor

de

menu possui uma pequena barra de ferramentas com as seguintes

Add a root item:possui uma pequena barra de ferramentas com as seguintes Adiciona um novo item no mesmo nível

Adiciona um novo item no mesmo nível da seleção atualbarra de ferramentas com as seguintes Add a root item: Add a child item: Adiciona um

Add a child item:Adiciona um novo item no mesmo nível da seleção atual Adiciona um novo item um nível

item no mesmo nível da seleção atual Add a child item: Adiciona um novo item um

Adiciona um novo item um nível acima da seleção atual

Remove an iten:Adiciona um novo item um nível acima da seleção atual Remove o item selecionado. Move the

Remove o item selecionado.novo item um nível acima da seleção atual Remove an iten: Move the item up amongst

Move the item up amongst its siblings:seleção atual Remove an iten: Remove o item selecionado. Sobe o item verticamente; of its Move

o item selecionado. Move the item up amongst its siblings: Sobe o item verticamente; of its

Sobe o item verticamente;

the item up amongst its siblings: Sobe o item verticamente; of its Move the item down

of

its

Move the item down amongst its siblings: Desce o item verticalmente;up amongst its siblings: Sobe o item verticamente; of its sibling Make horizontalmente; the selected item

sibling

amongst its siblings: Desce o item verticalmente; sibling Make horizontalmente; the selected item a parent: Desce

amongst its siblings: Desce o item verticalmente; sibling Make horizontalmente; the selected item a parent: Desce

Make

horizontalmente;

the

selected

item

a

parent:

Desce

o

item

Make the selected item a sibling of its parent:horizontalmente; the selected item a parent: Desce o item Sobe o item horizontalmente. Cada item possui

Desce o item Make the selected item a sibling of its parent: Sobe o item horizontalmente.

Sobe o item horizontalmente.

Cada item possui diversas propriedades configuráveis, as mais significativas são text, que indica o texto a ser exibido no item, e navigateUrl: A URL de destino caso o usuário clique no item;

64

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

Adicionar os itens e configurar suas propriedades é tudo o que você precisa para tornar o controle funcional, mas isso não é tudo: Na smart tag do controle outra opção disponível é auto-format: Você pode dar um visual agradável ao seu menu sem muito trabalho.

Entre as propriedades do menu, orientation define o comportamento do menu:

Horizontal ou Vertical.

Ligando seu Menu a um arquivo Web.sitemap

Se você tem um arquivo Web.sitemap em sua aplicação, vimos que o controle SiteMapPath passa a utilizá-lo automaticamente, sem qualquer configuração ou alteração de propriedade.

Um controle Menu também pode fazer uso do arquivo, porém você terá que ligá-los manualmente. É extremante simples:

Adicione um controle SiteMapDataSource ao seu Web Form (disponível na Guia data da caixa de Ferramentas) No Menu, altera a propriedade DataSourceID para o controle SiteMapDataSource adicionado. Pronto! A partir de agora os itens de seu menu serão mapeados a partir do arquivo Web.sitemap que você criou anteriormente.

65

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

TreeView O terceiro controle que estudaremos no capitulo é o TreeView. Trata-se de um poderoso

TreeView

O terceiro controle que estudaremos no capitulo é o TreeView. Trata-se de um poderoso controle que nos permite exibir estruturas navegáveis e aninhadas. Sua configuração básica é simples, ao mesmo tempo em que prove uma grande quantidade de propriedades e alguns eventos que tornam o controle altamente poderoso e flexível.

Para usar o controle basta adicioná-lo ao Web Form. Através da smart tag do controle podemos acessar um editor de itens idêntico ao do controle Menu:

66

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

Ainda na smart tag podemos definir um modelo de auto-formatação: A propriedade Show Lines também

Ainda na smart tag podemos definir um modelo de auto-formatação:

smart tag podemos definir um modelo de auto-formatação: A propriedade Show Lines também presente na smart

A propriedade Show Lines também presente na smart tag do controle permite que sejam exibidas linhas entre o nó raiz e seus nós aninhados:

67

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

Definidas as propriedades de cada Item, o controle esta pronto para ser utilizado. Ligando seu

Definidas as propriedades de cada Item, o controle esta pronto para ser utilizado.

Ligando seu TreeView a um arquivo Web.sitemap

Um controle TreeView também pode fazer uso do arquivo Web.sitemap, o processo é o mesmo do Menu:

Adicione um controle SiteMapDataSource ao seu Web Form (disponível na Guia data da caixa de Ferramentas)

No Menu, altera a propriedade DataSourceID para o controle SiteMapDataSource adicionado.

68

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

Seleção Múltipla A propriedade ShowCheckBoxes permite que cada nó seja transformado em caixas de verificação,

Seleção Múltipla

A propriedade ShowCheckBoxes permite que cada nó seja transformado em caixas de verificação, de forma que você poderá selecionar mais de um nó simultaneamente. Os valore possíveis para esta propriedade são:

Root: Apenas os nós da raiz serão exibidos como caixas de verificação.Os valore possíveis para esta propriedade são: Parent: Apenas os nós pais serão exibidos como caixas

Parent: Apenas os nós pais serão exibidos como caixas de verificação.nós da raiz serão exibidos como caixas de verificação. Leaf: Apenas os nós folhas serão exibidos

Leaf: Apenas os nós folhas serão exibidos como caixas de verificação.os nós pais serão exibidos como caixas de verificação. All: Todos os nós serão exibidos como

All: Todos os nós serão exibidos como caixas de verificação.os nós folhas serão exibidos como caixas de verificação. 69 ASP.NET 3.5 em VB.NET e C#

69

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

Verificar programaticamente quais nós estão marcados é relativamente simples. Tudo a fazer é percorrer a

Verificar programaticamente quais nós estão marcados é relativamente simples. Tudo a fazer é percorrer a lista de nós do controle usando um laço for next. No exemplo abaixo o código percorre a relação de nós e adiciona o texto do nó a um listbox:

a relação de nós e adiciona o texto do nó a um listbox: Dim node As

Dim node As TreeNode For Each node In TreeView1.CheckedNodes

ListBox1.Items.Add(node.Text)

Next

ListBox1.Items.Add(node.Text) Next foreach ( TreeNode node in TreeView1.CheckedNodes) {

foreach (TreeNode node in TreeView1.CheckedNodes)

{

ListBox1.Items.Add(node.Text);

}

Gerenciando o controle em tempo de execução

Você também pode adicionar um nó programaticamente. No exemplo abaixo o nó é adicionado na raiz do TreeView:

No exemplo abaixo o nó é adicionado na raiz do TreeView: Dim node As New TreeNode

Dim node As New TreeNode node.Text = "Móveis para escritório" node.NavigateUrl = "moveis.aspx"

TreeView1.Nodes.Add(node)

= "moveis.aspx" TreeView1.Nodes.Add(node) TreeNode node; node = new TreeNode (); 70 ASP.NET 3.5 em

TreeNode node; node = new TreeNode();

70

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

node.Text = "Móveis para escritório"; node.NavigateUrl = "moveis.aspx";

TreeView1.Nodes.Add(node);

Adicionar um nó aninhado a outro é um pouco mais complicado. Primeiro você deve localizar o nó pai utilizando o método FindNode, que recebe o caminho (path) do nó. Então basta adicionar um novo nó a sua coleção de nós filhos:

basta adicionar um novo nó a sua coleção de nós filhos: Dim Atual As TreeNode =

Dim Atual As TreeNode = _ TreeView1.FindNode("PáginaPrincipal/Departamento de Informática") Dim Novo As New TreeNode Novo.Text = "Móveis para escritório" Novo.NavigateUrl = "moveis.aspx" Atual.ChildNodes.Add(Novo)

= "moveis.aspx" Atual.ChildNodes.Add(Novo) TreeNode Atual = TreeView1.FindNode (

TreeNode Atual = TreeView1.FindNode ("PáginaPrincipal/Departamento de Informática"); TreeNode Novo = new TreeNode(); Novo.Text = "Móveis para escritório"; Novo.NavigateUrl = "moveis.aspx"; Atual.ChildNodes.Add(Novo);

Na imagem abaixo você pode ver o resultado:

Na imagem abaixo você pode ver o resultado: Para remover nós temos o método Remove. Finalmente,

Para remover nós temos o método Remove.

Finalmente, podemos recolher um TreeView em tempo de execução:

71

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

TreeView1.CollapseAll

TreeView1.CollapseAll

TreeView1.CollapseAll TreeView1.CollapseAll(); Ou mesmo expandir: TreeView1.ExpandAll; TreeView1.ExpandAll(); 72 ASP.NET

TreeView1.CollapseAll();

Ou mesmo expandir:

TreeView1.CollapseAll(); Ou mesmo expandir: TreeView1.ExpandAll; TreeView1.ExpandAll(); 72 ASP.NET 3.5

TreeView1.ExpandAll;

Ou mesmo expandir: TreeView1.ExpandAll; TreeView1.ExpandAll(); 72 ASP.NET 3.5 em VB.NET e C#

TreeView1.ExpandAll();

72

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

8. WebParts

WebParts não é um conceito novo, mas que surgiu a partir do ASP.NET 2.0 de forma fácil e poderosa.

WebParts nos permite criar páginas com conteúdo gerenciável pelo usuário, onde esse pode arrastar controles, mudar aparências, ocultar o que não for preciso ou exibir novamente, enfim, traz para o ambiente Web uma interatividade completa entre o usuário e a aplicação, tudo isto com persistência.

Modos

Uma página ASP.NET utilizando WebParts pode estar em diferentes modos. Cada modo diz respeito ao comportamento do conteúdo da página e como o usuário poderá interagir com este conteúdo. Os quatro modos possíveis são:

Normal: A página esta em modo normal, não permite quase nenhuma interatividade com o usuário;com este conteúdo. Os quatro modos possíveis são: Catalog: Exibe a relação de seções da página,

Catalog: Exibe a relação de seções da página, bem como permite ao usuário indicar em qual seção determinado item deverá permanecer. Permite restaurar controles que foram fechados.não permite quase nenhuma interatividade com o usuário; Design: Permite fazer o gerenciamento de zonas em

Design: Permite fazer o gerenciamento de zonas em uma página;permanecer. Permite restaurar controles que foram fechados. Edit: Permite editar zonas de uma página WebPartManager O

Edit: Permite editar zonas de uma páginaPermite fazer o gerenciamento de zonas em uma página; WebPartManager O WebPartManager é um controle disponível

WebPartManager

O WebPartManager é um controle disponível na guia WebParts e é o responsável por

todo o gerenciamento do conteúdo e de seu estado. É o principal controle e é obrigatório quanto trabalhamos com WebParts.

O gerenciamento de estado e conteúdo do WebPartManager é feito utilizando um banco

de dados do SQL Server 2005, de nome ASPNETDB.MDF, que pode ser encontrando

dentro da pasta App_Data.

73

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

WebPartZone

Outro controle importantíssimo e essencial é o WebPartZone. Através deste podemos definir as zonas onde serão agrupados o conteúdo da página. Este controle é um container para controles comuns, que de forma declarativa devem estar dentro da tag ZoneTemplate.

Utilizando WebParts

Crie uma nova aplicação ASP.NET; Coloque sobre o Web Form criado um controle WebPartManager; Coloque sobre o Web Form criado um controle WebPartZone; Através da Smart Tag escolha uma das opções de auto-formatação; Arraste para dentro do WebPartZone criado dois controles textbox; Rode a aplicação

Com esta simplicidade nossa aplicação já contem alguma interatividade. Observe que cada controle dentro da WebPartZone pode ser minimizado ou fechando, através da seta a direita do controle:

ou fechando, através da seta a direita do controle: 74 ASP.NET 3.5 em VB.NET e C#

74

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

Caso não apareça em sua aplicação o menu, ou mesmo se você não consegue alterar

Caso não apareça em sua aplicação o menu, ou mesmo se você não consegue alterar o modo de sua página, basta você autenticar o usuário que esta acessando a página, ou seja, não permitir acesso anônimo. A maneira mais simples de faz isto é utilizando autenticação integrada do Windows.

faz isto é utilizando autenticação integrada do Windows. Se você fechar um controle, não conseguirá mais

Se você fechar um controle, não conseguirá mais restaurá-lo, mesmo que reinicie a aplicação. Isto porque o WebPartManager mantém o estado da aplicação. Na próxima seção veremos que no modo Catalog podemos trazer os controles fechados de volta ao formulário.

Observe que no exemplo acima os controles possuem um texto personalizado, Primeiro

e Segundo. Isto pode ser feito através do atributo Title de cada controle contido dentro

da Zone Template. Isto deve ser feito de forma declarativa, pois esta não é uma

propriedade do controle:

<ZoneTemplate> <asp:TextBox Title="Primeiro" ID="TextBox1" runat="server"></asp:TextBox> <asp:TextBox Title="Segundo" ID="TextBox2" runat="server"></asp:TextBox> </ZoneTemplate>

Você também pode personalizar os textos do Menu de controle através das propriedades

CloseVerb e MinimizeVerb, procurando pelo atributo Text. Outras mensagens e rótulos

que surgirão mais adiante poderão também ser personalizadas, basta procurar a

propriedade equivalente.

Modo Catalog

Como dissemos o modo padrão de uma página é o Normal. Vamos ver agora como

colocar uma página em modo Catalog, e quais as funcionalidades deste modo. Porém

antes vamos criar mais duas zonas, para isto adicione mais dois novos controles

WebPartZone ao formulário. Dentro do primeiro adicione dois controles Button, e no

segundo dois controles CheckBox. Adicione um terceiro botão, alterando a propriedade

text para Catalog, porém não o coloque dentro de nenhuma zona.

Para que seja possível colocar a página em modo catalogo você deve adicionar um

controle CatalogZone. De ao mesmo uma auto formatação. O Controle CatalogZone é

um container para Catálogos de Página. Coloque um controle PageCatalogPart dentro

do CatalogZone.

75

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

De um duplo clique sobre o botão Catalog, no manipulador de evento criado adicione o seguinte código:

no manipulador de evento criado adicione o seguinte código: Dim mgr As WebPartManager mgr =

Dim mgr As WebPartManager mgr = WebPartManager.GetCurrentWebPartManager(Page) mgr.DisplayMode = mgr.SupportedDisplayModes.Item("Catalog")

= mgr.SupportedDisplayModes.Item( "Catalog" ) WebPartManager mgr; mgr = WebPartManager

WebPartManager mgr; mgr = WebPartManager.GetCurrentWebPartManager(Page); mgr.DisplayMode = mgr.SupportedDisplayModes["Catalog"];

O código acima declara um tipo WebPartManager e recebe o gerenciador da página por referencia, em seguida altera seu modo para Catalog. Rode a aplicação e a coloque no modo Catalog. Neste modo você pode:

Restaurar um controle fechado. Note que através das zonas listadas no DropDownList Add to você pode inclusive restaurar o controle em outra zona:

76

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

Arrastar controles entre as zonas. Para isto basta clicar no titulo do controle e arrastá-lo

Arrastar controles entre as zonas. Para isto basta clicar no titulo do controle e arrastá-lo até a posição desejada:

77

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

Você pode ainda querer voltar a página ao modo normal. Para isto adicione um novo

Você pode ainda querer voltar a página ao modo normal. Para isto adicione um novo

botão externo a qualquer zona, coloque o titulo Normal e adicione o seguinte código:

zona, coloque o titulo Normal e adicione o seguinte código: Dim mgr As WebPartManager mgr =

Dim mgr As WebPartManager mgr = WebPartManager.GetCurrentWebPartManager(Page) mgr.DisplayMode = mgr.SupportedDisplayModes.Item("Browse")

= mgr.SupportedDisplayModes.Item( "Browse" ) WebPartManager mgr; mgr = WebPartManager

WebPartManager mgr; mgr = WebPartManager.GetCurrentWebPartManager(Page); mgr.DisplayMode = mgr.SupportedDisplayModes["Browse"];

= mgr.SupportedDisplayModes[ "Browse" ]; As alterações que o usuário faz nas zonas são

As alterações que o usuário faz nas zonas são persistentes, voltar ao modo normal não irá desfazê-las.

Modo Design

Neste modo o usuário pode, alem de minimizar e fechar um controle, arrastá-los de uma

zona para outra ou mesmo ordená-los, tarefas que são possíveis também no modo

78

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

Catalog, porém sem exibir o controle CatalogZone e sem possibilidade de mostrar um controle oculto.

Veja abaixo um exemplo de como colocar a página em modo Design:

abaixo um exemplo de como colocar a página em modo Design: Dim mgr As WebPartManager mgr

Dim mgr As WebPartManager mgr = WebPartManager.GetCurrentWebPartManager(Page) mgr.DisplayMode = mgr.SupportedDisplayModes.Item("Design")

= mgr.SupportedDisplayModes.Item( "Design" ) WebPartManager mgr; mgr = WebPartManager

WebPartManager mgr; mgr = WebPartManager.GetCurrentWebPartManager(Page); mgr.DisplayMode = mgr.SupportedDisplayModes["Browse"];

Modo Edit

O modo mais complexo e rico em funcionalidades é o modo de Edição. Através dele o

usuário final poderá personalizar inúmeros aspectos dos controles, como aparência,

comportamento e layout.

O Modo de edição é possível com a adição do controle EditorZone, este também é um

container, que pode receber um ApperanceEditorPart e/ou BehaviorEditorPart e /ou LayoutEditorPart e /ou PropertyEditorPart.

Vamos os dois primeiros em funcionamento, para isso adicione um controle EditorZone

a sua página e um button com a propriedade text configurada como Edit. No manipulador de evento do botão adicione o seguinte código:

manipulador de evento do botão adicione o seguinte código: Dim mgr As WebPartManager mgr =

Dim mgr As WebPartManager mgr = WebPartManager.GetCurrentWebPartManager(Page) mgr.DisplayMode = mgr.SupportedDisplayModes.Item("Edit")

= mgr.SupportedDisplayModes.Item( "Edit" ) WebPartManager mgr; mgr = WebPartManager

WebPartManager mgr; mgr = WebPartManager.GetCurrentWebPartManager(Page); mgr.DisplayMode = mgr.SupportedDisplayModes["Edit"];

É preciso fazer algumas configurações para o modo de edição funcionar.

Primeiramente adicione o seguinte nó ao arquivo web.config de sua aplicação

79

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

<webParts> <personalization> <authorization> <allow users="*" roles="admin" verbs="enterSharedScope"/> </authorization> </personalization> </webParts>

Esta configuração deve estar dentro do nó system.web.

Em seguida adicione o seguinte código ao evento PageLoad da página:

adicione o seguinte código ao evento PageLoad da página: If WebPartManager1.Personalization.Scope =

If WebPartManager1.Personalization.Scope = PersonalizationScope.User _ AndAlso WebPartManager1.Personalization.CanEnterSharedScope Then

WebPartManager1.Personalization.ToggleScope()

End If

WebPartManager1.Personalization.ToggleScope() End If if (WebPartManager1.Personalization.Scope =

if (WebPartManager1.Personalization.Scope = PersonalizationScope.User && WebPartManager1.Personalization.CanEnterSharedScope)

{

WebPartManager1.Personalization.ToggleScope();

}

Para não tornar o aprendizado mais claro e simples, vamos estudar um os quatro editores existentes.

ApperanceEditorPart

Adicione um controle ApperanceEditorPart ao EditorZone. Rode a aplicação e clique em Edit para permitir que um controle entre em modo de edição. Observe que em todo o controle, no menu a esquerda, surge uma nova opção: Edit:

80

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 clicar na opção Edit, as opções do controle ApperanceEditorPart que adicionamos ao container são

Ao clicar na opção Edit, as opções do controle ApperanceEditorPart que adicionamos ao container são exibidas, você pode alterá-las a seu gosto. Para persistir as alterações clique em Apply, ou Cancel para cancelar.

81