Você está na página 1de 330

Curso Prático Visual Studio.

NET 2005

Curso Prático de
Visual Studio.NET 2005

Autor: Maurício Júnior


www.mauriciojunior.org
www.aspneti.com

E-mail: mauricio@ascompras.com
mauricio@aspneti.com

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Nota sobre direitos autorais:

Este e-book é de autoria de Mauricio Junior, sendo comercializado


diretamente através do site www.juliobattisti.com.br ou através do site de
Comércio Eletrônico: www.ascompras.com.br / www.ascompras.com ,
mediante contato através do email: mauricio@ascompras.com ou através
do site www.aspneti.com.br e www.mauriciojunior.org , mediante ao e-mail
mauricio@aspneti.com.br, diretamente pelo autor. Nenhum outro
usuário/email e/ou empresa está autorizada a comercializar este
ebook.

Ao adquirir este ebook você tem o direito de lê-lo na tela do seu


computador e de imprimir quantas cópias desejar. É vetada a distribuição
deste arquivo, mediante cópia ou qualquer outro meio de reprodução, para
outras pessoas. Se você recebeu este ebook através do e-mail ou via ftp de
algum site da Internet, ou através de um CD de Revista, saiba que você
está com uma cópia pirata, ilegal, não autorizada, a qual constitui crime de
Violação de Direito Autoral, de acordo com a Lei 5988. Se for este o caso
entre em contato com o autor, através do e-mail
webmaster@juliobattisti.com.br ou mauricio@ascompras.com , para
regularizar esta cópia. Ao regularizar a sua cópia você irá remunerar,
mediante uma pequena quantia, o trabalho do autor e incentivar que novos
trabalhos sejam disponibilizados. Se você tiver sugestões sobre novos
cursos que gostaria de ver disponibilizados, entre em contato pelo e-mail:
webmaster@juliobattisti.com.br.

Visite periodicamente o site www.juliobattisti.com.br para ficar por dentro


das novidades:
• Cursos de informática.
• Guias de Estudo para os Exames de Certificação da Microsoft.
• Artigos e dicas sobre Certificações da Microsoft.
• Artigos sobre Carreira e Trabalho.
• Dicas de livros e sites sobre diversos assuntos.
• Simulados gratuitos, em português, para os exames da Microsoft.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

• ESTE E-BOOK NÃO PODE SER


FORNECIDO EM UM CD OU DVD DE
NENHUMA REVISTA.

• SE VOCÊ OBTEVE UMA CÓPIA DESTE E-


BOOK ATRAVÉS DO E-MULE, KAZAA,
MORPHEUS OU OUTRO PROGRAMA DE
COMPARTILHAMENTO, SAIBA QUE
VOCÊ ESTÁ COM UMA CÓPIA ILEGAL,
NÃO AUTORIZADA.

• USAR UMA CÓPIA NÃO AUTORIZADA É


CRIME DE VIOLAÇÃO DE DIREITOS
AUTORAIS, COM PENA PREVISTA DE
CADEIA.

• VOCÊ SÓ PODE USAR ESTE E-BOOK SE


VOCÊ COMPROU DIRETAMENTE COM O
AUTOR: MAURÍCIO JÚNIOR OU COMPROU
ATRAVÉS DO SITE
WWW.JULIOBATTISTI.COM.BR.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

PIRATARIA É CRIME, COM PENA DE CADEIA. EU


AGRADEÇO PELA SUA HONESTIDADE. SE VOCÊ COMPROU
UMA CÓPIA DESTE CURSO, DIRETAMENTE EM
WWW.JULIOBATTISTI.COM.BR OU DIRETAMENTE COM O
AUTOR WWW.MAURICIOJUNIOR.ORG OU
WWW.ASCOMPRAS.COM , NÃO DISTRIBUA CÓPIAS PARA
OUTRAS PESSOAS.

SE VOCÊ BAIXOU UMA CÓPIA DESTE ARQUIVO USANDO


UM SOFTWARE TAL COMO O E-MULE OU O KAZAA, SAIBA
QUE VOCÊ ESTÁ COM UMA CÓPIA PIRATA, ILEGAL. USAR
UMA CÓPIA ILEGAL É CRIME DE VIOLAÇÃO DE DIREITOS
AUTORAIS.

ESTE ARQUIVO NÃO PODE SER DISTRIBUIDO GRAVADO


EM UM CD OU DVD DE REVISTA OU LIVRO. A ÚNICA
MANEIRA DE OBTER ESTE ARQUIVO É COMPRANDO
DIRETAMENTE COM O AUTOR OU ATRAVÉS DO SITE
WWW.JULIOBATTISTI.COM.BR

SE VOCÊ RECEBEU UMA CÓPIA ILEGAL DESTE ARQUIVO,


NÃO ADQUIRIDA DIRETAMENTE PELOS MEIOS
DESCRITOS NO INÍCIO DA PÁGINA, ENTRE EM CONTATO
E REGULARIZE A SUA CÓPIA.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Palavras do autor: Maurício Júnior

Tenho 24 anos e possuo três livros publicados pela editora Ciência Moderna
no ano de 2005.

Procurei em todos os livros mostrar detalhadamente conceitos de orientação


a objetos, banco de dados como mysql e sql server e componentes da
própria ferramenta de desenvolvimento.
Sou MCP Microsoft WebApplication, faço parte da comunidade
ASPNETI.COM (www.aspneti.com), onde publico todos os artigos, vídeos,
ebooks e livros.

Trabalho como consultor .NET na empresa STEFANINI IT Solution, fábrica


de software. Ministrei palestras e cursos sobre C#.NET, WebSerivces, Banco
de Dados SQL Server 2000, ASP 3.0, HTML Dinâmico e lógica de
programação pela empresa POLITEC LTDA, fábrica de software e fui
premiado pelos mesmos.

Fui desenvolvendor ASP 3.0, Visual Basic 6.0 e Java J2EE pela POLITEC
durante quatro anos, comecei a desenvolver sistemas com 15 anos
estando até hoje no ramo por gostar de criar, desenvolver e
principalmente quando se diz respeito em ajudar e prover recursos
de tecnologia a todos.

Qualquer dúvida, fale diretamente com o autor através do site


www.mauriciojunior.org ou pelo e-mail mauricio@ascompras.com.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Anotações:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Anotações:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Índice

CRIANDO RSS XML PARA O SEU PRÓPRIO SITE .......................................... 11


CRIANDO MENU DINÂMICO COM C#.NET PASSO 1 ............................... 19
CRIANDO MENU DINÂMICO COM C#.NET PASSO 2 ............................... 29
Com diferenciação de usuário....................................................... 29
AJAX COM VISUAL STUDIO.NET 2005..................................................... 39

ADICIONANDO O AJAX NO VISUAL STUDIO.NET 2005 ........................... 40

GERANDO DOCUMENTO WORD COM VISUAL STUDIO.NET 2005 ...................... 52


AJAX COM C#.NET, .......................................................................... 59
USANDO TECNOLOGIA ASPNET (PARTE 1)................................................ 59
AJAX PARTE II ................................................................................. 65
(BUSCANDO USUÁRIO NO BANCO DE DADOS) ............................................. 65
CRIANDO TREEVIEW COM VISUAL STUDIO.NET 2005 (PARTE 1) ..................... 83
CRIANDO TREEVIEW COM BANCO DE DADOS (PARTE 2) ................................ 90
DESENVOLVENDO COM ATRIBUTOS (JAVASCRIPT) E STRINGBUILDER ................. 97
GERANDO RELATÓRIO E EXPORTANDO PARA O EXCEL .................................. 105
COM VISUAL STUDIO.NET 2005.......................................................... 105
ORIENTAÇÃO A OBJETOS COM VISUAL STUDIO.NET (PARTE 2) ...................... 112
UPLOAD – ENVIANDO IMAGEM PELA INTERNET ........................................ 122
CRIPTOGRAFANDO SENHAS OU STRINGS ................................................ 132
TECLAS DE ATALHO ......................................................................... 137
TRABALHANDO COM SESSION ............................................................. 147
PADRÃO DE CODIFICAÇÃO PARA .NET ................................................... 152
C#.NET...................................................................................... 152

INTRODUÇÃO ................................................................................ 153

PADRÕES DE DESENVOLVIMENTO C# ............................................... 153

ENDENTAÇÃO DE CÓDIGO .................................................................. 153


COMENTÁRIOS ............................................................................... 154
Comentários de classes e métodos.............................................. 155
DECLARAÇÕES ............................................................................... 156
Variáveis privadas de classe....................................................... 156

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Variáveis locais ........................................................................ 156


Namespace.............................................................................. 156
Interface ................................................................................. 156
Métodos .................................................................................. 156
Enumerações ........................................................................... 156
Eventos................................................................................... 157
Constantes .............................................................................. 157
Exceções ................................................................................. 157
Propriedades públicas ............................................................... 157
Windows Forms........................................................................ 158
Objeto de dados ....................................................................... 160
Variáveis ................................................................................. 160
Web Forms .............................................................................. 161
CONSIDERAÇÕES ............................................................................ 162
COMUNICAÇÃO .NET E VB 6.0 – PARTE I............................................... 163
VISUAL STUDIO.NET 2005 ............................................................... 163
CRIANDO HELP.............................................................................. 170
Visual Studio.Net 2003 usando NDOC.......................................... 170
Praticando ............................................................................... 171
CRIPTOGRAFIA DE STRING DE CONEXÃO NO WEB.CONFIG ............................ 183
VISUAL STUDIO.NET 2005 ............................................................... 183
GRAVANDO ERROS COM EXCEPTION - PARTE I.......................................... 191
USANDO ARQUIVO DE LOG. ................................................................ 191
GRAVANDO ERROS COM EXCEPTION NO ARQUIVO DE LOG - PARTE II.DOC ......... 197
VISUAL STUDIO.NET 2005 ............................................................... 197
GRIDVIEW PARTE I ......................................................................... 205
VISUAL STUDIO .NET 2005............................................................... 205
CÓDIGO BEHING ............................................................................ 211
GRIDVIEW PARTE II ........................................................................ 213
VISUAL STUDIO.NET 2005 ............................................................... 213
GRIDVIEW PARTE III ....................................................................... 224
VISUAL STUDIO .NET 2005............................................................... 224
Método RowDeleting ................................................................. 229
IMPRIMIR COM VISUAL STUDIO.NET 2005 USANDO C#.NET. ...................... 233
LABEL SERVER CONTROL COM VISUAL STUDIO.NET 2005. .......................... 241

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

PRATICANDO ................................................................................. 242


MISTURANDO DADOS ....................................................................... 246
OBFUSCAR DADOS COM VISUAL STUDIO.NET 2005................................... 246
Pré-requisitos: ......................................................................... 246
Propriedades do form:............................................................... 247
PROGRAMANDO FORM2..................................................................... 251
TESTANDO APLICAÇÃO:..................................................................... 254
ORIENTAÇÃO A OBJETOS COM ............................................................. 256
VISUAL STUDIO.NET 2005 (O FAMOSO OO) – PARTE 1.............................. 256
RESOURCES E INTERNACIONALIZAÇÃO USANDO VISUAL STUDIO.NET 2005 (PARTE I)
................................................................................................ 278
INDO PARA PRÁTICA ......................................................................... 279
RESOURCES E INTERNACIONALIZAÇÃO USANDO VISUAL STUDIO.NET 2005 (PARTE
II) ............................................................................................. 286
TRABALHANDO COM COOKIE USANDO VISUAL STUDIO.NET 2005 (PARTE I) ...... 295
TRABALHANDO COM COOKIE (PARTE II) ................................................. 305
REQUISITOS: ................................................................................ 305
ARMAZENANDO DADOS NO VIEWSTATE – PARTE I ..................................... 315

INDO PARA A PRÁTICA .................................................................... 317

ARMAZENANDO DADOS NO VIEWSTATE PARTE II ...................................... 326


VISUAL STUDIO.NET 2005 ............................................................... 327
DIRETO PARA A PRÁTICA ................................................................... 327

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Criando RSS Xml

Primeiramente, quero deixar claro que estou criando com a ferramenta


Visual Studio.NET 2005 Beta II da Microsoft. Usarei o banco de dados
MYSQL.
O RSS é um formato padronizado mundialmente, que funciona com
linguagem XML (Extensible Markup Language), e é usado para compartilhar
conteúdo Web. Ele permite, por exemplo, que o administrador de um site
de notícias crie um arquivo XML com as últimas manchetes publicadas, a
fim de compartilhá-las mais rapidamente com seus leitores. Este arquivo
poderá ser lido através de qualquer ferramenta que seja capaz de entender
o formato XML do RSS.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Crie um arquivo RSS.aspx clicando com o botão direito do mouse no projeto


e adicionando um novo item. Esse arquivo gerará automaticamente um XML
com os dados trazidos do banco de dados MYSQL.

Crie uma classe chamada BancoDados.cs criando dois métodos dentro da


mesma. Uma chamada Conecta() e outra chamada Desconecta().
Segue abaixo a figura mostrando o primeiro método comentado acima:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Segue abaixo a figura do segundo método criado na classe


BancoDados.cs.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Depois de criado os dois métodos da classe irei programar dentro da classe


RSS.ASPX. Dentro da classe RSS, criei um método protegido sem passar
parâmetros e sem retornar parâmetros. O método chama geraRSS().
Segue a figura abaixo mostrando a classe:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Dentro dessa classe primeiramente devo importar as classes que usarei.


Veja os importes abaixo:

/// para gerar o xml


using System.Data.Odbc;
using System.Text;
using System.Xml;

Veja a assinatura do método: protected void geraRss(), veja que é void,


ou seja, sem retorno e sem parâmetros de entrada como dito antes. Segue
todo código desse método a seguir.

protected void geraRss()


{
Response.Clear();
Response.ContentType = "text/xml";

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

XmlTextWriter objX = new


XmlTextWriter(Response.OutputStream, Encoding.UTF8);
objX.WriteStartDocument();
objX.WriteStartElement("rss");
objX.WriteAttributeString("version","2.0");
objX.WriteStartElement("channel");
objX.WriteElementString("title", "ARTIGOS - aspneti.com.br");
objX.WriteElementString("link","http://www.aspneti.com.br");
objX.WriteElementString("description","Artigos Publicados na
Comunidade ASPNETI.COM.BR");
objX.WriteElementString("copyright","(c) 2005,
ASPNETI.COM.BR, All rights reserved.");
objX.WriteElementString("ttl","5");

BancoDados sBanco = new BancoDados();


sBanco.Conecta();

string sql = "select ch_artigos, desc_artigos, dt_artigos,


tit_artigos from tb_artigos where status_artigos = 'A' order by dt_artigos
desc limit 30";

OdbcCommand objCommand = new OdbcCommand(sql,


sBanco.sConn);
OdbcDataReader objReader = objCommand.ExecuteReader();

while (objReader.Read())
{
objX.WriteStartElement("item");
objX.WriteElementString("title",objReader.GetString(3));
objX.WriteElementString("description", "<img
src='http://www.aspneti.com.br/images/logo.gif'><br>Artigo Publicado na
comunidade ASPNETI.COM.BR <br><br>" + objReader.GetString(1));

objX.WriteElementString("link","http://www.aspneti.com.br/visualizar

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

/downloadArtigo.aspx?ch_artigos=" + objReader.GetInt64(0).ToString());
objX.WriteElementString("pubDate",
objReader.GetDateTime(2).ToString("dd/MM/yyyy"));
objX.WriteEndElement();
}
objReader.Close();
sBanco.Desconecta();

objX.WriteEndElement();
objX.WriteEndElement();
objX.WriteEndDocument();
objX.Flush();
objX.Close();
Response.End();
}

Explicando o método:

Primeiramente crio um objeto XmlTextWriter e vou escrevendo dentro dele.


Crio vários elementos (WriteElementString) e vou adicionando as tags. Logo
depois instancio a classe criada anteriormente de banco de dados e chamo
o método para conectar.
Na linha abaixo, depois de conectar no banco de dados, crio uma variável
sql fazendo um select nas tabelas do banco de dados. Não use esse
mesmo select, porque estou fazendo para o meu banco de dados e tabelas,
você deverá ter o seu banco e suas tabelas. Criei o seu próprio select.
Logo depois, executo e faço um laço adicionando valores aos elementos,
depois fecho o objeto e o banco de dados e pronto, terminei de fazer o RSS.

Veja a figura abaixo mostrando executando o código que foi criado acima.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Espero ter ajudado a todos.


Pessoal, foi criado um novo grupo chamado ASPNETI.com.br para ajudar a
todos os desenvolvedores do Brasil com Fórum, Enquête, Artigos e muito
mais.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

MENU DINÂMICO COM C#.NET Passo 1

Estarei criando primeiramente um menu para ser utilizado por um sistema.


É bem simples de desenvolver e usar. É dividido em duas partes. Estarei
usando um componente free chamado skyMenu. Esse componente é feito
apenas para ler um arquivo xml e mostrar em uma página .aspx. Estarei
explicando passo a passo de como fazer o menu dinâmico para ser utilizado
em qualquer sistema.

Criei um projeto chamado Artigos. Adicionei uma pasta chamada menu e


dentro adicionei um arquivo chamado menu.ascx. Veja a figura 1-1 e 1-2.

Referência: 1-1

Cliquei com o botão direito em cima do projeto, fui ao menu Add Folder,
logo após Regular Folder, digitei o nome menu. Figura 1-2.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-2

Depois da pasta criada, cliquei com o botão direito em cima da pasta menu,
logo apo Add New Item..., adicionando um arquivo user control. Não
esqueça que um arquivo user control, tem a extensão .ascx. Veja na figura
1-3 o passo a passo.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-3

A figura 1-4 mostra apenas user control, colocando o nome menu.ascx.

Referência: 1-4

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Depois de criado, tenho que adicionar uma dll de referência no projeto para
usá-la. Clique com o botão direito em cima do projeto e clique Add
Reference, e escolha a dll. Veja na figura 1-5.

Referência: 1-5

A figura de referência 1-6 apenas mostra adicionando a dll no projeto para


ser usada mais tarde. Lembre-se que essa dll é grátis e pode ser adicionada
no seu projeto apenas clicando no Add Reference...

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-6

Adicione dentro da página menu.ascx o código abaixo:

<%@ Register TagPrefix="cc1" Namespace="skmMenu"


Assembly="skmMenu" %>
<cc1:menu id="Menu1" runat="server" ItemPadding="5" ItemSpacing="0"
zIndex="2000" Font-Size="8pt"
MenuFadeDelay="1" Cursor="Pointer" SubMenuCssClass="menu"
Layout="Horizontal" HighlightTopMenu="false">
<SelectedMenuItemStyle
CssClass="menuSelecionado"></SelectedMenuItemStyle>
</cc1:menu>

Estou utilizando o menu dentro da página menu.ascx. Note que esse menu
funciona em qualquer brownser, tanto faz se é IE, Mozilla ou FireFox,
funciona do mesmo jeito e do mesmo layout. Esse código acima foi inserido
na parte HTML da página.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Antes de inserir o code-behing da página menu.ascx, terei que criar um


arquivo xml, pode ser de qualquer nome, estarei colocando o nome do
mesmo como menu.xml. Adicione da mesma forma como adicionou o
menu.ascx o menu.xml.

Referência: 1-7

Veja a figura de referência 1-8, mostra o código xml do arquivo do


menu.xml.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-9

Depois de criar o arquivo menu.xml definindo o menu, abri o arquivo


menu.ascx, cliquei duas vezes na página normalmente e adicionei o código
abaixo:

protected void preencheMenu()


{
this.Menu1.DataSource =
"http://localhost/Artigos/menu/menu.xml";
this.Menu1.DataBind();
}

Criei apenas um método protected chamado preencheMenu(), adicionando o


datasource do Menu1, indicando o xml criado anteriormente. Logo depois,
mando preencher o objeto com o DataBind().
Cliquei com o botão direito em cima do projeto e adicionei mais uma página
chamada default.aspx, por enquanto a mesma terá só um prefixo

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

incluindo o arquivo menu.ascx. Funciona como se fosse include no ASP


3.0.

Veja o código abaixo junto com a explicação:

Primeiramente adicionei um Prefixo indicando o nome do arquivo ascx.

<%@ Register TagPrefix="Prefixo" TagName="menu"


src="menu/menu.ascx" %>

Depois de colocar o endereço correto do arquivo, uso o mesmo mais abaixo,


com o seguinte código:

Prefixo: Nome do tagPrefix,


Id= pode ser qualquer nome
Runat = sempre deve ser o server
Fecha a tag.

<Prefixo:menu id="menu" runat="server"></Prefixo:menu>

A figura de referência 1-10 mostra como o código ficará na página


default.aspx.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-10

Coloquei como página inicial do projeto o arquivo default.aspx e iniciei a


aplicação. Veja na figura de referência 1-11 o funcionamento do menu. O
interessante é que o menu funciona em qualquer brownser sem problemas.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-11

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

CRIANDO MENU DINÂMICO COM C#.NET Passo 2

Com diferenciação de usuário.

Anteriormente foi criado um menu geral para todos visualizarem.


Mostrarei como criar menu dependendo do tipo do usuário que entrar na
aplicação, um a um. Primeiramente, estarei criando um arquivo chamado
tipoUsuario.aspx, lá terá dois links. Um como administrador, e outro
apenas como usuário normal.

Veja a figura 2-1.

Referência: 2-1

Veja a especificação da tela 2-1:

LinkButton

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Id = lnkUsuario
Text = Usuário Normal

LinkButton
Id = lnkAdmin
Text = Usuário Admin

Depois de criado os atributos da página 2-1, dê um duplo clique no link


Usuário.
Estarei inserindo o código abaixo:

private void lnkUsuario_Click(object sender, System.EventArgs e)


{
Session["tipo"] = "Usuario";
Response.Redirect("default.aspx");
}

Veja que estou criando uma sessão chamada tipo e atribuindo um valor
chamado Usuario, sem acento ou caracter especial. Logo depois, estou
redirecionando para a página default.aspx.

Em seguida, dê um duplo clique no link Usuário ADMIN e adicione o


seguinte código:

private void lnkAdmin_Click(object sender, System.EventArgs e)


{
Session["tipo"] = "Admin";
Response.Redirect("default.aspx");
}

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Veja que coloquei a minha variável de sessão do tipo Admin e redirecionei


para a página default.aspx. Mais a frente verá o que significa essa sessão
tipo Admin e ou Usuário.

A figure 2-2 mostra como ficou o código que foi adicionado acima.
Veja a figura de referência 2-2.

Referência: 2-2

Passando para o menu.xml, terei que alterá-lo, colocando outras tags e


adicionando mais menus. O código abaixo mostra como deve ficar o código
xml.

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


<menu>
<!-- Menu Principal para todos -->
<menuItem>
<text>Principal</text>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

<url></url>
<subMenu>
<menuItem>
<text>Página Principal</text>
<url>http://localhost/artigos/default.aspx</url>
</menuItem>

<menuItem>
<text>Sair</text>
<url>http://localhost/artigos/sair.aspx</url>
</menuItem>
</subMenu>
</menuItem>
<menuItem>
<text>Sistema</text>
<roles>Admin</roles>
<subMenu>
<menuItem>
<text>Cadastro</text>
<url>http://localhost/artigos/default.aspx</url>
</menuItem>
<menuItem>
<text>Editar</text>
<url>http://localhost/artigos/sair.aspx</url>
</menuItem>
</subMenu>
</menuItem>
<menuItem>
<text>Sistema</text>
<roles>Usuario</roles>
<subMenu>
<menuItem>
<text>Cadastro</text>
<url>http://localhost/artigos/default.aspx</url>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

</menuItem>
</subMenu>
</menuItem>
</menu>

O código que está de laranja indica que foi mudado em relação ao xml do
artigo passo 1.
O código da cor azul, indica a tag que deve ser acrescentada.
Veja o código abaixo que está em azul.

<roles>Usuario</roles>

Esta tag <roles> indica o tipo de usuário ou nível de usuário que pode
acessar / ver as páginas de acordo com o tipo de usuário. Foi adicionado o
nome Usuario e Admin.
A figura 2-3 mostra como ficou o arquivo menu.xml.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 2-3
Antes de testar o sistema e o menu, entre no arquivo menu/menu.ascx e
faça a seguinte alteração:

protected void preencheMenu()


{
Menu1.UserRoles.Add(Session["tipo"].ToString());
this.Menu1.DataSource="http://localhost:1060/WebSite2/menu/menu.xml"
;
this.Menu1.DataBind();
}

O método criado preencheMenu(), foi mudado. Foi acrescentado a linha


em azul, significa que o tipo de usuário UserRoles será o que está em
Session[“tipo”].
Bem simples de ser entendido e de fazer.

A figura 2-4 mostra como ficou o código:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 2-4

Depois de tudo alterado, coloque o arquivo tipoUsuario.aspx como página


inicial do seu projeto. Figura 2-5.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 2-5

Inicie o sistema, logo após clique no usuário normal.


Figura 2-6.

Referência: 2-6

Veja o menu com o tipo usuário normal. Figura 2-7.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 2-7

Veja agora o menu criado depois que clica com o usuário Admin.
Figura 2-8.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 2-8

A diferença é que um aparece o Editar e outro só aparece o CADASTRAR.


Lembrando que esse menu dinâmico pode ser usado em qualquer brownser.
Espero que tenha gostado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Ajax com Visual Studio.NET 2005

Referência: 1.1

A cada dia a Microsoft tem criado ferramentas para melhorar o


desenvolvimento de aplicativos e softwares que possam ajudar empresas
públicas, privadas e governo.

Ajax significa “Asynchronous Javascript And Xml”, e é uma técnica


relativamente antiga, mas que até 2 anos e meio atrás não tinha um nome
próprio, era mais um “truque” na manga de programadores avançados.
Essa técnica consiste em utilizar Javascript, XML e XmlHttpRequest de
forma a criar paginas que executem código sem serem recarregadas, ou
seja, para utilizar um termo mais utilizado entre os programadores e
analistas ASPNET, sem realizar postbacks ou reload na página.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Uma outra forma de explicar isso, é dizer que o Ajax permite um


comportamento assíncrono de sua página, ou seja, seu programa vai
executar o código no servidor sem que a pagina fique “travada”,
permitindo que o usuário enquanto isso continue utilizando-a (você já deve
estar pensando o quanto isso seria útil naquela sua pagina que executa
uma consulta ao banco de dados que leva 20 segundos).

Essa nova tecnologia pode ser usada praticamente em todas as plataformas


de programação para web, tais como PHP, Perl, ASP, JAVA e outros, vêm
incorporando bibliotecas para suporte a Ajax, e não poderia ser diferente
com ASPNET. A implementação mais popular é chamada de Ajax.Net, irei
explorar algumas possibilidades da tecnologia.

Adicionando o Ajax no Visual Studio.NET 2005

Antes de adicionar a referência do AJAX no meu projeto, tenho que baixá-la


no site http://ajax.schwarz-interactive.de ou no site
http://www.aspneti.com.br para depois adicioná-la. A referência 1.2 mostra
perfeitamente como baixar a DLL.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.2

Pronto, baixei a DLL e coloquei dentro do micro. O mesmo foi copiado para
a minha área de trabalho, ou seja, para o DESKTOP.
É mostrado na referência 1.3.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.3

Cliquei com o botão direito no projeto VS 2005, fui na opção ADD


REFERENCE... Depois disso, tenho que indicar onde se encontra a DLL. Não
posso esquecer que deixei no DESKTOP do micro. Tente seguir passo a
passo para não ter erro.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.4

No próximo passo, é indicar onde está a DLL para o projeto criado.


A referência 1.5 mostra perfeitamente como indicar. É um pouco diferente
do Visual Studio.NET 2003, existem as abas .NET, COM, PROJETCTS,
BROWSE e RECENT. Essa DLL, estarei que buscar pela ABA BROWSE,
indiquei a pasta DESKTOP e cliquei no arquivo AJAX.DLL.
No projeto é adicionada automaticamente uma pasta chamada BIN.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.5

Prontinho, adicionei a referência no meu projeto com sucesso. A nova


ferramenta da Microsoft quando adicionado um novo projeto, não vem com
o arquivo de configuração web.config. Tenho que clicar com o botão direito
e adicionar um novo item.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.6

Adicionei o arquivo de configuração WEB.CONFI, agora tenho que


adicionar uma linha para configuração do AJAX e para que funcione
corretamente.

<httpHandlers>
<add verb="POST,GET" path="ajax/*.ashx"
type="Ajax.PageHandlerFactory, Ajax" />
</httpHandlers>

Esse código de estar dentro da tag SYSTEM.WEB, não posso esquecer


disso, acredito que nem você pode esquecer disso.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.7

Depois de adicionado as 4 linhas dentro do arquivo web.config o projeto já


está pronto para ser usado com a tecnologia AJAX. Irei adicionar uma
página / classe chamda Default.aspx dentro do projeto. Só clicar com o
botão direito e ir a opção ADD NEW ITEM.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.8

Dentro dessa página, utilizarei os objetos da ferramenta como textbox,


botão e um div.
Segue todo o código da página DEFAULT.ASPX abaixo para verificar os
nomes dos controles e javascript.

TextBox
Id = txtNome

Button
Id = cmdEnviar

Div
Id = divResultado

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Note que o button fiz como se fosse html, não usei o controle da
ferramenta. Dentro do button existe um atributo chamado ONCLICK que
chama uma função JAVASCRIPT criada. A função JAVASCRIPT pega o valor
digitado pelo usuário e passa para o método criado na classe .aspx.cs.
O retorno da função é lançado para outra função chamada
pegarValor_CallBack que apenas mostra no div criado. É bem simples o
entendimento.

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"


"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>AJAX - ARTIGO</title>
<script>

function enviar(){
var form = document.forms[0];

var nome = form.txtNome.value;

_Default.primeiraAplicacaoAjax(nome,pegarValor_CallBack);

}
function pegarValor_CallBack(response){
var resultado = response.value;
document.all('divResultado').innerHTML = resultado;
}
</script>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtNome" runat=server></asp:TextBox>
<button id="cmdEnviar"
onclick="enviar();">Enviar</button>
</div>
<div id="divResultado"></div>
</form>
</body>
</html>

Depois da página HTML criada, tenho que fazer algumas coisas básicas
dentro da classe.
A primeira coisa é registrar o nome da classe que poderá ser usada pelo
AJAX.
Em poucas linhas é feito todo o processo. Veja abaixo:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

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

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

{
protected void Page_Load(object sender, EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(_Default));
}

[Ajax.AjaxMethod()]
public string primeiraAplicacaoAjax(string nome)
{
return "Nome: " + nome;
}
}

A parte que está em vermelho significa registrando a classe no ajax para


ser usada.

Todo método criado que pode ser usado pelo ajax, deve começar com a
linha [Ajax.AjaxMethod()], apenas isso. Note que no HTML, na parte de
JAVASCRIPT chamo o nome da classe, ponto o nome do método.
CLASSE.METODO(parametro).

Feito isso, só executar e verificar que a página vai a sua classe sem mesmo
dar o postback, ou seja, sem reload algum.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.9

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Gerando Documento Word com Visual Studio.NET 2005

É bem simples e de fácil uso.


É feito com a linguagem C#.NET 2.0.
Você deve ter instalado em sua máquina os programas:
- Visual Studio.NET 2005 da Microsoft
- FrameWork 2.0

Criei um projeto no Visual Studio .NET 2005 chamado WebSite2.


Esse nova IDE de desenvolvimento da Microsoft está bem completa e legal
de se usar. O usuário desenvolvedor não precisa ter instalado na máquina o
aplicativo IIS,apenas para desenvolvimento.

A tela de referência 1-1 mostra a IDE com o projeto criado.

Referência: 1-1

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Cliquei com o botão direito do mouse em cima do projeto e adicionei um


novo item. Esse item terá o nome de word.aspx.
A tela de referência 1-2 mostra como adicionar um novo item no projeto.

Referência: 1-2

A figura de referência 1-3 mostra apenas como escolher o tipo do item que
será criado dentro do projeto. É um tipo WebForm.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-3

Coloquei o nome do item como word.aspx e pronto. Está criada, o novo


objeto está criado. Lembre-se que é criada automaticamente uma classe
com o mesmo nome. Veja a figura 1-4.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-4

Dentro dessa classe criada, criei um método chamado geraWord().


Segue o código abaixo do método criado.

protected void geraWord()


{
Response.Clear();
Response.Buffer= true;
Response.ContentType ="application/msword";
Response.Charset = "";
this.EnableViewState = false;

System.IO.StringWriter oStringWriter = new


System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new
System.Web.UI.HtmlTextWriter(oStringWriter);

Response.Write(oStringWriter.ToString());
}

Analisando a assinatura do método, podemos ver que é um método


protegido, que não retorna nada e não espera nada de parâmetros. Bem
simples e direto.

protected void geraWord()

Depois de inserir o código acima na classe, abrirei o meu HTML, inserindo


algumas palavras dentro. Qualquer palavra, é apenas um teste para ver se
o que está em HTML irá para o word. Veja a figura 1-5.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-5.

No modo de design ficará da seguinte forma. Figura 1-6.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-6

Marquei o objeto como página inicial do projeto e executei-o.


O mesmo abrirá o word com todas as palavras específicas do HTML
inseridas.
Veja a figura 1-7.
Antes, não esqueça de colocar no load da classe a chamada para gerar o
seu word.

protected void Page_Load(object sender, EventArgs e)


{
geraWord();
}

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-7

Prontinho, o seu word está com todo o conteúdo que colocastes no html.
A minha dica é a seguinte:
Faça tudo com os componentes, datagrid, datalist e depois apenas faça um
método para gerar o word. Lógico que depois que estiver pronto toda a
execução da sua regra de negócio.

Espero ter ajudado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Ajax com C#.NET,

Usando tecnologia ASPNET (parte 1).

* Instalando Ajax.Net

Antes de começar a utilizar a tecnologia Ajax.Net, primeiramente tenho que


instalar em meu projeto a DLL Ajax.Net. A mesma pode ser baixada no
endereço http://ajax.schwarz-interactive.de e é composto além da DLL um
ótimo tutorial em inglês. Clique em Download the latest DLL e
descompacte o arquivo em algum diretório de sua máquina.
Abra o Visual Studio.NET 2003 e crie um projeto ASPNET com o nome que
quiser. É necessário adicionar essa referência ao seu projeto. Siga os
passos abaixo: No Visual Studio, em Solution Explorer, clicar com o botão
direito do mouse em References e em Add Reference, na aba .NET, clique
em Browser e selecione o arquivo ajax.dll no diretório que foi
descompactado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-1

Referência: 1-2

Para configurar uma ultima coisa, deve ser inserido as linhas abaixo no
arquivo web.config e dentro do laço ou tag system.web.

<httpHandlers>
<add verb="POST,GET" path="ajax/*.ashx"
type="Ajax.PageHandlerFactory, Ajax" />
</httpHandlers>

Estou apenas adicionando um comando que permite que o Ajax intercepte


chamadas ao servidor e atue quando necessário. Pronto, agora já pode ser
criada uma página para teste.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

* Hello World

Para funcionar o Ajax devo fazer em duas partes: uma parte reside no
servidor, ou seja, no código .cs, executa a parte compilada do código, por
exemplo, validar um usuário, buscar dados no banco de dados, efetuar
algum calculo pesado, etc.; a outra parte fica no cliente, ou seja, javascript
e que mostra na tela com alertas e outros.
Na pagina WebForm1.aspx.cs insira o código seguinte:

[Ajax.AjaxMethod()]
public string HelloAjax(string nome)
{
return "Olá de Ajax, " + nome + "!";
}

A única coisa diferente nesse método é a linha de código


[Ajax.AjaxMethod()].

Dentro do método padrão que já vem na classe, o famoso Page_Load


devemos inserir o seguinte código:

private void Page_Load(object sender, System.EventArgs e)


{
Ajax.Utility.RegisterTypeForAjax(typeof(WebForm1));
}

Esse comando acima adiciona automaticamente um bloco de código


javascript em nossa pagina aspx, para que ela possa lidar com as chamadas
Ajax. O importante é você colocar o parâmetro do typeof, ou seja, o nome

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

da classe que você quer expor, nesse caso, o nome que você deu a sua
pagina. Como estou mantendo o padrão que está vindo no Visual
Studio.NET, então a minha pagina é WebForm1.aspx.
Certo a parte do código fonte era isso, agora devo ir a parte do código html.

Dentro do Form1, adicione uma caixa de texto, um botão e um div.

<form id="Form1" method="post" runat="server">


<asp:TextBox ID="txtNome" Runat="server"></asp:TextBox>
<button onclick="ExecutaHelloAjax()" type="button">Alô
Ajax</button>
<br><br>
<div id="divResposta"></div>
</form>

Agora irei adicionar duas funções em javascript. É recomendado colocar


todas as funções em javascript dentro do código <head></head>. As
funções podem ser acrescentadas em qualquer parte do html, porém o
recomendado é dentro do bloco <head>.

<script language="javascript">
function ExecutaHelloAjax(){
var nome = document.Form1.txtNome.value;
WebForm1.HelloAjax(nome, HelloAjax_CallBack);
}

function HelloAjax_CallBack(response){
document.all('divResposta').innerHTML = response.value;
}
</script>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Prontinho, agora inicie o projeto, digite o nome e clique no botão.

Referência: 1-3

Clique no botão Alo Ajax e veja a rapidez que é mostrado o código ou


descrição que fizemos. Note também que a pagina não é da reload, ou seja,
a pagina não é recarregada.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-4

Espero que tenha ajudado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Ajax parte II

(buscando usuário no banco de dados)

Olá pessoal, essa é a segunda parte falando sobre Ajax.

Para revisar, estarei mostrando o que foi montado anteriormente no projeto


AjaxTeste como a ferramenta Visual Studio.NET 2003.
Criei um banco de dados em MYSQL com uma tabela e com quatro campos.

Referência: 1.1

Especificação da tabela:

Nome: TB_USUARIO
Campos:
ch_usuario int

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

no_usuario varchar(200)
pw_usuario varchar(255)
email_usuario varchar(255)

Logo depois criei uma classe chamada acessoBanco.cs com conexão com
o banco de dados, essa classe tem dois métodos Conecta() e
Desconecta().
Foi criado a seguir uma classe Usuario.cs que possui um método chamado
insereUsuario passando os valores nome,senha e email como
parâmetros do método.

A classe de criptografia também foi criada para criptografar a senha na hora


que for inserida no banco de dados.
Explicarei como buscar os usuários do banco de dados automaticamente
depois de inseri-los. Criarei mais um método dentro da classe Usuario.cs
que retornará o objeto DataSet.

/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[Ajax.AjaxMethod()]
public DataSet BuscaUsuario(string id)
{
sBanco.Conecta();
string sql = "select * from tb_usuario ";

if (id != "" && id != null)


{
sql += " where ch_usuario =" + id;
}

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

DataSet dtSet = new DataSet();


OdbcDataAdapter dtAdapter = new
OdbcDataAdapter(sql,sBanco.sConn);
dtAdapter.Fill(dtSet);
sBanco.Desconecta();
return dtSet;

Referência: 1.2

Não posso esquecer de referenciar o método [Ajax.Method()] para que o


objeto possa encontrar o método que estou utilizando. Na segunda linha
estou usando o método para conectar com o banco de dados. Logo a seguir
monto o sql com o devido select na tabela do banco de dados. Instancio o
dataset para uso, preencho com o dataadapter e retorno o dataset. A classe
em si é bem simples para o entendimento.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Passando para a classe WebForm1.aspx, abaixo segue o html.

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs"


AutoEventWireup="false" Inherits="AjaxTeste.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio
.NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
<script language="javascript">

function InsereUsuario(){
var nome = document.Form1.txtNome.value;
var senha = document.Form1.txtSenha.value;
var email = document.Form1.txtEmail.value;

Usuario.insereUsuario(nome,senha,email,InsereUsuario_CallBack);
}

function InsereUsuario_CallBack(response){
var retorno = response.value;

if (retorno){
document.all('divResposta').innerHTML =
"Inserido com sucesso !!";
}else{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

document.all('divResposta').innerHTML =
"Erro ao inserir usuario !!";
}
ExecutaBuscaUsuario();
limpaCampos();
}

function limpaCampos(){
var form = document.forms[0];

form.txtNome.value = "";
form.txtEmail.value = "";
form.txtSenha.value = "";
}

function ExecutaBuscaUsuario(){
var id = "";
Usuario.BuscaUsuario(id,BuscaUsuario_CallBack);
}

function BuscaUsuario_CallBack(response){
var usuario = response.value;
var div = document.all('divRespostaUsuario');
var ds = response.value;
//alert(ds);
if (ds != null && typeof(ds) == "object" &&
ds.Tables != null){
var result = '';
for (var i=0; i<ds.Tables[0].Rows.length;
i++){
var row = ds.Tables[0].Rows[i];
result += row.ch_usuario + " : " +
row.no_usuario + " - " + row.email_usuario + "<br>";
}

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

document.all('divRespostaUsuario').innerHTML = result;
}
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
Nome:
<asp:TextBox ID="txtNome"
Runat="server"></asp:TextBox><br>
Senha:
<asp:TextBox ID="txtSenha" TextMode="Password"
Runat="server"></asp:TextBox><br>
E-mail<asp:TextBox ID="txtEmail"
Runat="server"></asp:TextBox><br>
<button onclick="InsereUsuario()"
type="button">Insere Usuário</button>
<br>
<br>
<button onclick="ExecutaBuscaUsuario()"
type="button">Busca Usuário</button>
<br>
<br>
<div id="divResposta"></div>
<br>
<div id="divRespostaUsuario"></div>
</form>
</body>
</HTML>

A parte do código que está em amarelo são os campos e o botão que chama
o método que está na cor azul. A parte que está na cor vermelha traz e

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

executa a busca do usuário, esse div de vermelho mostra a parte de


usuário, ou seja, a tabela que virá do banco de dados.
Na posso esquecer de comentar o codebehing (código de trás) da classe
webform1.aspx.cs.

private void Page_Load(object sender, System.EventArgs e)


{
Ajax.Utility.RegisterTypeForAjax(typeof(Usuario));
}

Apenas use o registro na entrada da classe para que o ajax reconheça todos
os métodos da classe registrada da forma do código acima.
Executei o código iniciando o projeto.

Referência: 1.3

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Digitando o nome do usuário, senha e e-mail, clique no botão inserir,


automaticamente e sem dar refresh na classe, ou seja, não da postback. Irá
aparecer todos os usuários automaticamente no segundo div criado
anteriormente.

Referência: 1.3

Digitei o nome, senha e e-mail do usuário, cliquei no botão inserir e


automaticamente inseriu no banco de dados e mostrou todos os usuários
que já estavam na tabela de usuário.

Espero ter ajudado a todos.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Inserindo Usuário no Banco de Dados MYSQL Usando Tecnologia


AJAX

Demonstrarei como inserir um usuário no banco de dados sem realizar o


postback ou refresh na página. É uma continuação do Ajax anterior.

Referência: 1-1

O primeiro de tudo é criar uma tabela no banco de dados MYSQL com o


nome tb_usuario e com os seguintes campos:

TB_USUARIO
ch_usuario int(3) auto_increment
no_usuario varchar(200)
pw_usuario varchar(255)
email_usuario varchar(255)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Depois da estrutura do banco de dados criada, irei inserir um método


dentro da classe Usuario.cs chamado
insereUsuario(nome,senha,email).

/// <summary>
///
/// </summary>
/// <param name="nome"></param>
/// <param name="senha"></param>
/// <param name="email"></param>
/// <returns></returns>
[Ajax.AjaxMethod()]
public Boolean insereUsuario(string nome, string senha, string email)
{
try
{
sBanco.Conecta();
Criptografia sCript = new Criptografia();
string sql = "insert into tb_usuario
(no_usuario,pw_usuario,email_usuario) values ";
sql += " ('" + nome + "','" + sCript.encrypt(senha) + "','" +
email + "')";

OdbcCommand sqlc = new OdbcCommand(sql,sBanco.sConn);


sqlc.ExecuteNonQuery();
return true;
}
catch(Exception e)
{
throw new Exception(e.StackTrace);
}
finally
{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

sBanco.Desconecta();
}
}

Anterior, criei a classe acessoBanco.cs com os métodos para abrir o banco


de dados e fechar o banco de dados, ou seja, a conexão com o banco de
dados. Estou usando a mesma classe e o mesmo método, o mesmo está
com a cor vermelha acima. A string sql apenas pega os dados passados e
insere no banco de dados automaticamente abrindo a conexão e fechando
logo depois. Se for inserido corretamente o método retornará true, se der
algum erro retornará false.

Referência: 1-2

Dentro do método insereUsuario, estou utilizando a classe Criptografia.cs e


o método encrypt passando a string senha.
Abaixo segue todo o código da classe Criptografia.cs:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

using System;
using System.Security.Cryptography;

namespace AjaxTeste
{
/// <summary>
/// Summary description for criptografia.
/// </summary>
public class Criptografia
{
//variaveis para criptografia
Byte[] IV = new byte[] {0x0012, 0x0034, 0x0056, 0x0078,
0x0090, 0x00AB, 0x00CD, 0x00EF, 0x0013, 0x0045, 0x0099, 0x00AA,
0x0012, 0x0056, 0x0012, 0x0009};
Byte[] key =
System.Text.Encoding.UTF8.GetBytes("aaaaaa32");

/// <summary>
/// metodo que encriptografa os dados de acordo com a minha
variavel
/// acima e os valores passos
/// ex.: encrypt("valor")
/// </summary>
/// <param name="strValor"></param>
/// <returns>string</returns>
public string encrypt(string strValor)
{
try
{
DESCryptoServiceProvider des = new
DESCryptoServiceProvider();
Byte[] inputByteArray =
System.Text.Encoding.UTF8.GetBytes(strValor);

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

System.IO.MemoryStream ms = new
System.IO.MemoryStream();
CryptoStream cs = new CryptoStream(ms,
des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0,
inputByteArray.Length);
cs.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());
}
catch (System.Exception ex)
{
return ex.Message;
}
}

/// <summary>
/// metodo que descriptografa os dados de acordo com os
valores passos
/// e as variaveis acima
/// ex.: decrypt("valor_criptografado")
/// </summary>
/// <param name="strValor"></param>
/// <returns>string</returns>
public string decrypt(string strValor)
{
Byte[] inputByteArray = new byte[strValor.Length];
try
{
DESCryptoServiceProvider des = new
DESCryptoServiceProvider();
inputByteArray =
Convert.FromBase64String(strValor);
System.IO.MemoryStream ms = new
System.IO.MemoryStream();

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

CryptoStream cs = new CryptoStream(ms,


des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0,
inputByteArray.Length);
cs.FlushFinalBlock();
System.Text.Encoding encoding =
System.Text.Encoding.UTF8;
return encoding.GetString(ms.ToArray());
}
catch (System.Exception ex)
{
return ex.Message;
}
}

}
}

Passando agora para a parte HTML, mais especificamente a página


WebForm1.aspx coloquei o código seguinte:

<form id="Form1" method="post" runat="server">


Nome: <asp:TextBox ID="txtNome"
Runat="server"></asp:TextBox><br>
Senha:<asp:TextBox ID="txtSenha" TextMode=Password
Runat="server"></asp:TextBox><br>
E-mail<asp:TextBox ID="txtEmail"
Runat="server"></asp:TextBox><br>
<button onclick="InsereUsuario()" type="button">Insere
Usuário</button>
<br><br>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

<div id="divResposta"></div>
</form>

Veja que tenho os objetos na tela como nome, senha, email e um botão
Insere Usuário. Preste atenção que, o meu botão executa um script em
javascript chamado InsereUsuario(). Veja o código abaixo:

<script language="javascript">
function InsereUsuario(){
var nome = document.Form1.txtNome.value;
var senha =
document.Form1.txtSenha.value;
var email = document.Form1.txtEmail.value;
Usuario.insereUsuario(nome,senha,email,InsereUsuario_CallB
ack);
}

function InsereUsuario_CallBack(response){
var retorno = response.value;
if (retorno){
document.all('divResposta').innerHTML =
"Inserido com sucesso !!";
}else{
document.all('divResposta').innerHTML =
"Erro ao inserir usuario !!";
}
}
</script>

Depois de todo código inserido no HTML do webform1.aspx, só inicie o seu


projeto com o banco de dados iniciado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-3

Digite valores nos campos e clicar no botão para inserir.


Veja que o mesmo irá inserir no banco de dados sem mesmo dar um
refresh na página ou falando diretamente com os desenvolvedores .net, um
postback.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-4

Referência: 1-5

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Veja no banco de dados que o mesmo foi inserido com sucesso.

Referência: 1-6

Espero que tenha ajudado a todos.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Criando TreeView com Visual Studio.NET 2005 (parte 1)

Antes de tudo, explicarei qual o objetivo da criação do TreeView com Visual


Studio.NET 2005. Se alguém não conhece o menu ou o nome Newsgroups
MSDN Brasil da Microsoft.
Para ver o treeview que irei criar é parecido com o do site
http://www.microsoft.com/brasil/msdn/newsgroups/default.mspx ou veja a
figura de referência 1-1.

Referência: 1-1

No Visual Studio.NET 2005 já possui o objeto treeview dentro da barra de


ferramentas chamada Toolbox. Criei primeiro um objeto chamado
TreeView2005.aspx e arrastei o objeto para a página. Veja a figura 1-2.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-2

Na barra de ferramentas Toolbox, no item Navigation existe o objeto


TreeView pronto para ser arrastado e colocado dentro da página. Veja a
figura 1-3.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-3

Coloquei o nome ou o ID do objeto chamado treeView. Segue o código da


página abaixo:

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="TreeView2005.aspx.cs" Inherits="TreeView2005" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"


"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>TreeView (passo 1)</title>
</head>
<body>
<form id="form1" runat="server">
<div>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

<asp:TreeView runat=server ID="treeView" ExpandDepth=0>


</asp:TreeView>
</div>
</form>
</body>
</html>

O que está de amarelo é o componente que adicionei na página. Agora irei


criar apenas opções para ser mostradas na página. Na figura 1-4, é
mostrado o que foi acrescentado para ser criado o primeiro menu.

Referência: 1-4

Cliquei com o botão direto e deixando o TreeView2005.aspx para ser a


principal página do projeto. Executando o projeto apenas com esse código
acrescentado, veja as figuras 1-5 e 1-6 o que já foi criado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-5

Expandindo o treeView, aparecerá as opções daquele treeView.

Referência: 1-6

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Acrescentei mais uma tagLib dentro do objeto para aparece mais uma
opção dentro do TreeView. Veja a figura 1-7.

Referência: 1-7

Executei novamente a pagina do projeto e veja o resultado na figura 1-8


abaixo.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-8

Espero ter ajudado.


O treeview será desenvolvido com banco de dados SQL Server.
Aguardo e verás mais e mais.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Criando TreeView com Banco de Dados (parte 2)

Essa segunda parte do TreeView foi feito com banco de dados SQL SERVER.
O Visual Studio.NET 2005 é bem fácil e simples de criar um menu TreeView
com valores do banco de dados. O nome do banco de dados é Northwind,
ou seja, todo SQL SERVER instalado no servidor ou máquina já vem com
esse banco padrão.
Não irei fazer OO (orientado a objetos), o código será todo dentro da página
treeView.aspx. A parte 3, refatorarei o código colocando da forma OO.

O primeiro de tudo, devo colocar o código do objeto na parte de html, ou


apenas arrastar da toolbox o objeto treeview.

Segue o código:

<asp:TreeView
ID="Tree"
runat="server"
ExpandDepth=0
OnSelectedNodeChanged="SelectedNodeChanged">
</asp:TreeView>

A ilustração do objeto acima está nas próximas figuras 1.1 e 1.2.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.1

Referência: 1.2

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

No começo do código, criei uma constante chamada conectionString


armazenando o a linha de conexão do banco de dados.

///classe de importação para usar banco de dados


using System.Data.SqlClient;

///constante com variável de conexão com o banco de dados


const string connectionString =
"Server=localhost;Integrated Security=True;Database=Northwind";

Veja a figura de referência 1.3.

Referência: 1.3

O próximo código abaixo será chamado no load da página. Criei um método


protegido e que não volta nada. Segue o mesmo.

///método que popula o treeview


protected void Popula()
{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

DataSet dst = TreeViewData();


foreach (DataRow masterRow in dst.Tables["Categories"].Rows)
{
TreeNode masterNode =
new TreeNode((string)masterRow["CategoryName"]);
Tree.Nodes.Add(masterNode);
foreach (DataRow childRow in
masterRow.GetChildRows("Children"))
{
TreeNode childNode = new TreeNode();
childNode.Text = childRow["ProductName"].ToString();
childNode.Value = childRow["ProductID"].ToString();
masterNode.ChildNodes.Add(childNode);
}
}
}

A linha de código que está pintada de amarela é outro método que criei que
retorna um objeto dataset. Veja o mesmo abaixo:

protected DataSet TreeViewData()


{
SqlConnection con = new SqlConnection(connectionString);
SqlDataAdapter dadCats = new SqlDataAdapter("SELECT * FROM
Categories", con);
SqlDataAdapter dadProducts = new SqlDataAdapter("SELECT *
FROM Products", con);

DataSet dst = new DataSet();


dadCats.Fill(dst, "Categories");
dadProducts.Fill(dst, "Products");
dst.Relations.Add("Children",

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

dst.Tables["Categories"].Columns["CategoryID"],
dst.Tables["Products"].Columns["CategoryID"]);

return dst;
}

O código acima treeViewData() retorna para quem chamou um objeto


dataset. Dentro do bloco do código, conecto no banco de dados, crio um
select que é uma instrução PSSQL, passando a minha variável con criada
anteriormente. O mesmo retorna um dataAdapter com o nome dadCats
que é da tabela de categoria. Na linha abaixo, crio um outro select para
retornar outro objeto dataAdapter.
Seguindo o código, preencho os objetos dataSet, relaciono os valores e
retorno o dataSet.

O método Popula(), tenho que fazer dois foreach para relacionar o pai
com seus filhos e mostrar no treeView. Primeiro monto um node (nó), com
um nome da categoria e depois monto os filhos do mesmo nó. Depois
apenas preencho o treeView com o text e o value adicionando-os.
A linha abaixo explica preenchendo o text e o value.

TreeNode childNode = new TreeNode();


childNode.Text = childRow["ProductName"].ToString();
childNode.Value = childRow["ProductID"].ToString();
masterNode.ChildNodes.Add(childNode);

A linha em amarelo acima mostra adicionando os nós no treeView.


Veja o mesmo em funcionamento. Não esqueça de iniciar o SQL SERVER.
Set como a página de inicialização e clique F5. A figura 1.4 mostra a
ilustração do funcionamento.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.4

Ainda não acabou e voltando ao código do treeView, na parte de html veja


que existe uma tag diferente.

OnSelectedNodeChanged="SelectedNodeChanged">

Esse SelectedNodeChanged é um método que criei para quando o usuário


clicar em um link ou linha do treeView, o mesmo será redirecionado
passando alguns valores. Veja o código abaixo:

protected void SelectedNodeChanged(object sender, EventArgs e)


{
Response.Redirect("rss.aspx?no=" +
this.Tree.SelectedValue.ToString() + "&de=" +
this.Tree.SelectedNode.Text);

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Desde já agradeço a todos e espero ter ajudado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Desenvolvendo com Atributos (Javascript) e StringBuilder

Olá pessoal, estou disposto a mostrar todos os segredos de desenvolver


usando javascript e atributos.
É bem simples e de fácil entendimento, por isso peço a você que pelo
menos perca uns 3 minutos lendo-o. Garanto que sairá com mais
conhecimento e eu mesmo aprendi muito com ele. Antes sabia que existia,
porém não sabia como desenvolver direito e da melhor forma.

Antes de começar definitivamente, irei escrever uma frase cujo você terá
que decifra-la, no próximo, darei a resposta da frase. Enquanto isso tente
decifra-la e boa sorte. Segue a frase:

Ftqftp rvf bqsfoeb dpn fttf bsujhp.

A tela de referência 1.1 mostra a primeira página criada.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.1

Estou desenvolvendo com Visual Studio.NET 2005 Beta II. Coloquei na


classe alguns objetos de tela como botão, label e textbox. Segue abaixo a
especificação toda da tela:

TextBox
Id = txtNome

Label
Id = lblNome
ForeColor = Red

Button
Id = cmdBotao
Text = Botão Confirmação

Button
Id = cmdAlert
Text = Gerar Alerta

A classe só possui esses objetos de tela, segue o código da página:

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"


"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

<title>String Builder</title>
</head>
<body>
<form id="form1" runat="server">
<div>
&nbsp;Nome:
<asp:TextBox ID="txtNome"
runat="server"></asp:TextBox>
<asp:Button ID="cmdBotao" runat="server"
OnClick="cmdBotao_Click" Text="Botão Confirmação" />
<br />
<br />
<asp:Label ID="lblNome" runat="server"
ForeColor="Red"></asp:Label>
<br />
<br />
<asp:Button ID="cmdAlert" runat="server"
OnClick="cmdAlert_Click" Text="Gerar Alerta" /></div>
</form>
</body>
</html>

Cliquei duas vezes em cima da página e no método load adicionei um


atributo para o botão no onclick, é bem simples esse código e serve para
adicionar uma mensagem de confirmação para o botão cmdBotao criado
anteriormente.

protected void Page_Load(object sender, EventArgs e)


{
cmdBotao.Attributes.Add("onclick","javascript:if
(confirm('Deseja realmente inserir os valores ?')==false) return

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

false;");
}

Veja que existe um if (confirm(‘ dentro do Add, logo depois existe uma
mensagem que será exibida quando clicar no botão. Continuando com o if,
no final pergunta se é igual a false (==false), se for retorna false; dessa
forma a página não da submit ou postback.

Cliquei duas vezes no botão cmdBotao e adicionei um código dentro.

protected void cmdBotao_Click(object sender, EventArgs e)


{
lblNome.Text = "Inserido com sucesso, " +
txtNome.Text;
}

O código adicionado apenas mostra uma mensagem no label inserido com


sucesso passando o nome que foi digitado no código textbox. Mostrarei o
funcionamento da página neste momento.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.2

Clicando com no botão confirmação o mesmo mostrará uma mensagem


para o usuário. A figura 1.3 mostra o funcionamento depois do clique do
botão.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.3

Preenchi o campo e clicando no botão confirmar, depois na opção ok, o


mesmo mostra no código inserido com sucesso e o nome que foi digitado no
textbox. A figura 1.4 mostra isso perfeitamente.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.4

Passando para o próximo botão chamado cmdAlert, estou apenas exibindo


um alert javascript depois que clica no mesmo. Estarei trabalhando com
string builder, cujo é a melhor forma de trabalhar quando vai mexer com
string de grande quantidade.
Veja o código do botão:

protected void cmdAlert_Click(object sender, EventArgs e)


{
StringBuilder str = new StringBuilder();
str.Append("<script>");
str.Append("alert('Gerando alerta na tela !!');");
str.Append("</script>");

Page.RegisterStartupScript("alert", str.ToString());
}

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Antes de tudo você deve importar ou usar o System.Text; ou seja,


referencia no começo da classe o Text para usar depois o stringbuilder.
A referência 1.5 mostra como funciona o botão criado.

Referência: 1.5

Pessoal, espero que tenha aprendido alguma coisa.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Gerando Relatório e Exportando para o Excel

Com Visual Studio.Net 2005

Nesta parte, mostro como gerar relatório e exportar para o Excel. Espero
que possa estar aprendendo muito. É de simples entendimento e rápida
produtividade para gerar o mesmo. O mesmo será desenvolvimento em
C#.NET.

Referência: 1-1

Na tela de referência 1-1 mostro apenas a tela que gerei com o visual
studio.net 2005. Cliquei com o botão direito no produto e adicionei um novo
item ADD NEW ITEM... O nome do novo item é gerandoExcel.aspx.

O código abaixo mostra o que tem na parte HTML da página:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="gerandoExcel.aspx.cs" Inherits="gerandoExcel" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"


"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Gerar Excel</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblExcel" runat=server></asp:Label>
</div>
</form>
</body>
</html>

A única coisa que acrescentei na página foi um label com o nome lblExcel.
O mesmo está com a cor alaranjada para que note o que foi acrescentado.
A figura 1-2 mostra a parte de design da tela.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-2

Dentro da classe, já dentro do código C#.NET, criarei um método para


gerar em arquivo excel. Será chamada depois do objeto label for
preenchido. Note que é bem simples, dessa forma poderei fazer qualquer
relatório ser mostrado no excel.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-3

Segue o código:

protected void Page_Load(object sender, EventArgs e)


{
lblExcel.Text = "Teste <br> teste <br> gerando excel <br>";
geraExcel();
}

protected void geraExcel()


{

Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

this.EnableViewState = false;

System.IO.StringWriter oStringWriter = new


System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new
System.Web.UI.HtmlTextWriter(oStringWriter);

Response.Write(oStringWriter.ToString());

Explicando o código:
Na entrada da página, preencho o label com um texto aleatório como
"Teste <br> teste <br> gerando excel <br>"; . A linha debaixo,
chamo o método criado para gerar o arquivo excel. O método chama-se
geraExcel() que já faz o mesmo virar um arquivo excel. O segredo do
método é a linha Response.ContentType = "application/vnd.ms-
excel"; . Note que a assinatura do método é, protected protegido e void,
não retorna valor algum.
Não esqueça de colocar a página como página inicial do projeto e inicie o
projeto.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-4

Clique em OPEN e espere alguns segundos.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-5

A figura 1-5 mostra resultado acima do código criado. Pode ser feito
qualquer relatório com qualquer objeto na tela, depois é só chamar o
método para gerar o relatório.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Orientação a Objetos com Visual Studio.NET (parte 2)

Olá pessoal, como foi dito anteriormente, essa segunda parte será bem
simples. Mostra que depois do cadastro do usuário é enviado um e-mail
automaticamente. Antes de tudo irei criar duas novas classes para o
projeto. Uma se chamará ConstantesSistema.cs e a outra
EnviaEmail.cs.
A primeira classe armazena as variáveis do sistema para enviar e-mail.
A segunda classe terá dois métodos para enviar e-mail automaticamente.
A classe EnviaEmail.cs estende da classe ConstantesSistema.cs, ou
seja, todas as variáveis e métodos criados na classe estendida poderá ser
acessado e usado na classe de e-mail.

Referência: 1.1

As duas classes circuladas na figura 1.1 mostra que serão usadas.


Seguindo com o sistema, a figura 1.2 é mostrada apenas as variáveis.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.2

Segue a descrição abaixo para facilitar a copia.

public class ConstantesSistema


{
public string MAIL_DE = "EMAIL QUE IRÁ ENVIAR";
public string PW_DE = "SENHA DO EMAIL";
public string SMTP_MAIL = "SMTP DO SERVIDOR DE EMAIL";
public string SMTP_AUT = "1";
}

Explicando as variáveis:

MAIL_DE é o e-mail que estará no campo e-mail de. Imagine mandando


um e-mail, sempre o seu e-mail estará no campo e-mail de.
PW_DE é a senha do e-mail que enviará.
SMTP_MAIL é o smtp do servidor de e-mail que tens, por exemplo,
smtp.terra.com.br.
SMTP_AUT é o tipo da autenticação, ou seja, numero 1.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

É bem simples a classe ConstantesSistema.cs.

Referência: 1.3

Continuando e indo para a classe de E-mail, irei inserir dois métodos, um


para autenticar e outro para enviar o e-mail propriamente dito.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.4

A figura 1.4 mostra o método que envia e-mail. Analisando a assinatura do


método, veja que não retorna valor algum e espera quatro parâmetros de
entrada. Segue o código.

/// <summary>
/// Envia e-mail automaticamente
/// </summary>
/// <param name="usuarioNome"></param>
/// <param name="usuarioEmail"></param>
/// <param name="descricaoEmail"></param>
/// <param name="tituloEmail"></param>
public void enviarEmail(string usuarioNome, string
usuarioEmail,
string descricaoEmail, string tituloEmail)
{
try
{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

MailMessage mail = new MailMessage();


mail.From = MAIL_DE;
mail.To = usuarioEmail;
mail.Subject = tituloEmail;
mail.BodyFormat = MailFormat.Html;

mail.Body = descricaoEmail;

getAutenticacao(mail);

SmtpMail.SmtpServer = SMTP_MAIL;
SmtpMail.Send(mail);

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

Explicando os parâmetros de entrada:


usuarioNome: é o nome do usuário que receberá o e-mail.
usuarioEmail: é o e-mail do usuário que irá receber.
descricaoEmail: é a descrição do e-mail que irá ao corpo da mensagem.
tituloEmail: é o titulo que irá no e-mail enviado.

Isso tudo, usarei dentro do bloco try do método. O método catch pega o
erro que ocorrer. Primeiro instancio o método da classe using
System.Web.Mail; chamado MailMessager. O nome da variável chama-se
mail. Portanto uso-a para atribuir os parâmetros e valores em seus
respectivos campos.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

try
{
MailMessage mail = new MailMessage();
mail.From = MAIL_DE;
mail.To = usuarioEmail;
mail.Subject = tituloEmail;
mail.BodyFormat = MailFormat.Html;

mail.Body = descricaoEmail;

getAutenticacao(mail);

SmtpMail.SmtpServer = SMTP_MAIL;
SmtpMail.Send(mail);

Não esqueça de que uso as variáveis da classe constantesSistema. Isso


economiza muita coisa, se o e-mail ou senha ou smtp mudar, apenas será
mudado em um local, ou seja, na classe ConstantesSistema.cs.
A linha que está em amarelo é um outro método que serve para autenticar
a mensagem que será enviada.

private void getAutenticacao(MailMessage mail)


{

mail.Fields["http://schemas.microsoft.com/cdo/configuration
/smtpauthenticate"] = SMTP_AUT;

mail.Fields["http://schemas.microsoft.com/cdo/configuration

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

/sendusername"] = MAIL_DE;

mail.Fields["http://schemas.microsoft.com/cdo/configuration
/sendpassword"] = PW_DE;
}

Veja que estou usando as variáveis da outra classe.


Pronto, agora já foram criadas as duas classes que precisava para enviar e-
mail automaticamente.

Referência: 1.5

Vá para a classe Default.aspx e depois que o cadastro foi feito, dentro do


bloco if instancie o método da classe de e-mail passando os parâmetros.
Veja como ficará o mesmo abaixo.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

protected void cmbGravar_Click(object sender, EventArgs e)


{
usuarioDAO dao = new usuarioDAO();
usuarioDTO dto = new usuarioDTO();

setValores(dto);

if (dao.insereUsuarioDAO(dto))
{
EnviaEmail sEmail = new EnviaEmail();
sEmail.enviarEmail(txtNome.Text, txtEmail.Text,
"Obrigado pelo cadastro", "Cadastro realizado com sucesso ");
Response.Redirect("resultadoFinal.aspx");
}
else
{
Response.Redirect("resultadoFinalErro.asp");
}
}

As linhas que estão de amarelo é o que foi acrescentado.


Executando o código, irei fazer um cadastro e ver se o e-mail chegou.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.6

Referência: 1.7

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Veja que chegou o e-mail em minha caixa postal.

Referência: 1.8

Espero que tenham gostado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

UPLOAD – Enviando imagem pela Internet

Como enviar imagens pela internet. Chamamos isso de upload, quando


baixo um arquivo da internet chamamos isso de download. Todo código é
bem simples para quem já sabe como funciona e um pouco mais complexo
para quem não sabe ou nunca viu a funcionalidade. No começo do código,
antes de tudo usarei uma tag html com o famoso runat=server. Não ache
estranho, porém preciso ter acesso a objetos de tela dentro do code behing.

Referência: 1-1

O código abaixo mostra o que falei logo acima.

Tag HTML.
<INPUT class="caixa" id="txtImagem" style="WIDTH: 296px;
HEIGHT: 22px" type="file" size="30" name="txtImagem"

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

runat="server">

O objeto chama-se txtImagem. Posso pegar esse objeto dentro do código


c#.net porque o mesmo está com uma tag que uso, runat.

<%@ Page language="c#" Codebehind="upload.aspx.cs"


AutoEventWireup="false" Inherits="Artigos.upload" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN" >
<HTML>
<HEAD>
<title>upload</title>
<meta name="GENERATOR" Content="Microsoft Visual
Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript"
content="JavaScript">
<meta name="vs_targetSchema"
content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:Button id="cmdEnviar" style="Z-INDEX:
101; LEFT: 136px; POSITION: absolute; TOP: 120px"
runat="server" Text="Enviar
Arquivo"></asp:Button>
<TABLE style="Z-INDEX: 102; LEFT: 24px;
POSITION: absolute; TOP: 72px">
<TR>
<TD>Imagem:</TD>
<TD><INPUT class="caixa"

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

id="txtImagem" style="WIDTH: 296px; HEIGHT: 22px" type="file"


size="30"
name="txtImagem"
runat="server">
</TD>
</TR>
</TABLE>
<asp:Label id="lblUpload" style="Z-INDEX: 103;
LEFT: 88px; POSITION: absolute; TOP: 24px" runat="server"
Font-Bold="True" Font-Names="Arial
Narrow" Font-Size="Large">UPLOAD DE ARQUIVOS</asp:Label>
</form>
</body>
</HTML>

Todo meu FORM está destacado da cor azul. Preste bem atenção nas tags
que uso para enviar arquivo. Na parte de design do Visual Studio.NET 2003
é mostrado na figura 1-2.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-2
Agora mostrarei o código C#.NET enviando uma imagem pela internet.

Referência: 1-3

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

/// <summary>
/// Metodo que pega a extensao dos arquivos
/// </summary>
private void pegaArquivo()
{
//pegando o arquivo
sArquivo = txtImagem.PostedFile.FileName;
nomeArqFinal =
System.IO.Path.GetFileName(sArquivo);
sExtensao =
System.IO.Path.GetExtension(sArquivo);
}

/// <summary>
/// Metodo que clica no botao enviar para fazer upload
do arquivo
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cmdEnviar_Click(object sender,
System.EventArgs e)
{
pegaArquivo();

//fazendo upload do arquivo

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

if (sExtensao.ToUpper() == ".GIF" ||
sExtensao.ToUpper() == ".JPG" || sExtensao.ToUpper() == ".PNG")
{
//setando caminho para o arquivo no
servidor
//estou setando para \imagens

this.txtImagem.PostedFile.SaveAs(Server.MapPath(".") +
@"\images\" + nomeArqFinal);
Response.Write("<script>alert('Arquivo
enviado com sucesso !!');</script>");

Response.Write("<script>location.href='upload.aspx';</scrip
t>");
}
else
{
Response.Write("<script>alert('A extensão
do arquivo deve ser .GIF ou .JPG ou .PNG');</script>");

Response.Write("<script>location.href='upload.aspx';</scrip
t>");
}
}

Explicando o código C#.NET:


Clique duas vezes no botão enviar. Primeiramente, coloquei um método
antes de enviar o arquivo escolhido. Esse método chama-se
pegaArquivo() e faz apenas uma coisa; pega o nome do arquivo e a
extensão.
Na próxima linha do método cmdEnviar_Click verifico qual a extensão do
arquivo que o usuário escolheu.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

if (sExtensao.ToUpper() == ".GIF" || sExtensao.ToUpper() ==


".JPG" || sExtensao.ToUpper() == ".PNG")

Se a extensão do arquivo escolhido foi algumas dessas descritas na


condição, o arquivo será enviado automaticamente para a internet e dentro
da pasta images.

O código que envia o arquivo para o servidor é:

this.txtImagem.PostedFile.SaveAs(Server.MapPath(".") +
@"\images\" + nomeArqFinal);

Dica:
Não posso esquecer de criar a pasta images dentro do servidor ou do
próprio computador. Não posso deixar de falar que, deve ter permissão
para fazer upload dentro do servidor da internet, ou seja, deve ter
permissão de leitura e escrita para a pasta images.

Continuando com a análise do código, se não for as extensões que verifiquei


o sistema mostra uma mensagem falando de quais extensões podem ser
escolhidas para enviar o arquivo.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-4

Referência: 1-5

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

No clique do botão Enviar Arquivo, a mesma figura será transferida para a


pasta images.

Referência: 1-6

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1-7

Veja que a figura está dentro da pasta images.


Aqui chego ao final, espero que possa ter ajudado a você.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Criptografando Senhas ou Strings

A segurança hoje em dia tem ficado sempre em primeiro plano quando


dizemos ou falamos em software. Não importa qual o tipo de software ou
sistema, o que vale é a segurança de dados, informações, usuários e
senhas.
A segurança do código é uma prioridade além do próprio sistema, mas
iremos apenas trabalhar agora com criptografia de dados. Não importa o
tipo de dado para criptografar, basta apenas criptografar e garantir a
segurança de informações. Muitas pessoas criam uma nova maneira para
criptografar dados com chaves públicas, privadas e tudo mais.
Demonstrarei como criptografar dados usando uma classe do próprio
framework .NET.

Colocarei duas formas:


SHA1 (Secure Hash Algorithm - Algoritmo de Resumo Seguro).
Este algoritmo recebe como entrada um documento qualquer sob a forma
digital com um tamanho de até 2 elevado a 64 bits
(18.446.744.073.709.551.616 bits) ou 2.305.843.009.213.693.952 "Bytes"
ou caracteres, e gera como saída de string de 160 bits ou 20 Bytes. Ele é
um pouco mais lento que o MD5, mas em compensação mais difícil de ser
quebrado.

MD5 (Message Digest) - Ele produz uma saída de 128 bits ou 16 Bytes.
Ele é mais rápido que o SHA-1.

HashPasswordForStoringInConfigFile(senha, formato da
senha)
Senha: string passada ou descrição qualquer que o usuário
digitou
Formato da Senha: tipo do formato, você pode escolher dois
tipos de formato (MD5, SHA1)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Criei uma página no meu projeto com o nome testeCript.aspx, você pode
criar a sua própria página conforme quiser.

Na página, coloquei apenas alguns objetos. Segue a descrição dos mesmos.

TextBox
Id = txtSenha
Text = “em branco”

Button
Id = cmdCript
Text = Criptografar

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Label (são dois)


Id = lblSHA1
Text = “em branco”

Id = lblMD5
Text = “em branco”

Cliquei duas vezes no botão cmdCript e coloquei as seguintes linhas de


código:

private void cmdCript_Click(object sender, System.EventArgs e)


{
lblSHA1.Text = "SHA1 " + criptografarSHA1(txtSenha.Text) ;
lblMD5.Text = "MD5 " + criptografarMD5(txtSenha.Text) ;
}

Veja que ainda não foram criados os métodos criptografarSHA1 nem


criptografarMD5.
Segue os métodos.

private string criptografarSHA1(string cript)


{
return
FormsAuthentication.HashPasswordForStoringInConfigFile(cript,"SHA1");

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

private string criptografarMD5(string cript)


{
return
FormsAuthentication.HashPasswordForStoringInConfigFile(cript,"MD5");
}

Cliquei F5 e depois digitei no campo textbox aspneti.com.br.

Veja o resultado da string criptografada.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Teclas de Atalho

Olá pessoal, mostro como montar e criar teclas de atalho utilizando a IDE
Visual Studio.NET 2003. Falo que não é diferente o modo de criar atalhos
com a IDE Visual Studio.NET 2005 lançada pela Microsoft.

A Microsoft criou a IDE para desenvolvimento, porém não foi criado teclas
de atalho para melhorar a velocidade de desenvolvimento e produtividade
para quem está trabalhando em uma fábrica de software ou uma empresa
pequena de desenvolvimento. O importante foi que essa é uma grande
jogada para um novo critério prática. A ferramenta foi deixada aberta para
criação de teclas de atalho conforme o gosto do desenvolvedor. Isso
significa que podemos criar várias teclas de atalho, ficando assim mais
rápido o desenvolvimento.

Começando com a prática, irei abrir a IDE Visual Studio.NET e criar uma
classe chamada atalho.cs. Segue em seguida a figura ilustrativa.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Depois da classe criada, acesse o menu TOOLS, depois OPTIONS, como na


figura ilustrativa a seguir:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Clicado na opção do MENU / OPTIONS, irá aparecer uma tela secundária


onde posso definir uma tecla de atalho para qualquer tipo de comando. A
tela é simples de entendimento.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Como na figura ilustrativa anterior, clique na opção ENVIRONMENT e na


sub opção KEYBOARD. Essa opção é para o teclado, ou seja, fazer ou criar
uma tecla de atalho.

Na parte vermelha da figura é onde poderei escolher o comando para criar


uma tecla de atalho, com isso quando for teclado essa mesma tecla, o
comando será executado automaticamente, sem precisar usar o mouse e
menu. Para quem digita muito, isso é incrivelmente ótimo.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Percorrendo os comandos, existe um de grande importância na hora de


criar um projeto legal. O comando que escolhi, cria um novo projeto. Pode
ver que deixei selecionado clicando uma vez com o mouse. Veja a segunda
parte circulada e note que no campo PRESS SHORTCUT KEY(S) existe os
valores CTRL+SHIFT+ALT+P. Isso aconteceu porque cliquei dentro do
campo e digitei essas teclas. É bem simples mesmo, é só clicar no campo e
digitar as teclas de atalho que o mesmo coloca automaticamente dentro do
campo. Faça você agora a sua tecla de atalho.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Depois de criado a tecla, ainda não terminou, clique no botão ASSIGN para
efetivar mesmo essa tecla de atalho. Note o resultado na próxima figura.

Veja que o botão remover foi habilitado automaticamente. Clique no botão


OK e teste no projeto a tecla de atalho que foi colocada.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Note que realmente funciona como se esperava. Clique nas teclas e já


apareceu automaticamente o comando que gostaria. Seguindo ainda com
teclas de atalho, agora irei criar uma tecla de atalho para gerar
automaticamente get e set de variáveis criadas dentro da classe. É o
mesmo conceito, porém irei escolher outra opção de comando.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Na imagem acima mostra as minhas duas variáveis criadas dentro da classe


atalho.cs. Vou seguir os mesmos passos para criar o atalho. Para quem
não sabe qual é o comando para gerar get e set automaticamente, o nome
é ENCAPSULATEFIELD.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Veja que a tecla de atalho que escolhi foi: CTRL + ALT + E . Clique no
botão ASSIGN para atribuir, logo em seguida, clique OK.
O próximo passo é clicar em cima de sua variável depois a tecla de atalho.

A tela acima irá aparecer. Clique no botão OK e pronto. Está feito.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Trabalhando com Session

Como trabalhar com Session dentro de uma aplicação do projeto com a


ferramenta Visual Studio.NET. Antes de tudo estarei falando de alguns
conceitos de session em uma aplicação web.

A session é muito usada em aplicação para controlar acesso, tipo ou


qualquer outra coisa. A session é criada por browser, isto é, cada vez que
abro o Internet Explorer ou Firefox ou Opera é aberta uma session para
controle. Cada vez que se inicia uma aplicação usando .net é aberta uma
sessão para o usuário.
A ilustração abaixo mostra como funciona.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Uma sessão ou session em uma aplicação é determinada ou controlada por


um tempo. Se o usuário ficar no browser parado por mais de alguns
minutos e depois for acessar novamente; a aplicação irá pedir novamente
que o usuário autentique no browser ou na aplicação. O tempo padrão de
uma sessão dentro de um browser é de 20 minutos, mas pode ser alterado
de acordo com a necessidade.
A CLR (common language runtime) gerencia a memória usando garbage
collection para a session. A garbage collection traça em um servidor
periodicamente através de referências entre objetos. Quando no tempo de
execução, (runtime), for encontrado um objeto longo que está sendo usado,
ele tira o objeto ou joga fora e recupera a memória.

Voltando com ilustração, depois que o usuário sair da aplicação ou do


browser o mesmo passar dentro de uma tag chamada Session_End. Isso
usando .NET. Veja a figura abaixo de ilustração.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Segue uma tabela de eventos de sessions e applications.

Tipo Explicação
Application_Start A primeira visita do usuário em uma aplicação.
Application_End Na saída da aplicação pelo usuário
No inicio o pedido de cada request do servidor.
Um request do servidor acontece toda vez que
Application_BeginRequest
o browser de alguém inicia ou entra na
aplicação.
Fim do pedido de requet, ou seja, quando o
Application_EndRequest
usuário sai da aplicação.
Session_Start Toda vez que um usuário entra na aplicação.
Quando a sessão é terminada definida pela
Session_End
aplicação ou o usuário sai da aplicação.

Demonstrarei como criar em uma aplicação .NET como mostrar quantos


usuários estão online no site. Para esse tipo de verificação é usado session.
Teste no seu site e veja o quanto é fácil trabalhar com session. Segue o
código:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Visual Basic .NET


Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' Save the number of clicks in Session state.
Session("Clicks") = Session("Clicks") + 1
' Display the number of clicks.
Response.Write("Number of clicks: " & Session("Clicks"))
End Sub

Visual C#
// From Global.asax.cs
protected void Session_Start(Object sender, EventArgs e)
{
// Initialize Clicks Session state variable.
Session["Clicks"] = 0;
}

// From StateNEvents.asax.cs
private void Button1_Click(object sender, System.EventArgs e)
{
// Increment click count.
Session["Clicks"] = (int)Session["Clicks"] + 1;
// Display the number of clicks.
Response.Write("Number of clicks: " + Session["Clicks"] + "<br>");
}

Trabalhar com session’s é bem simples e fácil. Geralmente uma session é


usada ou ativada depois que usuário entra no sistema logando-se com
usuário e senha. Com isso, enquanto a sessão estiver ativa o mesmo
continua na aplicação, se ela expirar o mesmo será redirecionado para uma
página onde possa fazer o login.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Para criar uma session em C# (Sharp), basta digitar as seguintes linhas:

Session["Clicks"] = "valor";

Pode ser criado qualquer tipo de sessão que precisar em uma aplicação.
Para ler uma session basta fazer da seguinte forma:

Response.Write(Session["Clicks"].ToString());

Espero ter ajudado.

Livros publicados do autor:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Padrão de Codificação para .NET

C#.NET

Estou disposto a colocar para vocês um documento de padrão para


codificação de sistemas e códigos. Dessa forma, se todos programarem de
uma mesma forma dentro de uma empresa ou sistema, o código será
entendido por qualquer pessoa no futuro que for executar alguma
modificação no sistema. Esse tipo de documento é ótimo para começar um
sistema por uma equipe, tudo se torna mais fácil e ágil programar.
Espero que possa ajudar a todos como me ajudou depois que fiz.

Outros artigos poderão ser encontrados no site abaixo:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

INTRODUÇÃO

Este documento tem como objetivo elaborar uma padronização para o


desenvolvimento em C#, considerando os seguintes tópicos:

• Padronização de nomenclatura usada na programação de métodos,


objetos, variáveis e constantes. Além disso, trata como deverá ser feita a
documentação dentro do código.

PADRÕES DE DESENVOLVIMENTO C#

Endentação de código

Alguns trechos de código podem ficar muito extensos e você deverá encarar
o dilema de quebrar a linha.

• Quebrar a linha após uma vírgula;


• Quebrar a linha após um operador;
• Alinhar a nova linha no inicio da expressão no mesmo nível da linha
anterior.

Exemplo:

longMethodCall(expr1, expr2, expr3,


expr4, expr5);

var = a * b / (c - g + f) +
4 * z;

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Outro fator importante é a utilização de espaços em branco para


endentação. Não use espaços em branco para endentação, use tabulação.
Motivos: Facilidade de incrementar e decrementar blocos de código através
de atalhos de teclas do editor de código.

Comentários

Utilizar as três barras “///” para comentários de classes e métodos. O


motivo é utilizar a funcionalidade do Visual Studio .NET de transformar
comentários em documentação de código. Entretanto, para comentários que
não necessitam ser publicados, seguem algumas sugestões:

O comentário é importante para você ou outra pessoa ser orientada sobre a


manutenção de um código fonte, tenha atenção à forma de destacar o
comentário. Por exemplo, comentários com mais de uma linha poderiam ser
assim:

/** Line 1
* Line 2
* Line 3
**/

Para comentários de uma linha somente, o comentário deve ser uma


espécie de marcador de loops ou não deve ser aplicado. A questão é que
como exposto em linhas anteriores, os comentários devem chamar a
atenção visando facilitar e direcionar a manutenção. Somente justifica-se
um comentário de uma linha quando você necessita marcar dentro de um
bloco de código o início de um nível de endentação ou loop. Exemplo:

//Verifica se somente uma string foi entrada


if(args.Length==1)
Console.WriteLine(args[0]);
else
{
ArgumentOutOfRangeException ex;
ex = new ArgumentOutOfRangeException("Utilize

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

somente uma string");


throw(ex);
}

Outra boa aplicação para comentários de uma linha é a explicação de uma


declaração. Por exemplo:

int levelStatus; // nível do status


int sizeStatus; // tamanho do status

Comentários de classes e métodos

Toda classe e método devem ser documentados. O padrão utilizado segue


abaixo:

/// <summary>

/// Retorna DirectoryEntry representando a unidade


organizacional.

/// </summary>

/// <param name="coopCentral">Cooperativa Central.</param>

/// <param name="cooperativa">Cooperativa desejada</param>

/// <returns>

/// Resulado da busca no AD.

/// </returns>

/// <exception
cref="ActiveDirectoryManager.ActiveDirectoryManagerException">

/// Se não for encontrada a unidade organizacional.

/// </exception>

/// <remarks>

/// Criado por: <nome>

/// Alterado por: <nome>

/// </remarks>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Declarações

Variáveis privadas de classe

Utilizar a definição CamelCase (a primeira letra do identificador é minúscula


e a primeira letra de cada identificador subseqüente concatenado é
maiúscula).

Exemplo:
String firstName;

Variáveis locais

Utilizar a definição CamelCase.

Namespace

Utiliza-se o nome da empresa seguido pelo nome do projeto, camada de


negocio e o modulo que está sendo desenvolvido.

Exemplo:
Bancoob.NomeProjeto.CamadaNegocio.AccessControl

Interface

O nome de interface deve ser PascalCase (a primeira letra do identificador é


maiúscula e a primeira letra de cada identificador subseqüente concatenado
é maiúscula), e começar com o prefixo “I”, para indicar que o tipo é uma
interface.

Exemplo:

IServiceProvider

Métodos

Utilizar a definição PascalCase.

Enumerações

Utilizar a definição PascalCase.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Eventos

Utilizar a definição PascalCase para o nome do evento.

Utilizar o sufixo EventHandler para o nome do delegate associado ao


evento. Especificar dois parâmetros “sender” e “e”. O parâmetro “sender”
representa o objeto que disparou o evento e deve ser sempre do tipo
Object, mesmo sendo possível utilizar um tipo especifico. O estado
associado com o evento é encapsulado em uma instancia de um evento de
classe chamado “e”.

Exemplos:

public delegate void MouseEventHandler (object sender,


MouseEventArgs e)

public event MouseEventHandler Click;

Constantes

Nomes de constantes deverão ser todos maiúsculos com as palavras


separadas por um underscore.

Exemplo:
A2A_MAX

Exceções

O nome de uma classe de exceção deve utilizar a definição PascalCase, e


finalizar com a expressão Exception, para indicar que o tipo é uma exceção.

Exemplo:

ServiceProviderException

Propriedades públicas

Utilizar a definição PascalCase para o nome de propriedades.

Exemplo:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

public int PrinterStatus

Windows Forms

Abaixo temos a lista de componentes e os prefixos:


Componente Prefixo Exemplo
Assembly asm
Button btn btnExit
Char ch chxxx
CheckBox chk chkReadOnly
CheckedListBox clb clbOptions
ColorDialog cld cldText
ComboBox cbo cboEnglish
Container ctr
ContextMenu cmn cmnOpen
CrystalReportViewer rpt rptSales
DataColumn dcol
DataGrid grd grdQueryResult
DataGridDateTimePickerCol dgdtpc
umn
DataGridTableStyle dgts
DataGridTextBoxColumn dgtbc
DataReader dreader
DataRow drow
DataTable dtable
Dialog dialog
DialogResult dr
DomainUpDown upd updPages
ErrorProvider err errOpen
Exception ex

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

FontDialog ftd ftdText


Form frm frmEntry
GroupBox grp grpActions
HashTable htbl
HelpProvider hlp hlpOptions
HScrollBar hsb hsbMove
ImageList ils ilsAllIcons
Label lbl lblHelpMessage
LinkLabel lnk lnkEmail
ListBox lst lstPolicyCodes
ListView lvw lvwHeadings
MarshallByRefObject rmt
Mainmenu mm
MDI-Frame frame
MDI-Sheet sheet
Menu mnu mnuFileOpen
MenuItem mi
MonthCalendar mcl mclPeriod
NotifyIcon nti ntiOpen
NumericUpDown nud nudPieces
OpenFileDialog ofd ofdImage
PageSetup Dialog psd psdReport
Panel pnl pnlGroup
PictureBox pic picIcon
PrintDialog ptd ptdText
PrintDocument prn prnText
PrintPreviewControl ppc ppcText
PrintPreviewDialog ppd ppdText
ProgressBar prg prgLoadFile
RadioButton rad radType
RichTextBox rtf rtfReport
SaveFileDialog sfd sfdImage
SDI-Form form

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Splitter Spt sptDivision


StatusBar sta staDateTime
TabControl tbc tbcOptions
TextBox txt txtLastName
Timer tmr tmrAlarm
ToolBar tlb tlbActions
ToolTip tip tipIcons
TrackBar trb trbIndex
TreeView tre treOrganization
UserControl usr
VScrollBar vsb vsbMove
WindowsPrincipal wpl

Objeto de dados

Abaixo temos alguns componentes de comunicação de dados:


Componente Prefixo Exemplo
DataSet dts dtsProducts
DataView dtv dtvConsult
OleDbCommand ocm ocmConsult
OleDbConnection ocn ocnClients
OleDbDataAdapter oda odaClients
SqlCommand scm scmConsult
SqlConnection scn scnClients
SqlDataAdapter sda sdaClients

Variáveis

Veja a lista abaixo de tipos e prefixos:


Tipo Prefixo
String, string str
Boolean bln
Byte byt
Int16, int32 int
Long lng

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Single sgn
Double dbl
Currency cur
Date Time dtm
Variant var
Array ary
User-defined typ
type
Enum enu
Collection col
Object

Web Forms

Veja a lista abaixo de tipos e prefixos:


Tipo Prefixo
AdRotator adrtr
Button btn
Calendar cldr
CheckBox cbx
CheckBoxList cbxl
CompareValidator cvdr
CrystalReportViewer crvwr
DataGrid dgrd
DataList dlst
DropDownList ddl
HyperLink hlnk
Image img
ImageButton ibtn
Label lbl
LinkButton lbtn
ListBox lbx
Literal ltrl
Panel pnl

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

PlaceHolder phdr
RadioButton rbtn
RadioButtonList rbtnl
RangeValidator rvdr
RegularExpressionValidator rev
Repeater rptr
RequiredFieldValidator rfv
Table tbl
TextBox tbx
ValidationSummary vsmy
Xml xml

Considerações

Ao declarar variáveis, procure seguir as considerações abaixo.

Ao invés de:

int a, b;

usar:

int a; // Valor de entrada 1


int b; // Valor de entrada 2

Sempre inicializar suas variáveis no local aonde são declaradas.

int a = 1; Valor de entrada 1

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Comunicação .NET e VB 6.0 – Parte I

Visual Studio.NET 2005

Irei mostrar nesse primeiro passo como usar códigos C#.NET dentro de
uma aplicação VB 6.0. Criei um projeto do tipo Class Library com uma
classe chamada CDados.cs.

Antes de começar segue a famosa frase criptografada e pronta para ser


decifrada. O que conseguir decifrá-la primeiro ganhará um prêmio.

Nf nboeb f-nbjm dpn p ujuvmp tnbmmxjmmf

Bom, para começar irei mostrar como criar um projeto class library com o
visual studio.net 2005. Cliquei no link da página inicial chamado Create
Project e logo depois escolhi a opção Class Library. (Referência 1.1 e 1.2 –
Class Libary)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.1 – Class Library

Cliquei no link que está em vermelho.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.2 – Class Library.

Na aba templates existem várias opções, porém a escolhida e já falado


antes é a Class Library. Essa opção apenas gera uma dll no final da
compilação podendo ser referenciada e usada em outros projetos.

Em seguida criei uma classe chamada CDados.cs. (Referência 1.3 – Class


Library)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.3 – Class Library

Dentro da classe, acrescentei um método apenas para retornar um valor


qualquer, do tipo string. (Referência 1.4 – Class Library)

[ComVisible(true)]
public string TesteDados(string entrada)
{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

return "TesteDados >> " + entrada;


}

Referência: 1.4 – Class Library.

Explicação:
É bem simples e fácil o desenvolvimento. Nada diferente do que sou
acostumado, a não ser por uma linha descrita antes da classe.

[ComVisible(true)]

Referência: 1.5 – Class Library.

Analisando a assinatura do método, o mesmo recebe uma string de entrada


e retorna um valor do tipo string.

Antes da classe tenho que definir em duas linhas algumas coisas que podem
me ajudar quando for usar com o outro aplicativo de outra linguagem como
visual basic 6.0. (Referência 1.6 – Class Library)

[Guid("49C0145D-ABC4-4c0e-8640-CDA03BE8D733")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class CDados

Referência: 1.6 – Class Library

Explicação:
Primeiramente defini um GUID para a classe, dessa forma não terei
problemas quando registrá-la no usando o comando REGASM. Mas esse
assunto será falado e explicado mais a frente. Para que o VB 6.0 consiga
enxergar o que foi descrito dentro da classe, como método e função, são
necessários colocar a linha de código. (Referência 1.7 – Class Library).

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

[ClassInterface(ClassInterfaceType.AutoDual)]

Referência: 1.7 – Class Library

Lembre-se que se eu for usar algum tipo de dados e valores para retornar,
é necessário referenciar uma dll chamada ADODB, clicando com o botão
direito em cima da pasta referência.

Note como ficou toda classe depois de construída. (Referência 1.8 – Class
Library)

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Runtime.InteropServices;
using System.Text;
using ADODB;

namespace SicoobDados2005
{
[Guid("49C0145D-ABC4-4c0e-8640-CDA03BE8D733")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class CDados
{

[ComVisible(true)]
public string TesteDados(string entrada)
{
return "TesteDados >> " + entrada;

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

}
}
}

Referência: 1.8 – Class Library

Bom, fico por aqui.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Criando HELP

Visual Studio.Net 2003 usando NDOC.

Com essa parte, espero ajudar todos os desenvolvedores que trabalha em


equipe, fabrica de software ou mesmo distribui o código fonte. Hoje em dia,
desenvolvo vários tipos de frameworks para empresas particulares e
públicas que desejam uma documentação ou mesmo um help para ajudar a
outros desenvolvedores quando ocorrer alguma alteração. Essa idéia de
documentar os códigos que desenvolvo é um costume muito bom para que
depois de muito tempo o mesmo código possa estar sendo usado ou
alterado por outra pessoa que nem mesmo participou do projeto no começo
do desenvolvimento.

Existe uma ferramenta que pode estar gerenciando e criando documentação


de todo o projeto, ou seja, do código fonte que foi desenvolvido. O Visual
Studio.Net 2003 possui também uma ferramenta que gera páginas html. É
uma boa ferramenta, mas não mostrarei como usá-la, essa outra
ferramenta NDOC pode gerar paginas html ou mesmo .chm que é a
extensão de um help.

Para utilizar e instalar o NDOC, basta acessar o site


http://ndoc.sourceforge.net/ ou
http://sourceforge.net/project/showfiles.php?group_id=36057 para fazer
download e instalar o mesmo em sua máquina.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Depois de instalado, agora será com o desenvolvedor ou programador. Todo


o código que for digitado dentro da ferramenta Visual Studio.Net 2003 é
ótimo se for documentado; é uma boa prática de programação.

Praticando

Antes de tudo, criei um projeto web no VS 2003 chamado NDoc2003. Criei


uma classe chamada NDoc.cs para mostrar a todos como funciona a
ferramenta NDOC. Desenvolvi apenas um método chamado
VerificarStatus() que retorna uma String qualquer. A figura mostra como
ficou o código digitado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Apenas um for de zero a dez armazenando em uma variável string para


retornar depois. Perceba que a classe está comentada dentro das tags
summary. O código da classe é bem simples e de fácil entendimento.

using System;

namespace NDoc2003
{
/// <summary>
/// Classe NDOC para mostrar ao usuário as boas práticas para ///
documentar
/// o código desenvolvido.
/// </summary>
public class NDoc
{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

private String VerificarStatus()


{
string retorno = null;
for (int i=0; i > 10; i++)
{
retorno += "meu retorno " + i;
}

return retorno;
}
}
}

Esse comentário dentro da tag summary é muito importante para gerar


depois o help com index e pesquisa. Depois de criado o método dentro da
classe NDoc.cs, fui ao início método ou uma linha antes, clique três vezes as
barras ( /// ), que, a ferramenta Visual Studio.Net 2003 já coloca as tags
necessárias para ser comentadas.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Pronto, o método foi comentado descrevendo o que ele faz, quais os


métodos estão referenciando e o tipo de retorno. Depois de comentado,
cliquei com o botão direito em cima do projeto e fui para a opção
propriedades para definir um xml de comentário.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Logo depois, irá aparecer uma outra tela menor chamada Property Pages,
existe uma pasta do lado direito com o nome Configuration Properties e
por último, dentro dessa opção existe um campo chamado XML
Documentation File, coloquei um nome na frente do campo para sair um
arquivo xml depois do projeto compilado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

O nome que escolhi foi NDocXML.xml para a saída dos comentários feitos
dentro do projeto. É bastante interessante isso no Visual Studio.NET; todas
as saídas do projeto, estará dentro deste xml. Depois clique em APLICAR e
depois em OK.
Compilei o projeto e o mesmo gerou um arquivo de acordo com o que foi
solicitado na tela de properties. Segue o mesmo dentro da pasta do projeto.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Depois de instalado, o NDOC fica em seu menu iniciar. Vá até a opção 1.1 e
clique para o programa começar a executar.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Cliquei no programa e abriu uma tela com algumas funcionalidades. É bem


simples utilizar o mesmo.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Existe o botão ADD do lado direito, no começo do programa. Clicando, o


mesmo abrirá uma outra tela menor que serve para indicar ou referenciar a
dll do projeto.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Esse campo Assembly, é para referenciar a DLL do projeto. Clique no botão


com três pontinhos do lado direito ( ... ) e indique a DLL do seu projeto
depois de compilada. Depois disso clique apenas no Ok.
Depois de tudo isso estamos quase lá, para gerar o nosso help. É simples
depois fazer uma configuração para saber se queremos um help ou apenas
documentos web ou help e documentos web. Ainda na tela principal do
NDOC, é necessário mudar alguns parâmetros ou configurações.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

No meu caso, estou querendo que a aplicação crie apenas o help do código
que desenvolvi dentro do projeto, com isso, na opção OUTPUTTARGET
escolhi a o valor HTML HELP. É só clique no botão ao lado de salvar
chamado BUILD.
Depois disso, o build foi completo gerando um arquivo .chm dentro do
diretório indicado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Prontinho, depois disso é só verificar o arquivo .chm.

Espero ter ajudado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Criptografia de String de Conexão no Web.Config

Visual Studio.NET 2005

Mostro como trabalhar com criptografia da string de conexão dentro do


web.config. Dessa forma, qualquer pessoa, lamer, larva, hacker, cracker,
phreaker ou guruque invadir o servidor e tentar abrir o banco de dados
verificando em seu arquivo de configuração web.config; não conseguirá ver
qual o banco de dados, senha e usuário. Com isso a segurança do seu
sistema fica bem mais confiável e prático.

Se ainda não sabe qual a diferença entre eles. Disponibilizei nas referências
abaixo.

Lamer: é o principiante que se acha o máximo. Acabou de ganhar um


micro e já quer invadir os computadores do Pentágono. Normalmente são
odiados pelos Hacker verdadeiros.

Referência: 1.1

Larva: Está se tornando um verdadeiro Hacker. Já consegue desenvolver


suas próprias técnicas para invadir sistemas.

Referência: 1.2

Hacker: Tem conhecimentos reais de programação e de sistemas


operacionais, principalmente o Unix e o Linux, que são os mais usados
pelos servidores da Internet. Conhece quase todas as falhas de segurança
dos sistemas e procura achar novas. Desenvolve suas próprias técnicas e
programas de invação, e despreza as receitas de bolo. Tenta invadir

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

apenas para o conhecimento, geralmente não faz nada com os dados que
conseguiu pegar.

Referência: 1.3

Cracker: É o Hacker do mal, que invade sistemas, rouba dados e arquivos,


números de cartão de crédito, faz espionagem industrial e destrói dados.

Referência: 1.4

Phreaker: Hacker com bons conhecimentos de telefonia que consegue


inclusive fazer chamados internacionais sem pagar, o que lhe permite
desenvolver seus ataques a partir de um servidor de outro país.

Referência: 1.5

Guru: O mestre dos Hackers.

Referência: 1.6

Depois de toda essa definição e conhecendo o inimigo, irei mostrar como


evitar pelo menos uma invasão usando o arquivo de configuração de uma
aplicação totalmente aberto, que é o Web.Config e App.Config.

Bom, antes de tudo segue mais uma frase criptografada para conhecimento
e possibilidade de ganhar prêmios se for descriptografada.

Ftuvep nvjup f nf nboef f-nbjm dpn p ujuvmp: eftdsiruphsbgfj.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Voltando, criei uma class libary para desenvolver um framework, porém não
é necessário criar, só coloque os métodos em uma classe segura e legal.
Utilizo com class libary e adiciono como referência do projeto, dessa forma
fica também seguro o código porque só vai a DLL em si.

Criei uma classe chamada Criptografia.cs. (Referência 1.7)

Referência: 1.7

O primeiro método que irei criar é o que pega os valores do arquivo de


configuração e descriptografa. (Referência 1.8)

/// <summary>
/// Método que descriptografa dados
/// Pega do App.config ou Web.Config automaticamente
/// </summary>
/// <returns></returns>
public string DecryptConnectionString()
{
Byte[] b =

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Convert.FromBase64String(ConfigurationSettings.AppSettings["ConnectionS
tring"]);
string decryptedConnectionString =
System.Text.ASCIIEncoding.ASCII.GetString(b);
return decryptedConnectionString;
}

Referência: 1.8

Explicação:
Não tem muito que explicar no método, mesmo assim tentarei clarear se
tiver alguma coisa obscura. A primeira linha, pego o que está no arquivo de
configuração, converto para FromBase64String deixando a mesma em uma
variável do tipo byte. A segunda linha de código, pego a string do codigo
ASCII passando o valor armazenado na variável anterior e depois só retorno
o valor descriptografado.
Uma dica é: no meu arquivo de configuração está criptografada, no ato de
usar ou conectar no banco de dados, use o método para descriptografar, ou
seja, antes do Open().

Criptografando ConnectionString

Fiz um outro método que é responsável para criptografar a string de


conexão. (Referência 1.9)

/// <summary>
/// Método para encriptografar string de conexao.
/// Pega a conexao passada
/// </summary>
/// <param name="connectionString"></param>
/// <returns></returns>
public string EncryptConnectionString(string connectionString)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

{
Byte[] b =
System.Text.ASCIIEncoding.ASCII.GetBytes(connectionString);
string encryptedConnectionString = Convert.ToBase64String(b);
return encryptedConnectionString;
}

Referência: 1.9

Explicação:
A assinatura do método é um pouco diferente do anterior, agora existe um
parâmetro de entrada do tipo string. Depois, converto a string passada para
o codigo ASCII, armazenando na variável (b) do tipo byte. Converti para
ToBase64 a variável byte, armazenei em uma string e retornei o valor para
quem chamou.

Arquivo de Configuração

Criei uma aplicação WindowForm, toda aplicação desse tipo é


automaticamente usado um arquivo de configuração chamado App.Config.
(Referência 2.0)

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


<configuration>

<appSettings>
<add key="ConnectionString"

value="UGFzc3dvcmQ9MTIzOyBQZXJzaXN0IFNlY3VyaXR5IEluZm89VHJ1ZTs
gVXNlciBJZD1zYTsgSW5pdGlhbCBDYXRhbG9nPUJER0VDT1JFOyBEYXRhIFNv
dXJjZT1zdGYtbHVpcw=="/>
</appSettings>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

</configuration>

Referência: 2.0

Layout da tela (Referência 2.1)

Referência: 2.1

Dados da tela.

Label
Id = Label1
------------------------------------------------------------------------------------
-----
TextBox
Id = textBox2
MultLine = True
------------------------------------------------------------------------------------
------
Label
Id = Label2
------------------------------------------------------------------------------------
------

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

TextBox
Id = textBox1
MultLine = True
------------------------------------------------------------------------------------
-----

Button
Id = button1
Text = button1

Referência: 2.2

Cliquei duas vezes no botão, logo em seguida inclui o seguinte código.


(Referência 2.3)

private void button1_Click(object sender, EventArgs e)


{
string con = (string)
ConfigurationSettings.AppSettings["ConnectionString"];

Cript.Dados.Criptografia cript = new Cript.Dados.Criptografia();

label1.Text = "Descriptografado: " +


cript.DecryptConnectionString();
label2.Text = "Criptografada: " + con;
textBox1.Text = label1.Text;
textBox2.Text = label2.Text;
}

Referência: 2.3

Explicação:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Primeiramente peguei a string de conexão usando o configurationsettings.


Deve ser importado antes a linha: using System.Configuration;
Instanciei o a classe de criptografia criada anteriormente, armazenando a
string descriptografada no label1 e a armazenada no label2.

Resultado final da aplicação criada. (Referência 2.4)

Referência: 2.4

Bom, esse é o resultado final de todo trabalho.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Gravando Erros com Exception - Parte I

Usando arquivo de log.

Irei mostrar como gravar dentro de um arquivo de log, os erros gerados de


dentro da sua aplicação. Nesse primeiro passo irei criar uma classe
chamada AppException.cs com um método chamado LogErro.

Requisitos:
- Ferramenta Visual Studio.NET 2003 ou 2005;
- Conhecimento em escrita de arquivo;
- Conhecimento da linguagem C#.NET.

Criarei usando a IDE 2003 da Microsoft. (Referência 1.1 – Exception Parte I)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.1 – Exception Parte I

Criação da classe (Referência 1.2 – Exception Parte I)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.2 – Exception Parte I

A referência 1.2 apenas mostra a classe que gerei dentro da pasta WEB. No
próximo passo é gerar o método que registra o log dentro do arquivo de
erro.log. (Referência 1.3 – Exception Parte I)

public static void LogError(string message)


{
HttpContext context = HttpContext.Current;
string filePath =
context.Server.MapPath(System.Convert.ToString(System.Configuration.Co
nfigurationSettings.AppSettings["ErrorLogFile"]));
int gmtOffset = DateTime.Compare(DateTime.Now,
DateTime.UtcNow);
string gmtPrefix;
if (gmtOffset > 0)
{
gmtPrefix = "+";

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

}
else
{
gmtPrefix = "";
}
string errorDateTime = DateTime.Now.Year.ToString() +
"." + DateTime.Now.Month.ToString() + "." +
DateTime.Now.Day.ToString() + " @ " + DateTime.Now.Hour.ToString() +
":" + DateTime.Now.Minute.ToString() + ":" +
DateTime.Now.Second.ToString() + " (GMT " + gmtPrefix +
gmtOffset.ToString() + ")";
try
{
System.IO.StreamWriter sw = new
System.IO.StreamWriter(filePath, true);
sw.WriteLine("## " + errorDateTime + " ## " +
message + " ##");
sw.Close();
}
catch
{
}
}

Referência: 1.4 – Exception Parte I

Explicação:
Começando com a assinatura do método.

public static void LogError(string message)

Referência: 1.5 – Exception Parte I

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

É um método publico e estático que não retorna valor algum e recebe um


parâmetro de entrada do tipo string.

HttpContext context = HttpContext.Current;


string filePath =
context.Server.MapPath(System.Convert.ToString(System.Configuration.Co
nfigurationSettings.AppSettings["ErrorLogFile"]));

Referência: 1.6 – Exception Parte I

A referência 1.6 apenas pego a configuração do arquivo que está descrito


dentro do arquivo de configuração web.config. Mostrarei o mesmo mais pra
frente.

int gmtOffset = DateTime.Compare(DateTime.Now, DateTime.UtcNow);


string gmtPrefix;
if (gmtOffset > 0)
{
gmtPrefix = "+";
}
else
{
gmtPrefix = "";
}
string errorDateTime = DateTime.Now.Year.ToString()
+ "." + DateTime.Now.Month.ToString() + "." +
DateTime.Now.Day.ToString() + " @ " + DateTime.Now.Hour.ToString() +
":" + DateTime.Now.Minute.ToString() + ":" +
DateTime.Now.Second.ToString() + " (GMT " + gmtPrefix +
gmtOffset.ToString() + ")";

Referência: 1.7 – Exception Parte I

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

A referência 1.7, configuro apenas as horas, data, segundo e minuto que irá
ser gravado junto ao arquivo de configuração.

try
{
System.IO.StreamWriter sw = new
System.IO.StreamWriter(filePath, true);
sw.WriteLine("## " + errorDateTime + " ## " +
message + " ##");
sw.Close();
}
catch
{
}

Referência: 1.8 – Exception Parte I

Essa última referência 1.8 apenas abre o arquivo e escreve os valores


setados anteriormente dentro do arquivo e fecha.

Bom, fico por aqui.


No próximo passo mostrarei mais algumas configurações e métodos criados
para utilização por completo.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Gravando Erros com Exception no arquivo de log - Parte II.doc

Visual Studio.NET 2005

Estou disposto a ensinar nessa parte II como gravar e mostrar o


funcionamento para gravar o erro gerado em sua aplicação. É muito
importante usar uma funcionalidade dessas na aplicação.

A cada erro que ocorrer dentro do software, site ou sistema interno o


mesmo irá gravar em um arquivo de log, que pode ser visualizado em
qualquer hora. O mesmo mostra a linha, a classe, hora, data e o erro em si
do que aconteceu. Facilita muito para ser resolvido o problema.

A parte I criada anteriormente, pode ser acessada pelo link:


www.aspneti.com ou www.aspneti.com.br

Não posso deixar de falar da nova ferramenta express criada pela Microsoft.
É uma ferramenta grátis para o desenvolvimento e pode ser adquirida via
internet. Tanto o banco de dados quanto a ferramenta de desenvolvimento
pode ser baixada gratuitamente.

http://msdn.microsoft.com/vstudio/express/

Continuando, na parte I mostrei o método principal que escreve dentro do


arquivo de log no diretório do sistema. Nessa parte mostrarei os outros
métodos construtores dentro da classe.

Como já foi falando junto a parte I, criei uma classe chamada


AppException.cs. (Referência 1.1)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.1 – Exception Parte II

Já foi mostrado o método LogError anteriormente explicando linha por linha.


(Referência 1.2 – Exception Parte II)

public static void LogError(string message)


{
HttpContext context = HttpContext.Current;
string filePath =
context.Server.MapPath(System.Convert.ToString(System.Configuration.Co
nfigurationSettings.AppSettings["ErrorLogFile"]));
int gmtOffset = DateTime.Compare(DateTime.Now,
DateTime.UtcNow);
string gmtPrefix;
if (gmtOffset > 0)
{
gmtPrefix = "+";
}
else
{
gmtPrefix = "";
}
string errorDateTime = DateTime.Now.Year.ToString() +
"." + DateTime.Now.Month.ToString() + "." +
DateTime.Now.Day.ToString() + " @ " + DateTime.Now.Hour.ToString() +
":" + DateTime.Now.Minute.ToString() + ":" +
DateTime.Now.Second.ToString() + " (GMT " + gmtPrefix +
gmtOffset.ToString() + ")";
try
{
System.IO.StreamWriter sw = new
System.IO.StreamWriter(filePath, true);

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

sw.WriteLine("## " + errorDateTime + " ## " +


message + " ##");
sw.Close();
}
catch
{
}
}

Referência: 1.2 – Exception Parte II

No passo seguinte, dentro da mesma classe criei os métodos construtores.


(Referência 1.3 – Exception Parte II).

public AppException()
{
//apenas chamo o método para log de erro
LogError("An unexpected error occurred.");
}

public AppException(string message)


{
//chamo o método passando o parâmetro passado na assinatura
do método.
LogError(message);
}

public AppException(string message, Exception


innerException)
{
//mandando a mensagem para o log de erro
LogError(message);
if (innerException != null)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

{
//se a mensagem de exception for diferente de null o mesmo
manda as mensagem para a classe de log de erro.
LogError(innerException.Message);
LogError(innerException.StackTrace);
}
}

Referência: 1.3 – Exception Parte II

Explicação:

Note que a referência 1.3 possui o comentário de todas as linhas dos


métodos construtores. Existem três métodos, um sem parâmetro de
entrada, outro com parâmetro de entrada do tipo string, cujo recebe apenas
uma mensagem e outro método recebendo uma string mensagem e uma
exception, ou seja, uma mensagem do tipo Exception.
Todos os métodos possuem o mesmo nome, isso significa que é sobre
posição de método.

Se tiver alguma dúvida em relação ao código mostrado, leia o comentário


de cada linha.

Configuração

O próximo passo é configurar endereço do arquivo log. Esse arquivo de


configuração dentro da aplicação pode ser o web.config ou o app.config
sem problema algum. (Referência 1.4 – Exception Parte II)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

<appSettings>

<add key="ErrorLogFile" value="~/Errors/ErrorLog.txt" />

</appSettings>

Referência: 1.4 – Exception Parte II

Explicação:

Existe a tag <appSettings> onde posso atribuir qualquer tipo de código ou


endereço que quiser. No meu caso, coloquei uma chave chamada
ErrorLogFile, com o valor indicando o endereço do arquivo .txt. (Referência
1.5 – Exception Parte II).

<add key="ErrorLogFile" value="~/Errors/ErrorLog.txt" />

Referência: 1.5 – Exception Parte II

O arquivo .txt já criado e colocado dentro da pasta Errors não tem nada
dentro. (Referência 1.6 – Exception Parte II)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.6 – Exception Parte II

É um arquivo simples e qualquer.

Pronto, depois e ter o arquivo, criar a classe de appException.cs, criar os


métodos necessários; só falta forçar um erro para mostrar a real
funcionalidade.
Para quem não entendeu direito ou precisa do código da classe inteiro,
segue a referência 1.7 com todo o conteúdo necessário.

using System;
using System.Diagnostics;
using System.Web;

namespace WebChamps.Components.Web
{
/// <summary>

/// </summary>
public class AppException: System.ApplicationException

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

{
public AppException()
{
LogError("An unexpected error occurred.");
}

public AppException(string message)


{
LogError(message);
}

public AppException(string message, Exception innerException)


{
LogError(message);
if (innerException != null)
{
LogError(innerException.Message);
LogError(innerException.StackTrace);
}
}

public static void LogError(string message)


{
HttpContext context = HttpContext.Current;
string filePath =
context.Server.MapPath(System.Convert.ToString(System.Configuration.Co
nfigurationSettings.AppSettings["ErrorLogFile"]));
int gmtOffset = DateTime.Compare(DateTime.Now,
DateTime.UtcNow);
string gmtPrefix;
if (gmtOffset > 0)
{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

gmtPrefix = "+";
}
else
{
gmtPrefix = "";
}
string errorDateTime = DateTime.Now.Year.ToString() +
"." + DateTime.Now.Month.ToString() + "." +
DateTime.Now.Day.ToString() + " @ " + DateTime.Now.Hour.ToString() +
":" + DateTime.Now.Minute.ToString() + ":" +
DateTime.Now.Second.ToString() + " (GMT " + gmtPrefix +
gmtOffset.ToString() + ")";
try
{
System.IO.StreamWriter sw = new
System.IO.StreamWriter(filePath, true);
sw.WriteLine("## " + errorDateTime + " ## " +
message + " ##");
sw.Close();
}
catch
{
}
}
}
}

Referência: 1.7 – Exception Parte II

Na parte III mostrarei como utilizar a classe de erro usando como


componente referenciado.
Espero ter ajudado de alguma forma.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

GridView Parte I

Visual Studio .NET 2005

Mostrarei como desenvolver e usar esse grande componente do Visual


Studio.NET 2005 chamado GridView. Voltando um pouco a história, no ASP
3.0 nenhum componente existia antes para melhorar o nível de codificação
ou a velocidade de desenvolvimento, já no Visual Studio.NET 2003 surgiu
um componente chamado DataGrid que revolucionou o mercado dos
desenvolvedores. Na prática, esse componente acaba virando uma <table>
com vários <tr> e <td>.

Antes de continuar segue uma frase criptografada, se você conseguir


decifrar poderá ganhar um livro.

Nf nboeb f-nbjm dpn p bttvoup hboifj p mjxsp.

Com o novo lançamento do Visual Studio, foi lançado um novo componente


junto da IDE. Vou dizer que é parente do DataGrid porque é bem parecido
em relação ao desenvolvimento. Possibilita as grandes artimanhas para o
programador.
Existem várias formas ou para ser mais exato duas formas fáceis e rápidas
para preencher um GridView: uma é usando o visual e outra usando o
código mesmo. Não irei mostrar nada pelo visual, sinceramente não gosto
programar usando apenas o visual; gosto de saber o que está acontecendo
no código mesmo. Se você quiser usar o visual, existem artigos pela
internet que podem mostrar como utilizar.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.1 GridView

Como posso notar, os componentes estão todos no toolbox igual ao VS


2003, porém agora organizados por funcionalidades e funções. O que está
circulado de vermelho mostra todos os componentes de DATA. O GridView
está selecionado de azul e está ao lado direito da tela.

Mostrarei como editar, deletar dados e preencher grid. Em relação à


conexão com o banco de dados, conexão e select não será mostrada porque
uso um framework de dados que fiz.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Depois que coloquei o componente na tela, irei preenchê-lo.


Fui ao banco de dados e trouxe uma lista de dados chamada dataset.
Para entender, criei uma outra classe responsável para ir ao banco de
dados, ou seja, uma outra camada que é responsável apenas para acessar
os dados e trazê-los.

Código HTML do GridView.

GridView
Id = gdBancoServidor

HTML do GridView
<asp:GridView ID="gdBancoServidor" runat="server" CellPadding="4"
AutoGenerateColumns="False" Width="70%" AllowPaging="True"
GridLines="None"

OnRowEditing="gdBancoServidor_RowEditing"

OnRowCancelingEdit="gdBancoServidor_RowCancelingEdit"

OnRowUpdating="gdBancoServidor_RowUpdating"
DataKeyNames="IdCooperativa"

OnRowDeleting="gdBancoServidor_RowDeleting">
<AlternatingRowStyle
BackColor="#cdcdcd" />
<HeaderStyle
BackColor="#CCCCCC" HorizontalAlign="Left" />
<PagerStyle
HorizontalAlign="Left" />
<Columns>
<asp:TemplateField

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

ShowHeader="false">
<ItemTemplate>
<asp:Label
Visible="false" ID="lblIdCooperativa" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "IdCooperativa")%>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
Visible="false" ID="txtIdCooperativa" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "IdCooperativa") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="NR COOP">
<ItemTemplate>
<asp:Label
ID="lblNumCooperativa" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "NumCooperativa")%>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
ID="txtNumCooperativa" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "NumCooperativa") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

HeaderText="BANCO DE DADOS">
<ItemTemplate>
<asp:Label
ID="lblInitialCatalog" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "InitialCatalog") %>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
ID="txtInitialCatalog" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "InitialCatalog") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
ShowHeader="true" HeaderText="SERVIDOR">
<ItemTemplate>
<asp:Label
ID="lblDataSource" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "DATASOURCE") %>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
ID="txtDataSource" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "DATASOURCE") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

ShowHeader="true" HeaderText="AMBIENTE">
<ItemTemplate>
<asp:Label
ID="lblIdAmbiente" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "IdAmbiente") %>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
ID="txtIdAmbiente" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "IdAmbiente") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>

<asp:CommandField
ButtonType="Button" CancelText="C" DeleteText="D" EditText="E"
HeaderText="A&#199;&#195;O"
InsertVisible="False"
ShowDeleteButton="true" ShowEditButton="True" UpdateText="A" />
</Columns>
<PagerSettings
Mode="NumericFirstLast" Position="TopAndBottom"
FirstPageText="Primeira" LastPageText="&#218;ltima" />
</asp:GridView>
Referência: 1.2 GridView

A referência 1.2 GridView é bem particular porque o mesmo mostra apenas


os campos do meu bando de dados. Serve como exemplo onde você possa
seguir e desenvolver o seu.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Código Behing

No próximo passo é preencher o grid utilizando o código C#.NET.


No método Load coloquei o seguinte código: (Referência 1.3 GridView)

if (!Page.IsPostBack)
{
PreencheGridView();
}

Referência: 1.3 GridView

Logo depois criei o método da referência 1.3 GridView.

/// <summary>
/// Método que preenche o grid view
/// </summary>
private void PreencheGridView()
{
//instanciando método dentro da página.
//camada de cima.
ConfigurarConexao config = new ConfigurarConexao();

this.gdBancoServidor.DataSource =
config.SelecionarConfiguracaoOffLine();
this.gdBancoServidor.DataBind();
}

Referência: 1.4 GridView

Explicação:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

É simples, fácil e prático. Chamei o método SelecionarConfiguracaoOffLine()


que é responsável para trazer os dados como DataSet. Depois de pegar os
dados e vincular ao DataSource do GridView, só chamar o DataBind(). Não
é diferente do componente DataGrid do VS 2003.

O método SelecionarConfiguracaoOffLine() faz o seguinte: Conecta no


banco de dados, faz o select na tabela de dados e retorna os campos que
irei preencher no GridView como DataSet, apenas isso.

Executei o código e mesmo foi preenchido automaticamente. (Referência


1.5 GridView)

Referência: 1.5 GridView

Bom, fico por aqui e espero ter ajudado. Na segunda parte mostrarei como
editar e deletar dados gridview.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

GridView Parte II

Visual Studio.NET 2005

Olá pessoal, estarei aqui para mostrar como editar montando o método
RowEditing e RowUpdating. De certa forma é bem simples e legal de usar.
Em um projeto web que fiz para um banco, tive que guardar como controle
os dados antes de ser mudados, ou seja, tive que pegar os dados anteriores
e os dados atuais editados pelo usuário para gravar em uma tabela de
controle e log.

Bom, essa é uma continuação da parte I, se ainda não leu, por favor, leia e
entenda como foi feito anteriormente. Nessa parte anterior, mostrei como
preencher o GridView, veja como ficou. (2.1 GridView Parte II)

Referência: 2.1 GridView Parte II

Explicação:
Entro com os dados e clico no botão “Salvar”, o GridView mostra os dados
que foram gravados no banco de dados. Muito simples e fácil para
desenvolver.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Editar

Quando for editar os campos do meu GridView, deve ser feito antes de tudo
o html para saber quais os campos serão editados. No meu caso, defini
todos os meus campos do Grid para serem editados.

<Columns>
<asp:TemplateField
ShowHeader="false">
<ItemTemplate>
<asp:Label
Visible="false" ID="lblIdCooperativa" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "IdCooperativa")%>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
Visible="false" ID="txtIdCooperativa" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "IdCooperativa") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="NR COOP">
<ItemTemplate>
<asp:Label
ID="lblNumCooperativa" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "NumCooperativa")%>
</asp:Label>
</ItemTemplate>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

<EditItemTemplate>
<asp:TextBox
ID="txtNumCooperativa" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "NumCooperativa") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="BANCO DE DADOS">
<ItemTemplate>
<asp:Label
ID="lblInitialCatalog" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "InitialCatalog") %>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
ID="txtInitialCatalog" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "InitialCatalog") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
ShowHeader="true" HeaderText="SERVIDOR">
<ItemTemplate>
<asp:Label
ID="lblDataSource" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "DATASOURCE") %>
</asp:Label>
</ItemTemplate>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

<EditItemTemplate>
<asp:TextBox
ID="txtDataSource" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "DATASOURCE") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
ShowHeader="true" HeaderText="AMBIENTE">
<ItemTemplate>
<asp:Label
ID="lblIdAmbiente" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "IdAmbiente") %>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
ID="txtIdAmbiente" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "IdAmbiente") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>

<asp:CommandField
ButtonType="Button" CancelText="C" DeleteText="D" EditText="E"
HeaderText="A&#199;&#195;O"
InsertVisible="False"
ShowDeleteButton="true" ShowEditButton="True" UpdateText="A" />
</Columns>
Referência: 2.2 GridView Parte II

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Dentro da tag <Columns> existem as tags <ItemTemplate> e


<EditItemTemplate>. (Referência 2.3 GridView Parte II)

<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:Label
Visible="false" ID="lblIdCooperativa" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "IdCooperativa")%>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
Visible="false" ID="txtIdCooperativa" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "IdCooperativa") %>'>
</asp:TextBox>
</EditItemTemplate>

Referência: 2.3 GridView Parte II

Todo campo de dentro da Tag <EditItemTemplate> existe um textbox onde


o mesmo pode ser alterado ou editado.Para não ter um campo editado, é só
tirar a tag <EditItemTemplate> com todo o seu conteúdo.

Cliquei no mode design, selecionei o GridView, logo depois em propriedades


e no campo Events. Esse componente mudou um pouco em relação ao
antigo DataGrid. Agora o modo para fazer a edição, cliquei no método
RowEditing onde é redirecionado automaticamente ao code behing.(2.4
GridView Parte II).

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 2.4 GridView Parte II

Code Behing
Indo para o code behing digitei o código de referência 2.5 GridView Parte II.

/// <summary>
/// Método que transforma os dados em campos para serem editados
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gdBancoServidor_RowEditing(object sender,
GridViewEditEventArgs e)
{
this.gdBancoServidor.EditIndex = e.NewEditIndex;
PreencheGridView();
}

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 2.5 GridView Parte II

Explicação:

Depois que coloquei o comando e.NewEditIndex, mandei preencher o grid


novamente. Note que fiz um método específico para buscar os dados e
preenchê-lo. O método chama PreencheGridView().
O que esse método faz é apenas abrir o banco de dados, fazer o select e
retornar os dados do tipo DataSet.Usando o Edit os campos editáveis irão
se tornar campos textBox onde o cliente ou usuário poderá mudar o valor.

Seguindo com a aplicação, agora utilizo da mesma forma, porém chamo


outro método chamado RowUpdating. (Referência 2.4 GridView Parte II).
Cliquei no RowUpdating e digitei o código. (2.6 GridView Parte II)

/// <summary>
/// Método que atualiza os dados informados pelo cliente.
/// Os mesmos sao enviados para um camada de negocio
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gdBancoServidor_RowUpdating(object sender,
GridViewUpdateEventArgs e)
{
//capturando os valores
GridViewRow gvr = this.gdBancoServidor.Rows[e.RowIndex];
string txtIdCooperativa =
((TextBox)gvr.FindControl("txtIdCooperativa")).Text;
string txtNumCooperativa =
((TextBox)gvr.FindControl("txtNumCooperativa")).Text;
string txtInitialCatalog =

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

((TextBox)gvr.FindControl("txtInitialCatalog")).Text;
string txtDataSource =
((TextBox)gvr.FindControl("txtDataSource")).Text;
string txtIdAmbiente =
((TextBox)gvr.FindControl("txtIdAmbiente")).Text;

if
(config.AtualizarCooperativaOffLine(Convert.ToInt32(txtIdCooperativa),
txtNumCooperativa, txtInitialCatalog, txtDataSource,
Convert.ToInt32(txtIdAmbiente)))
{
this.gdBancoServidor.EditIndex = -1;
PreencheGridView();
}
}

Referência: 2.6 GridView Parte II

Explicação:
O método está todo comentado.
O que sempre é difícil quando usa GridView é pegar os dados que foram
editados. Atribui o valor a uma string declarada. (2.7 GridView Parte II)

string txtIdAmbiente = ((TextBox)gvr.FindControl("txtIdAmbiente")).Text;

Referência: 2.7 GridView Parte II

Uso o comando FindControl para pegar o id do campos e atribui a variável


string.

Para atualizar os dados utilizo uma outra classe responsável para acessar o
banco e atualizar os dados. O código 2.8 GridView Parte II passa os dados
para a o método onde atualiza o código do GridView.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

if (config.AtualizarCooperativaOffLine(Convert.ToInt32(txtIdCooperativa),
txtNumCooperativa, txtInitialCatalog, txtDataSource,
Convert.ToInt32(txtIdAmbiente)))
{
this.gdBancoServidor.EditIndex = -1;
PreencheGridView();
}

Referência: 2.8 GridView Parte II

Cancelar

Para cancelar o modo de edição, utilizei a referência 2.4 clicando no events


RowCancelingEdit. É bem simples e fácil. (2.9 GridView Parte II)

/// <summary>
/// Método que cancela a edição e retorna para a forma correta
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gdBancoServidor_RowCancelingEdit(object sender,
GridViewCancelEditEventArgs e)
{
this.gdBancoServidor.EditIndex = -1;
PreencheGridView();
}

Referência: 2.9 GridView Parte II

Explicação:
O código que cancela a edição é apenas o EditIndex = -1 e depois mando
preencher o grid novamente.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

No código HTML do GridView basta colocar a linha. (Referência 3.0 GridView


Parte II).

<asp:CommandField ButtonType="Button" CancelText="C" DeleteText="D"


EditText="E" HeaderText="A&#199;&#195;O"
InsertVisible="False"
ShowDeleteButton="true" ShowEditButton="True" UpdateText="A" />

Referência: 3.0 GridView Parte II

Código em funcionamento

Referência: 3.1 GridView Parte II

Cliquei no Editar.

Referência: 3.2 GridView Parte II

Cliquei no Cancelar

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 3.3 GridView Parte II

Mudando os dados

Referência: 3.4 GridView Parte II

Valor mudado

Referência: 3.5 GridView Parte II

Bom, eu fico por aqui.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

GridView Parte III

Visual Studio .NET 2005

Mostrarei nessa parte III como deletar dados usando o novo componente da
IDE 2005 da Microsoft chamado GridView.

É uma seqüência que necessita seguir passo a passo.

Parte I:
http://www.aspneti.com/visualizar/downloadArtigo.aspx?ch_artigos=152

Parte II:
http://www.aspneti.com/visualizar/downloadArtigo.aspx?ch_artigos=155

<asp:GridView ID="gdBancoServidor" runat="server" CellPadding="4"


AutoGenerateColumns="False" Width="70%" AllowPaging="True"
GridLines="None"

OnRowEditing="gdBancoServidor_RowEditing"

OnRowCancelingEdit="gdBancoServidor_RowCancelingEdit"

OnRowUpdating="gdBancoServidor_RowUpdating"
DataKeyNames="IdCooperativa"

OnRowDeleting="gdBancoServidor_RowDeleting">
<AlternatingRowStyle
BackColor="#cdcdcd" />
<HeaderStyle

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

BackColor="#CCCCCC" HorizontalAlign="Left" />


<PagerStyle
HorizontalAlign="Left" />
<Columns>
<asp:TemplateField
ShowHeader="false">
<ItemTemplate>
<asp:Label
Visible="false" ID="lblIdCooperativa" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "IdCooperativa")%>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
Visible="false" ID="txtIdCooperativa" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "IdCooperativa") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="NR COOP">
<ItemTemplate>
<asp:Label
ID="lblNumCooperativa" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "NumCooperativa")%>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
ID="txtNumCooperativa" runat="server"
Text='<%#

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

DataBinder.Eval(Container.DataItem, "NumCooperativa") %>'>


</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="BANCO DE DADOS">
<ItemTemplate>
<asp:Label
ID="lblInitialCatalog" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "InitialCatalog") %>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
ID="txtInitialCatalog" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "InitialCatalog") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
ShowHeader="true" HeaderText="SERVIDOR">
<ItemTemplate>
<asp:Label
ID="lblDataSource" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "DATASOURCE") %>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
ID="txtDataSource" runat="server"
Text='<%#

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

DataBinder.Eval(Container.DataItem, "DATASOURCE") %>'>


</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField
ShowHeader="true" HeaderText="AMBIENTE">
<ItemTemplate>
<asp:Label
ID="lblIdAmbiente" runat="server">
<%#
DataBinder.Eval(Container.DataItem, "IdAmbiente") %>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
ID="txtIdAmbiente" runat="server"
Text='<%#
DataBinder.Eval(Container.DataItem, "IdAmbiente") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>

<asp:CommandField
ButtonType="Button" CancelText="C" DeleteText="D" EditText="E"
HeaderText="A&#199;&#195;O"
InsertVisible="False"
ShowDeleteButton="true" ShowEditButton="True" UpdateText="A" />
</Columns>
<PagerSettings
Mode="NumericFirstLast" Position="TopAndBottom"
FirstPageText="Primeira" LastPageText="&#218;ltima" />
</asp:GridView>

Referência: 3.0 – GridView Parte III

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

O código do grid está na referência 3.0 onde existe uma linha que é
importante para o exemplo que irei mostrar a seguir. (Referência 3.1 –
GridView Parte III)

DataKeyNames="IdCooperativa"

Referência: 3.1 – GridView Parte III

A referência 3.1 chamada DataKeyNames com o valor IdCooperativa,


significa que a chave da tabela onde pode ser apagada está com o nome
IdCooperativa. O código que irá pegar a chave para deletar o registro, vai
ser desse campo.

No laytout da página mostra dois botões. Um com o texto para o usuário


ver “E” e outro “D”, ou seja, Editar e Deletar. (Referência 3.2 – GridView
Parte III).

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 3.2 – GridView Parte III

Como falado anteriormente, mostrarei como apagar um dado que está


aparecendo no componente no clique do botão “D”. Cliquei com botão
direito em cima do grid e logo depois em “properties”. Em seguida, cliquei
no ícone “events” que parece um raiozinho. A propriedade que agora é
usado chama-se RowDeleting. Cliquei duas vezes na mesma e foi criado
um método automaticamente “gdBancoServidor_RowDeleting”.

Método RowDeleting

/// <summary>
/// Método que pega o valor e manda para a camada acima para deletar

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

/// o valor informado da tabela.


/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void gdBancoServidor_RowDeleting(object sender,
GridViewDeleteEventArgs e)
{
string idCooperativa =
this.gdBancoServidor.DataKeys[e.RowIndex]["IdCooperativa"].ToString();

if (config.ExcluirCooperativaOffLine(Convert.ToInt32(idCooperativa)))
{
this.gdBancoServidor.EditIndex = -1;
PreencheGridView();
}
}

Referência: 3.3 – GridView Parte III

Explicação:

Para pegar o valor chave do grid, atribui a uma string para utilizá-la mais
abaixo. (Referência 3.4 – GridView Parte III)

string idCooperativa =
this.gdBancoServidor.DataKeys[e.RowIndex]["IdCooperativa"].ToString();

Referência: 3.4 – GridView Parte III)

Pego o DataKeys, ou seja, o valor do campo chave. O [e.RowIndex] é o


valor da linha clicada, para não pegar todos ou só o primeiro item de chave.
O [“idCooperativa”] é o nome do campo que quero pegar. Dessa forma,
todo o valor fica armazenado na string idCooperativa.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

A segunda parte do código, só chama o método que exclui o valor passando


a chave cujo é necessário. Dentro desse código, conecto no banco de
dados, adiciono o valor ao parâmetro sql, e mando executar. O mesmo
retorna valor do tipo Boolean, ou seja, true ou false. (Referência 3.5 –
GridView Parte III)

if (config.ExcluirCooperativaOffLine(Convert.ToInt32(idCooperativa)))
{
this.gdBancoServidor.EditIndex = -1;
PreencheGridView();
}

Referência: 3.5 – GridView Parte III

Se o mesmo retornar true, mando preencher o grid novamente. Esse


método ExcluirCooperativaOffLine é uma outra camada que também utiliza
outra camada para excluir os valores, ou seja, três camadas. O intuito é
mostrar como utilizar o gridView e não como conectar ou executar
parâmetros no PL SQL.

Funcionamento

Depois do grid preenchido, irei excluir a linha do primeiro valor 0002.


(Referência 3.6 – GridView Parte III)

Referência: 3.6 – GridView Parte III

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Cliquei no botão “D” (deletar) e o grid preencho novamente apenas com


dois registros no banco de dados. (Referência 3.7 – GridView Parte III)

Referência: 3.7 – GridView Parte III

Bom, fico por aqui.


Qualquer coisa, estamos ai.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Imprimir com Visual Studio.NET 2005 usando C#.NET.

É importante falar antes de tudo que para imprimir é muito fácil, o ato em
si é muito fácil e simples, porém o devemos fazer algumas coisas para
melhorar o processo ou forma de fazer o mesmo.
Para começar o artigo definitivamente, não posso deixar de criptografar
mais uma frase a vocês. Tente decifra-la.

Dpnvojebef BTQOFUj.dpn

Veja que estou usando verdadeiramente o Visual Studio.NET 2005.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Essa ferramenta é muito poderosa e de fácil desenvolvimento. Mesmo para


uma pessoa que nunca desenvolveu nenhuma linha de código, fica fácil
desenvolver qualquer tipo de sistema autorizado e dinâmico. Navegava no
fórum da MSDN e percebi que muitas pessoas estavam começando ou
migrando para essa ferramenta. Por exemplo, pessoas que programavam
com Visual Basic 6.0 e passaram para o VS 2005. A essas pessoas, é
importante informar que o ambiente agora é WEB e de fácil manuseio.
Lógico que o ambiente windows também existem, mas estarei falando do
WEB. Lembro quando programava com Visual Basic e tinha que mandar
comandos para abrir o dialog e montar uma forma de impressão na mão
quando não usava Crystal Report.

Hoje em dia o nosso cliente, ou seja, o browser como IE ou outros do


mercado que gerencia isso em meu sistema.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Criei uma página chamada index.aspx cujo adicionei dois divs e um botão
para imprimir. Quando o cliente ou usuário clicar no botão imprimir, o
mesmo abrirá a caixa pedindo para informar a quantidade de impressão ou
mesmo em qual impressora imprimir. Usando a programação em C#.NET
segue o código para ver o exemplo.

Segue o código da página:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class index : System.Web.UI.Page


{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void cmdImprimir_Click(object sender, EventArgs e)
{
Response.Write("<script>window.print();</script>");
}
}

Apenas a linha da cor vermelha mostra como chamar a impressora e


imprimir o conteúdo da página. Cliquei F5 e inicei o sistema normalmente,
depois de clicar o botão IMPRIMIR que aparece na tela abaixo:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Bem simples e fácil. Agora usando HTML, vou gerar uma impressão
dinâmica como imprimir a página sem o titulo que está na página. Criei
outro botão para fazer o mesmo que chama cmdImprimirHTML. Veja a
idéia dessa impressão:

Um botão html onde chama uma função que esconde o titulo da pagina,
mando imprimir e depois mando o mesmo aparece novamente imprimindo
apenas o conteúdo. Segue o código da página para análise.

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="index.aspx.cs" Inherits="index" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Imprimir</title>
<script language=javascript>
function imprimir(){
window.titulo.style.display="none";
window.print();
window.titulo.style.display="";
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="titulo">
Título da página
</div>
<br /><br />
<div id="conteudo">
conteúdo da página
</div>
<br /><br />
<asp:Button ID="cmdImprimir" Text="Imprimir" runat="server"
OnClick="cmdImprimir_Click" />
&nbsp;
<input type="button" name="cmdImprimirHTML"
onclick="imprimir()" value="Imprimir HTML" />
</form>
</body>
</html>

Note o código que está em vermelho.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Note que depois de clicar em imprimir, o titulo da página sumiu e logo após
apareceu com o dialog de impressora.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Com isso, a mesma irá imprimir sem o titulo.


Espero ter ajudado e agradeço a todos.

Qualquer dúvida estou a disposição para ajudar.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Label Server Control com Visual Studio.NET 2005.

Olá pessoal antes de começar gostaria de informar que a comunidade


ASPNETI.COM está de portas abertas para receber qualquer colaborador
que deseja publicar artigos, publicar empregos, vídeos on-line
gratuitamente, desenvolver serviços e postar perguntas.

Para acessar o site digite: www.aspneti.com ou www.aspneti.com.br

Referência: 1.1

Existem vários tipos de artigos, postagens, serviços que poderão te ajudar


muito.

Esse novo recurso do label server control é bem significativo para quem não
usa ou não gosta de usar o mouse. Funciona com teclas de atalho mesmo
na web. Antigamente esse dispositivo não existia para softwares de
intranet, internet ou mesmo web.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

O controle para tecla de atalho existe na ferramenta IDE Visual Studio.NET


2005. Para alguém como eu que gosta de tecla de atalho, nota que a
produtividade tanto do desenvolvimento de sistemas quanto algum
atendimento ao cliente é bem mais rápido para a utilização apenas de
teclado.

Para mostrar um exemplo prático, quando for há um banco; exatamente no


caixa onde existe um atendente, verifique se o mesmo usa mouse ou
qualquer dispositivo além do teclado. Para a surpresa de todos, não existe
mouse algum, é tudo feito com tecla de atalho ou o uso da tecla TAB. O
programa que estão usando é chamado de cliente-servidor.

Agora com o sistema WEBFORM pode ter a mesma coisa e daqui pra frente
os sistemas WEBFORMS estarão cada vez mais perto dos sistemas cliente-
servidor e ainda agregando mais funções.

Praticando

Criei um projeto com a ferramenta 2005 e acrescentei o seguinte código:


Página: Default.aspx

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Label Server Control</title>
</head>
<body>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

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


<div>
<asp:Label ID="lblTitulo" runat="server"
AssociatedControlID="txtTitulo"
AccessKey="T"><u>T</u>itulo</asp:Label>
<asp:TextBox ID="txtTitulo" runat="server"></asp:TextBox>
<br /><br />
<asp:Label ID="lblTexto" runat="server"
AssociatedControlID="txtTexto"
AccessKey="e">T<u>e</u>xto</asp:Label>
<asp:TextBox ID="txtTexto" runat="server"></asp:TextBox>
</div>
</form>
</body>
</html>

Agora foi criado alguns atributos da tag <asp:Label onde pode ser
associado uma tecla de atalho automaticamente.

<asp:Label ID="lblTitulo" runat="server" AssociatedControlID="txtTitulo"


AccessKey="T"><u>T</u>itulo</asp:Label>

Referência: 1.2

Na referência 1.2 existe um atributo chamado AssociatedControlID onde é


responsável pela associação do campo, ou seja, o campo que o foco será
posicionado. Outro atributo que também não existia anteriormente é o
AccessKey, o mesmo é responsável em adicionar uma letra do teclado, ou
seja, quando as teclas “ALT” + “T” forem pressionadas o foco do campo
será automaticamente associado para o campo do formulário que foi
vinculado. É bem simples, porém muito útil para o dia a dia.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Antes de fechar o label, adicionei uma palavra “Titulo” apenas para que o
usuário veja o sinal, o código <u> está apenas entre a letra “T”, que serve
apenas para sublinhá-la mostrando para o usuário ou cliente que existe
uma tecla de atalho. No meu caso, escolhi a letra “T”, pode ser escolhido
qualquer tecla.

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


<br /><br />

Referência: 1.3

Não posso deixar de criar o campo TextBox que foi associado pelo label.
Referência 1.3.

Não é apenas a primeira letra que posso associar para uma tecla de atalho
do teclado. Pode ser feito em qualquer letra que preferir. Na referência 1.4
associo sendo a vogal “e”.

<asp:Label ID="lblTexto" runat="server" AssociatedControlID="txtTexto"


AccessKey="e">T<u>e</u>xto</asp:Label>

Referência: 1.4

Com o exemplo da referência 1.4, aperto as teclas “ALT” + “E” e o foco é


automaticamente redirecionado para o campo TextBox chamado “txtTexto”.

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

Referência: 1.5

Mais uma vez, não posso esquecer de adicionar o campo citado pelo
atributo AssociatedControlID.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.6

O exemplo em funcionamento mostra que apertando as teclas de atalhos, o


foco será redirecionado automaticamente para o campo específico.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Misturando dados

Obfuscar dados com Visual Studio.NET 2005

Olá pessoal, a minha intenção é mostrar como é fácil misturar alguns dados
com rapidez e segurança. Mostrarei o exemplo sendo aplicado com
aplicação windows form, porém pode ser usada da mesma forma em vários
outros tipos de aplicações como: web form ou pocketc pc.

Pré-requisitos:

- Visual Studio.NET 2005;


- Conhecimento avançado C#.NET;
- Disposição para aprender e ser pró-ativo.

Antes de tudo, volto com as minhas frases criptografadas, tente


descriptografar e guanhará um prêmio se for um dos primeiros.

Nf nboef f-nbjl dpn p ujuvmp: Eftdsjquphsbgfj b gsbtd


qfsgfjubnfouf.

Para o começo, criei um projeto com o nome de WindowsAplication1.


Dentro dele criei um form chamado Form2.cs. Por enquanto está bem
básico, tente seguir passo a passo.
Na referência 1.1 mostra como foi montado o layout da janela, porém o que
quero mostrar é apenas a funcionalidade em si e para que vá servir daqui
pra frente.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.1

Propriedades do form:

Nome do form: Form2

Objetos de tela:
TextBox
Id = textBox1

TextBox
Id = textBox2

Button
Id = button1
Text = Obfuscador

Button
Id = button2
Text = DesObfuscar

Referência: 1.2

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Com o layout pronto e simples de montar, passo para codificação bruta.


Criei uma classe chamada Obfuscator.cs, que será responsável em codificar
e decodificar o valor passado pela classe anterior.

using System;
using System.Collections.Generic;
using System.Text;

namespace Obfuscator.Application
{
/// <summary>
/// Contém metodos para obfuscar os valores da registry.
/// </summary>
/// <remarks>
/// </remarks>
internal static class Obfuscator
{
private const byte keyObfuscator = (byte)15;

/// <summary>
/// Obfusca valor especificado.
/// </summary>
/// <param name="valor">Valor convertido para bytes para ser
obfuscado.</param>
/// <returns>Array de bytes obfuscado.</returns>
internal static byte[] ObfuscateValue(byte[] valor)
{
byte[] retorno = new byte[valor.Length];

for (int i = 0; i < valor.Length; i++)


{
retorno[i] = (byte)(valor[i] + Obfuscator.keyObfuscator);

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

return retorno;
}

/// <summary>
/// Retorna valor valor limpo para o valor obfuscado especificado.
/// </summary>
/// <param name="valor">Valor Obfuscado.</param>
/// <returns></returns>
internal static byte[] GetClearObfuscatedValue(byte[] valor)
{
byte[] retorno = new byte[valor.Length];

for (int i = 0; i < valor.Length; i++)


{
retorno[i] = (byte)(valor[i] - Obfuscator.keyObfuscator);
}

return retorno;
}

Referência: 1.3

Explicação:

O código em si está todo comentado para entendimento.


Criei uma constante chamada KeyObfuscator com (byte) 15, criei dois
métodos onde uso um para misturar valores e outro para tirar a mistura.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

internal static byte[] ObfuscateValue(byte[] valor)


{
byte[] retorno = new byte[valor.Length];

for (int i = 0; i < valor.Length; i++)


{
retorno[i] = (byte)(valor[i] + Obfuscator.keyObfuscator);
}

return retorno;
}

Referência: 1.4

Na analise da assinatura do método, coloquei internal e recebe um valor do


tipo byte, ou seja o valor que deve ser mandado é todo tipo byte[]. Logo
depois pego a quantidade de caracteres enviados com a linha Length.
Com o próximo passo, faço um for onde pego valor de cada caracter e
somo com o valor de minha constante criada no começo da classe. No final
retorno os dados. Esse método da referência 1.4 é para misturar os dados
passados.

internal static byte[] GetClearObfuscatedValue(byte[] valor)


{
byte[] retorno = new byte[valor.Length];

for (int i = 0; i < valor.Length; i++)


{
retorno[i] = (byte)(valor[i] - Obfuscator.keyObfuscator);
}

return retorno;

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.5

O método da referência 1.5 é para quebrar o valor obfuscado e transformar


em valor normal digitado pelo usuário. Faço à mesma coisa com esse outro
método, pego a quantidade de caracteres passados, depois faço um for
diminuindo o valor de minha constante. Depois retorno o valor.

Programando Form2

Com os botões e texts do form2 já colocados, sigo o passo de programar e


chamar os valores que quero misturar. Cliquei duas vezes em cima button1
e coloquei o código referência 1.6.

private void button1_Click(object sender, EventArgs e)


{
string text1 = textBox1.Text.ToUpper();
byte[] bytesValores = this.encoder.GetBytes(text1);

byte[] aux =
Obfuscator.Application.Obfuscator.ObfuscateValue(bytesValores);
resultado = encoder.GetString(aux) ;
textBox2.Text = resultado;
}

Referência: 1.6

Explicação:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Transformei o valor do TextBox1 para caixa alta atribuindo a uma string


text1. Criei uma variável bytesValores[] atribuindo o valor text1
transformando para pegar o resultado em Bytes com o código
this.encorder.GetBytes(text1).
Criei uma variável com o nome aux, cujo não é aconselhável, pegando o
valor retornado do método ObfuscateValue passando o valor bytesValores;
ou seja; chamo o método criado anteriormente passando o valor
transformado em byte. Com o resultado do mesmo, utilizo o enconder para
pegar o GetString passando o valor aux retornado do método misturador.
Até o momento não falei nada do encorder, falarei mais a frente.

Seguindo para a programação do button2, dei um duplo clique e digitei a


linha de código referência 1.7.

private void button2_Click(object sender, EventArgs e)


{
byte[] bytesValores = this.encoder.GetBytes(resultado);

byte[] obj =
Obfuscator.Application.Obfuscator.GetClearObfuscatedValue(bytesValores);
textBox1.Text = encoder.GetString(obj);
}

Referência: 1.7

Explicação:

Peguei o valor de minha variável resultado armazenada anteriormente


pegando o GetBytes, depois criei uma outra variável com o nome obj do
tipo byte[] atribuindo o retorno do método GetClearObsfuscatedValeu, cujo
foi feito anteriormente. Atribui o valor do obj ao meu Text1 pegando o meu
GetString(obj). Simples, fácil e rápido.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

A referência 1.8 mostra o código o form2.cs todo construído. Inclusive o


enconder comentado anteriormente está declarado no início do código.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private Encoding encoder = new System.Text.UTF8Encoding();
string resultado = string.Empty;

private void button1_Click(object sender, EventArgs e)


{
string text1 = textBox1.Text.ToUpper();
byte[] bytesValores = this.encoder.GetBytes(text1);

byte[] aux =
Obfuscator.Application.Obfuscator.ObfuscateValue(bytesValores);
resultado = encoder.GetString(aux) ;
textBox2.Text = resultado;
}

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

private void button2_Click(object sender, EventArgs e)


{
byte[] bytesValores = this.encoder.GetBytes(resultado);

byte[] obj =
Obfuscator.Application.Obfuscator.GetClearObfuscatedValue(bytesValores);
textBox1.Text = encoder.GetString(obj);
}
}
}

Referência: 1.8

Testando aplicação:

Depois de compilar a aplicação, cliquei F5 e digitei


mauricio@ascompras.com e cliquei no botão OBFUSCADOR. (Referência
1.9)

Referência: 1.9

Depois apaguei o valor do text1, (mauricio@ascompras.com) e cliquei no


botão DesObfuscar, o mesmo pegará o valor do text2 e transformar os
dados mostrando no text1. (Referência 1.10 e 1.11).

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.10

Referência: 1.11

Fico por aqui e espero ter ajudado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Orientação a Objetos com

Visual Studio.NET 2005 (o famoso OO) – parte 1.

Usarei herança de classes, banco de dados SQL SERVER, STORE


PROCEDURE e componente para enviar e-mail.

Em resumo, existe apenas um funcionamento de cadastrar usuários e


enviar e-mail automaticamente para o usuário que foi cadastrado e para
administrador do site ou sistema. Veja a figura 1.1.

Referência: 1.1

A figura 1.1 mostra as classes e objetos criados dentro do sistema.


Prestando atenção no diagrama existem classes que possui uma seta indo
para outra classe. Explicarei mais a frente porque esse desenho e
funcionamento do diagrama. O mesmo foi criado com o Visual Studio.NET

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

2005 depois de todas as classes criadas. Pode ser criado antes ou depois,
não existe problema algum.

Os nomes das classes criados são de um motivo particular, adotei esse


nome apenas para facilitar o entendimento.

DTO: todo nome de classe que no final estiver DTO são apenas atributos
get’s e set’s do formulário da página, ou seja, os atributos serão enviados
da camada de apresentação para a DTO.
DAO: todo nome de classe que no final estiver DAO, possuirá todo método
responsável para inserir no banco de dados ou trazer dados. Por exemplo,
usuarioDAO.cs, terá tudo sobre usuário para inserir, deletar ou atualizar
no banco de dados.

Na figura 1.1, é mostrado duas setas de classes distintas. Isso quer dizer
que, uma classe herda a outra classe. Quando uma classe é herdada de
outra, a mesma recebe todos os atributos e podem ser acessadas
normalmente, ou seja, como se estivesse em mesma classe.
Começando, mostrarei primeiramente a tabela do banco de dados e a
STORE PROCEDURE que criei e estarei utilizando mais a frente. Veja a
figura 1.2 de referência.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.2

O banco de dados é bem simples e com poucos campos para ser


cadastrados. O nome do banco de dados não importa, podes colocar
qualquer nome, porém o nome da tabela é TB_USU_TESTE.
A figura de referência 1.3 mostra a store procedure criada para inserir
dados no banco de dados.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.3

Pronto, depois do banco de dados e STORE PROCEDURE criada, irei direto


para a criação da classe BancoDados.cs onde possui todo o código para
abrir e fechar o banco de dados.
Clicando com o botão direito, adicione um novo componente com o nome
citado anteriormente e coloque o código abaixo. Não posso esquecer de
importar a classe SqlClient para poder conectar no banco de dados.

using System;
using System.Data;
using System.Data.SqlClient;

/// <summary>
/// Classe de banco de dados
/// </summary>
public class BancoDados
{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

protected SqlConnection sConn = new SqlConnection("Initial


Catalog=BANCO DE DADOS; user id=USUARIO ;password=SENHA; Data
Source=SERVIDOR DE BANCO DE DADOS");

/// <summary>
/// Metodo que conecta no banoc de dados
/// </summary>
#region conecta com o banco de dados
public void Conecta()
{
try
{
if (sConn.State==0)
{
sConn.Open();
}
}
catch(Exception e)
{
throw new Exception("Fora:"+ e.Message);
}
}
#endregion

/// <summary>
/// Metodo que desconecta no banco de dados
/// </summary>
#region desconecta com o banco de dados
public void Desconecta()
{
try
{
//if (sConn.State!=0)
//{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

sConn.Close();
//}
}
catch(Exception e)
{
throw new Exception("Fora:"+ e.Message);
}
}
#endregion
}

Pronto, a classe de banco de dados criada, o próximo passo é criar uma


classe que contém os campos do formulário que irá ser inserida no banco.
Clicando com o botão direito, adicione um novo item ou classe chamada
usuarioDTO.cs.
A figura 1.4 mostra a classe citada.

Referência: 1.4

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Esta classe possui apenas as variáveis com get e set de cada uma.
Veja abaixo todos os atributos criados.

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Classe com atributos do form
/// </summary>
public class usuarioDTO
{
String nome;
String email;
String endereco;
String cep;

public String Email


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

public String Endereco


{
get { return endereco; }

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

set { endereco = value; }


}

public String Cep


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

public String Nome


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

Pronto, depois da classe de atributos criada, irei criar o formulário, ou seja,


a camada de apresentação para inserir os campos no banco de dados.
Adicionei um novo item chamado Default.aspx, com alguns campos. Veja
a figura 1.5.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.5

Segue abaixo todo código da pagina.

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"


"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Nome: &nbsp;<asp:TextBox ID="txtNome"

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

runat="server"></asp:TextBox>
<br />
E-mail: &nbsp;
<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox><br />
Endereço:
<asp:TextBox ID="txtEndereco" runat="server" Height="49px"
TextMode="MultiLine" Width="189px"></asp:TextBox><br />
&nbsp;CEP: &nbsp;
<asp:TextBox ID="txtCEP" runat="server"></asp:TextBox><br />
&nbsp; &nbsp;
<br />
&nbsp; &nbsp;
<asp:Button ID="cmbGravar" runat="server" Text="Gravar"
OnClick="cmbGravar_Click" /></div>
</form>
</body>
</html>

Veja a relação:

Nome: txtNome
E-mail: txtEmail
Endereço: txtEndereco
Cep: txtCEP
Botão Gravar: cmdGravar

A figura 1.6 mostra como ficará a página que acabou de ser criada.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.6
Não ligue para o layout por enquanto, estou focando diretamente para a OO
(Orientação a Objetos) e o funcionamento. Espero que até aqui esteja ainda
tudo claro para você leitor.

Clicando com o botão direito no mouse em cima do projeto, adicionei um


nome componente, chamado usuarioDAO.cs. Essa classe é responsável
para inserir os valores dentro do banco de dados, ou seja, a camada de
negócio do sistema.

A figura 1.7 mostra a classe citada anteriormente criada.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Referência: 1.7

Veja o código da classe usuarioDAO.cs.

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

/// <summary>
/// classe que insere usuario no banco de dados, chama de DAO

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

/// </summary>
public class usuarioDAO : BancoDados
{
/// <summary>
/// insere usuario no banco de dados
/// </summary>
/// <param name="usuario"></param>
public Boolean insereUsuarioDAO(usuarioDTO usuario)
{
try
{
getConection();
insereUsuarioNoBanco(usuario);
return true;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}

/// <summary>
/// metodo para inserir usuario no banco de dados
/// </summary>
/// <param name="usuario"></param>
private Boolean insereUsuarioNoBanco(usuarioDTO usuario)
{
try
{
SqlCommand sqlc = new
SqlCommand("SP001_INSERE_USUARIO_TESTE", sConn);
sqlc.CommandType = CommandType.StoredProcedure;
atribuirValores(usuario, sqlc);
sqlc.ExecuteNonQuery();

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

return true;
}
catch (SqlException e)
{
throw new Exception(e.Message);
}
finally
{
getConectionOut();
}

/// <summary>
/// atribuir valores vindo do objeto
/// </summary>
/// <param name="usuario"></param>
/// <param name="sqlc"></param>
private static void atribuirValores(usuarioDTO usuario, SqlCommand
sqlc)
{
sqlc.Parameters.AddWithValue("@NO_USU", usuario.Nome);
sqlc.Parameters.AddWithValue("@EMAIL_USU",
usuario.Email);
sqlc.Parameters.AddWithValue("@END_USU",
usuario.Endereco);
sqlc.Parameters.AddWithValue("@CEP_USU", usuario.Cep);
}

/// <summary>
/// metodo que conecta no banco de dados;
/// </summary>
public void getConection()
{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Conecta();
}

/// <summary>
/// metodo que desconecta do banco de dados
/// </summary>
public void getConectionOut()
{
Desconecta();
}
}

Explicando o código acima:

Primeiramente irei analisar a assinatura da classe.

public class usuarioDAO : BancoDados

Se você estiver pensando, “que coisa estranha esse dois pontos”. Não é
estranho, é normal, essa classe está herdando atributos da classe
BancoDados. Estou usando uma parte da orientação a objetos chamada
herança, ou seja, tudo que estiver em outra classe poderá ser usada na
classe usuarioDAO.
O método principal dessa classe é o seguinte:

/// <summary>
/// insere usuario no banco de dados
/// </summary>
/// <param name="usuario"></param>
public Boolean insereUsuarioDAO(usuarioDTO usuario)
{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

try
{
getConection();
insereUsuarioNoBanco(usuario);
return true;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}

É bem pequeno esse método, porém dentro do bloco try, é utilizado vários
métodos dessa mesma classe. Analisando a assinatura do método, vejo que
é um método público, retorna um tipo de objeto Boolean, ou seja, true ou
false e recebe um objeto chamado usuarioDTO como parâmetro. Se não
estás entendendo, calma que está chegando a hora certa para entender.
Dentro da classe e do bloco try é chamado um método getConection().

/// <summary>
/// metodo que conecta no banco de dados;
/// </summary>
public void getConection()
{
Conecta();
}

Esse método cima é apenas para conectar ao banco de dados. Veja que o
mesmo está chamando um outro método de dentro da classe
BancoDados.cs. Não esqueça que o mesmo está sendo herdado de outra
classe.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

O próximo método chamado é o insereUsuarioNoBanco(usuario);


passando o parâmetro usuário como parâmetro.

/// <summary>
/// metodo para inserir usuario no banco de dados
/// </summary>
/// <param name="usuario"></param>
private Boolean insereUsuarioNoBanco(usuarioDTO usuario)
{
try
{
SqlCommand sqlc = new
SqlCommand("SP001_INSERE_USUARIO_TESTE", sConn);
sqlc.CommandType = CommandType.StoredProcedure;
atribuirValores(usuario, sqlc);
sqlc.ExecuteNonQuery();
return true;
}
catch (SqlException e)
{
throw new Exception(e.Message);
}
finally
{
getConectionOut();
}

Para quem é experiente com .NET, pode perceber que separei todos os
métodos de uma classe em partes pequenas para serem melhores
gerenciados e para melhor manutenção. Separando dessa forma, poderei

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

mudar qualquer método sem que um dependa do outro, ou seja, fica a


independência de código ou de métodos.
Esse método insereUsuarioNoBanco(usuarioDTO usuário) mostra que
está sendo usado uma STORE PROCEDURE como sql. O tipo de comando é
StoreProcedure. A próxima linha, veja que é um método também criado
chamado atribuirValores(usuario, sqlc). Esse método é apenas para
adicionar os valores passados dentro do comando para ser executado.

Veja o método atribuirValores.

/// <summary>
/// atribuir valores vindo do objeto
/// </summary>
/// <param name="usuario"></param>
/// <param name="sqlc"></param>
private static void atribuirValores(usuarioDTO usuario, SqlCommand
sqlc)
{
sqlc.Parameters.AddWithValue("@NO_USU", usuario.Nome);
sqlc.Parameters.AddWithValue("@EMAIL_USU",
usuario.Email);
sqlc.Parameters.AddWithValue("@END_USU",
usuario.Endereco);
sqlc.Parameters.AddWithValue("@CEP_USU", usuario.Cep);
}

Esse método receber o objeto usuarioDTO e o SqlCommand apenas para


adicionar como PARAMETERS de um sql. Continuando, a próxima linha do
método insereUsuarioNoBanco apenas executa o sqlc, fazendo assim
uma inserção no banco de dados dos valores passados.
Dentro do bloco finally, estou usando um outro método criado para fechar a
conexão com o banco de dados.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

/// <summary>
/// metodo que desconecta do banco de dados
/// </summary>
public void getConectionOut()
{
Desconecta();
}

Até agora não vimos como esse parâmetro vai ser passado né, irei mostrar
agora.
Esses valores irão ser passados da camada de apresentação.
Abra o arquivo default.aspx e clique duas vezes no botão GRAVAR.

O código abaixo mostrará como ficará o código.

protected void cmbGravar_Click(object sender, EventArgs e)


{
usuarioDAO dao = new usuarioDAO();
usuarioDTO dto = new usuarioDTO();

setValores(dto);

if (dao.insereUsuarioDAO(dto))
{
Response.Redirect("resultadoFinal.aspx");
}
else
{
Response.Redirect("resultadoFinalErro.asp");
}
}

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Explicando o código acima:


As duas primeiras linhas; estou apenas instanciando as duas classes e
colocando uma variável para cada uma. Uma chamada dao e outra dto.
Logo depois criei um método chamado setValores(dto) passando a dto como
parâmetro. Veja o código abaixo:

/// <summary>
/// metodo para atribuir valores
/// </summary>
/// <param name="dto">objeto dto</param>
private void setValores(usuarioDTO dto)
{
dto.Nome = txtNome.Text;
dto.Endereco = txtEndereco.Text;
dto.Email = txtEmail.Text;
dto.Cep = txtCEP.Text;
}

Esse método apenas seta os valores dos textBox para dentro da dto.
Continuando com o código segue as linhas abaixo.

if (dao.insereUsuarioDAO(dto))
{
Response.Redirect("resultadoFinal.aspx");
}
else
{
Response.Redirect("resultadoFinalErro.asp");
}

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Colocando a variável criada seguindo do (ponto), escolho o


insereUsuarioDAO passando a dto preenchida. Dessa forma, todos os
valores serão passados para a classe.

Clicando F5 para iniciar o sistema veja como os dados serão inseridos no


banco de dados. Veja a figura 1.8.

Referência: 1.8

Preencha os campos e clique gravar. Logo depois podes olhar diretamente


no banco de dados se os mesmos foram inseridos. Se quiser, podes colocar
um break para ir seguindo em cada método.
Não mostrarei esses passos para não ficar maior ainda.
Depois de preencher os dados e clicar no botão, dando tudo certo, o
sistema redirecionará para a página de sucesso. Criei duas páginas só para
mostrar que foi inserido com sucesso ou se deu erro, irá para outra página.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

O nome das duas páginas é: resultadoFinal.aspx e


resultadoFinalErro.aspx.

Veja a figura 1.9.

Referência: 1.9

Não termina aqui. O passo dois; mostrarei como depois de cadastrar os


dados passar e-mail para o usuário cadastrado e para o administrador do
sistema, isso tudo automaticamente. No final da parte 2, estarei
disponibilizando o código fonte do sistema criado.

Espero que tenha gostado, qualquer duvida só mandar e-mail para:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Resources e Internacionalização usando Visual Studio.NET


2005 (Parte I)

Esttou aqui para explicar um pouco sobre a nova maneira de resources e


internacionalização com o Visual Studio.NET 2005. Está mais simples e
robusta a forma de colocar várias línguas dentro do seu sistema web.
Colocarei vários exemplos utilizando três linguagens diferentes como:
inglês, português e espanhol. Usarei a linguagem C#.NET.

Segue a agenda:

Antes de começar na prática, segue uma frase interessante para todos


usando uma criptografia dos tempos antigos. Tente traduzir. Irei
disponibilizar a frase traduzida. Em breve, terá uma promoção para quem
traduzir as frases e mandar um e-mail, ganhará um livro, mas apenas nas
próximas frases e artigos publicados no aspneti.com.

Mbp dpouf b Efvt p ubnboip ept tfvt qspcmfnbt, dpouf bpt tfvt
qspcmfnbt p ubnboip ep tfv Efvt. Bcsbdpt b upept.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Indo para prática

Comecei ante de tudo instalando a ferramenta grátis Visual Studio.NET


Express 2005. O link que onde ser feito download da ferramente free da
Microsoft é: http://msdn.microsoft.com/vstudio/express/

Depois de instalado, criei um projeto chamado mauriciojunior.org, pode ser


escolhido o nome que quiser o que importa é o conteúdo e a forma de
fazer. A primeira tela do projeto é apenas uma amostra de como está todo
o projeto dentro da ferramenta.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Dentro da página default.aspx criei um label chamado lbl, ou seja, com o


ID lbl pronto para ser usado da forma que quiser. O exemplo é simples e
começando do zero mesmo.

Depois disso, cliquei com o botão direito em cima do projeto e fui direto à
opção ADD NEW ITEM ...

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Abriu uma próxima tela onde a escolha do tipo do arquivo será RESOURCE
FILE com o nome MyStrings.resx. No Visual Studio.NET 2005 esse xml é
editado bem melhor do que na forma do 2003, é na realidade é um xml
dentro do seu projeto.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Quando clicar no botão ADD, a ferramenta pergunta se pode adicionar o


resource file dentro da pasta App_GlobalResources, cliquei na botão SIM do
alerta do sistema. Continuando com o projeto, adicionei apenas uma opção
chamada PRINCIPAL com o valor MEU VALOR PRINCIPAL.

Segue o que acabei de descrever acima.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Agora dentro da classe default.aspx.cs, colocarei o meu label recebendo


esse valor para mostrar na tela.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Código:

using System;
using System.Data;
using System.Configuration;
using System.Globalization;
using System.Threading;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

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


{
protected void Page_Load(object sender, EventArgs e)
{
lbl.Text = Resources.MyStrings.PRINCIPAL;
}
}

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Resources e Internacionalização usando Visual Studio.NET


2005 (Parte II)

A parte II, falo e mostro com exemplos funcionais e ilustrativos a primeira


forma de passar uma aplicação para ficar em multi-idiomas, isto é, inglês e
português. Deixo claro que é uma continuação, portanto, verifique
primeiramente a parte I para depois verificar a parte II.

Uso o mesmo exemplo que foi utilizado na parte I criado no dia


13/12/2005. Mostra um sistema que já verifica qual a linguagem da
máquina do usuário e já escolhe qual arquivo .resx utilizar na aplicação.
É de simples entendimento e ainda ficou mais fácil desenvolver com a
ferramenta Visual Studio.NET 2005.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Antes de começar efetivamente, criei outra frase criptografada para você


leitor, verificar e descriptografar. No final da trilogia sobre Resources e
Internacionalização, terá um prêmio para quem descobrir as frases
criptografadas. A dica é: utilizo criptografia dos tempos antigos.

Frase criptografada:
N Uhrtzj Rstchn.MDS ehbnt zhmcz ldjgnq bnl z udqrzn 1994, drstchn
oqz uzjdq.

Anteriormente, criei um arquivo.resx chamado MyString.resx, agora criei


mais um arquivo chamado MyString.en.resx. Da mesma forma que foi feito
o arquivo MyString.resx, deve ser feito o MyString.en.resx. Para não tem
muito re-trabalho, acabei copiando o mesmo e colocando no mesmo
diretório usando a ferramenta, depois apenas renomeei o arquivo para

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

MyString.en.resx. Deixo claro que não é bom nem aconselhável fazer isso
dessa forma. Antes de desenvolver os arquivos, sempre falo que não existe
mágica em relação à programação, ou seja, não tem como o programa
desenvolver uma tradução automática para traduzir o seu sistema ou site. A
não ser que seja feito um framework todo especializado para isso.

Acrescentei algumas chaves e valores dentro do arquivo MyString.resx.

Chave Valor
MEUPC MEU COMPUTADOR
PRINCIPAL MEU VALOR
SEUPC SEU COMPUTADOR

O arquivo MyString.en.resx, coloquei os mesmos nomes porém com


outros valores.

Chave Valor
MEUPC MY COMPUTER

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

PRINCIPAL MY VALUE
SEUPC YOUR PC

Depois de configurar os arquivos da forma que desejei, dentro da classe


default.aspx.cs criei dois labels onde poderei mostrar os valores conforme
configurei anteriormente.

meu pc: <asp:Label ID="lblmeupc" runat="server"></asp:Label>

seu pc: <asp:Label ID="lblseupc" runat="server"></asp:Label>

Segue o código fonte da página default.aspx:

<%@ Page Language="C#" Culture="auto" UICulture="auto"


AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<%@ Register Src="~/include/menu.ascx" TagPrefix="Prefixo"


TagName="menu" %>
<%@ Register Src="~/include/topo.ascx" TagPrefix="Prefixo"
TagName="topo" %>

<html xmlns="http://www.w3.org/1999/xhtml" >


<Prefixo:topo ID="topo" runat=server />

<body topmargin="0" leftmargin="0">


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

<table width=100% border=1>


<tr>
<td valign=top width="190">
<Prefixo:menu ID="menu" runat=server />
</td>
<td valign=top>
meu pc: <asp:Label ID="lblmeupc"
runat="server"></asp:Label>
<br /><br />
seu pc: <asp:Label ID="lblseupc"
runat="server"></asp:Label>
</td>
</tr>
</form>

</body>
</html>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Note no código da página quatro pequenas palavras na primeira linha da


página:
Culture="auto" UICulture="auto", dessa forma coloco a página
pegando a cultura do cliente, ou seja, do browser.
Agora, dentro do código da classe digitei apenas duas linhas de
programação para mostrar ao usuário o que defini nos arquivos .resx.

lblmeupc.Text = Resources.MyStrings.MEUPC;
lblseupc.Text = Resources.MyStrings.SEUPC;

Não assuste, são apenas essas duas linhas de código mesmo. Clique F5 e
irei esperar o resultado. No meu cliente, está configurado para a linguagem
principal PORTUGUÊS. Segue o resultado:

Veja que o mesmo funcionou perfeitamente. Estando em português, o


mesmo pegou os valores do meu arquivo MyString.resx. Preciso definir no
meu cliente outra língua, ou seja, inglês. Siga os passos:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Abra o Internet Explorer, depois menu ferramentas e depois opções da


Internet....

Apareceu uma tela de configurações, existe um botão chamado IDIOMAS.


Cliquei no mesmo e apareceu outra tela.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Defini apenas que a língua INGLÊS (ESTADOS UNIDOS) [en-us] seja a


primeira do meu cliente. Segue a ilustração:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Com isso, apenas simulei que o meu cliente é inglês e não português, ou
seja, imagine que um usuário dos Estados Unidos da América esteja
entrando em seu sistema ou site. Clicando apenas em refresh da página
aberta, note que as descrições foram mudadas para a outra língua.

O próximo da série, mostrarei como é fácil mudar tanto para inglês,


português ou espanhol dentro do seu sistema ou site apenas clicando nos
links: INGLES, PORTGUES, ESPANHOL, com algumas opções mais
avançadas.

Espero ter ajudado a todos. Qualquer dúvida, pode entrar em contato, será
um prazer.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Trabalhando com Cookie usando Visual Studio.NET 2005 (parte


I)

Irei desenvolver para ajudar a todos como trabalhar com cookie usando a
IDE da Microsoft Visual Studio.NET 2005. Para não deixar você sem saber o
que é cookie ou pra que serve isso, fui a um tradutor inglês / português e
digitei:

- cookie = biscoito, bolinho, doce, bolacha; bloco de dados que um servidor


(ou site na Internet) armazena no disco rígido do usuário com fins de
identificação e pesquisa (usado para a promoção de vendas e serviços na
Internet).

Resumindo, armazena algumas informações de uma pessoa ou usuário em


disco rígido do seu computador para identificar, pesquisar ou qualquer outra
coisa que precise dos dados do cliente. Anteriormente, expliquei sobre
session, como armazenar e ler uma session via sistema. O problema da
session, é que todos os dados estarão ativos apenas quando o cliente
estiver aberto, ou seja, o IE ou outros quando se fala de web. WindowForm
ainda não foi abordado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Essa ferramenta criada pela Microsoft é bastante poderosa e rápida para


desenvolver um aplicativo web, window ou mobile, vale a pena.
Irei mostrar como criar um cookie com dados digitados pelo usuário pelo
formulário web, é uma seqüência. Mostrarei como ler do arquivo os dados
informados dentro do disco local do usuário.

Antes de tudo, criei um projeto web chamado website1 com uma página
que possui um formulário e uma classe.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Segue os dados da página:

TextBox
Id = txtNome

TextBox
Id = txtEmail

Button
Id = cmdCriar
Text = Criar Cookie

Para ficar melhor ainda, o código fonte da página está disposto logo em
seguida:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Gerando cookie</title>
</head>
<body>
<form id="formCookie" runat="server">
<div>
<h3>Gerando cookie com VS 2005.</h3>

Nome: <asp:TextBox ID="txtNome"


runat="server"></asp:TextBox> <br />
E-mail: <asp:TextBox ID="txtEmail"
runat="server"></asp:TextBox>
<br /><br />
<asp:Button ID="cmdCriar" Text="Criar Cookie" runat="server"
OnClick="cmdCriar_Click" />
<br /><br />

</div>
</form>
</body>
</html>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Dentro da classe .cs agora, criei um método protected chamado


CriarCookie, passando dois valores; nome e email.

Código fonte:

/// <summary>
/// Método que cria o cookie do seu sistema
/// </summary>
/// <param name="nome">nome qualquer</param>
/// <param name="email">email qualquer</param>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

protected void CriarCookie(string nome, string email)


{
//criando cookie
//esse nome website1 pode ser qualquer nome que quiser, porém,
//é necessário um nome
HttpCookie cookie = new HttpCookie("website1");

//cria cookie com o ip da maquina


cookie.Values.Add("IP", Request.UserHostAddress.ToString());
cookie.Values.Add("NOME", nome);
cookie.Values.Add("EMAIL", email);

//colocando o cookie para expirar daki um dia


cookie.Expires = DateTime.Now.AddDays(1);

Response.AppendCookie(cookie);
}

Explicando código:

HttpCookie cookie = new HttpCookie("website1");

Esta linha cria o cookie dentro do computador de um usuário. Esse nome


website1, foi escolhido por mim, ou seja, pode colocar qualquer nome
dentro desses parênteses, o que quiser colocar.

//cria cookie com o ip da maquina


cookie.Values.Add("IP", Request.UserHostAddress.ToString());

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

cookie.Values.Add("NOME", nome);
cookie.Values.Add("EMAIL", email);

Estas três linhas apenas adicionam valores dentro do arquivo do cookie.


Existe um nome e valor, por exemplo: dentro do meu cookie terá um nome
chamado NOME (em maiúsculo) = ao valor que adicionei.
NOME=MAURICIOJUNIOR, da mesma forma terá um valor para o
EMAIL=MAURICIO@ASPNETI.COM.

//colocando o cookie para expirar daki um dia


cookie.Expires = DateTime.Now.AddDays(1);

Response.AppendCookie(cookie);

A linha EXPIRES significa apenas que esse cookie irá expirar no próximo dia,
ou seja, fiz a soma do dia de hoje mais um. O comando APPENDCOOKIE
apenas gera o cookie, ou seja, efetivamente gera o cookie dentro do pc em
uma pasta meio escondida.

O próximo método é o do botão.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Código fonte:

protected void cmdCriar_Click(object sender, EventArgs e)


{
CriarCookie(txtNome.Text, txtEmail.Text);
}

Nesse método, chamo o outro método para criar o cookie passando os


valores. As próximas figuras mostram o funcionamento da aplicação.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Cliquei no botão gerar cookie, veja a figura com o resultado.


Acessei a pasta e lá está o cookie gerado com os dados dentro.

Espero que tenha gostado e aprendido muito como eu aprendi.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Trabalhando com Cookie (parte II)

Nessa segunda parte, mostrarei como ler o arquivo que foi gerado pela
aplicação e como mostrar o mesmo na tela. Para você que ainda não sabe
direito como fazer, não tenha medo. É mais fácil do que tirar doce de
criança como diz o ditado.

Requisitos:

Tipo de projeto: Web


Ferramenta de desenvolvimento: IDE Microsoft chamada Visual
Studio.NET 2005.
Pessoa: Apenas disposição em seguir os passos.

Não posso deixar de falar sobre essa grande ferramenta de


desenvolvimento que é o Visual Studio.NET 2005. Veio para revolucionar o
mercado com a IDE de desenvolvimento. Para melhorar, a Microsoft criou
uma ferramenta FREE para desenvolver com facilidade e pode ser baixada
pela internet gratuitamente.
Segue o link: http://msdn.microsoft.com/vstudio/express/

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Para lembrar a primeira tela da parte I, segue uma imagem onde


acrescentei um link que chama outra página.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Esse link Ler cookie gerado chama uma página chamada lerCookie.aspx.
No decorrer, mostrarei a especificação da mesma. Não revisarei a parte I de
como criar o cookie e tudo mais, qualquer coisa, existe um link acima que
indica onde pode ser encontrado para leitura e conhecimento.

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Gerando cookie</title>
</head>
<body>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

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


<div>
<h3>Gerando cookie com VS 2005.</h3>

Nome: <asp:TextBox ID="txtNome"


runat="server"></asp:TextBox> <br />
E-mail: <asp:TextBox ID="txtEmail"
runat="server"></asp:TextBox>
<br /><br />
<asp:Button ID="cmdCriar" Text="Criar Cookie" runat="server"
OnClick="cmdCriar_Click" />
<br /><br />
<a href="lerCookie.aspx">Ler cookie gerado</a>
</div>
</form>
</body>
</html>

A única coisa que acrescentei foi à linha de cor verde com o <a href... .
Passei para a página lerCookie.aspx que é bem simples e fácil o
desenvolvimento e entendimento.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Especificação da página:

Label
Id = lblNome

Label
Id = lblEmail

Código fonte:

<%@ Page Language="C#" AutoEventWireup="true"


CodeFile="lerCookie.aspx.cs" Inherits="lerCookie" %>

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >


<head runat="server">
<title>Lendo cookie</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblNome" runat="server"></asp:Label><br />
<asp:Label ID="lblEmail" runat="server"></asp:Label>
</div>
</form>
</body>
</html>

Passei para o código .CS da classe, mostro apenas como pegar o cookie que
gerei e como mostrar na tela.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Código fonte:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class lerCookie : System.Web.UI.Page


{
protected void Page_Load(object sender, EventArgs e)

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

{
LerCookieGerado();
}

private void LerCookieGerado()


{
lblNome.Text = Request.Cookies["website1"]["NOME"].ToString();
lblEmail.Text = Request.Cookies["website1"]["EMAIL"].ToString();
}
}

Explicação:
Note que criei um método chamado LerCookieGerado() do tipo privado e
sem retorno de valor. Dentro do mesmo mostro perfeitamente como pegar
o valor. O código Request.Cookies["website1"]["NOME"] significa: na
primeira chave é o nome do seu cookie, ou seja, website1. Na segunda
chave é o valor que foi atribuído dentro do arquivo.

Funcionamento.
Gerei o cookie.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Cliquei no link ler cookie gerado.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Para testar verdadeiramente o cookie, fechei o browser e abrir novamente


no meu endereço de servidor:
http://localhost:2810/WebSite1/lerCookie.aspx

Note que o mesmo está com as informações da mesma forma.

Dica:
Para quem for gerar cookie com informações especiais ou senhas e
tudo mais, é melhor gerar usando algum tipo de criptografia onde o
usuário não saberá o que a informação pode ser. Usando
criptografia, fica melhor a segurança dos dados e informações de
clientes.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Armazenando dados no ViewState – Parte I

Segue alguns livros que publiquei pela editora Ciência Moderna.

Para quem não sabe o que é ViewState, irá clarear um pouco no seu
desenvolvimento. Antes do começo, segue os pré-requisitos para o
desenvolvimento:

- Visual Studio.NET 2005;


- Linguagem C#.NET;
- Conhecimento com envio de dados.

A IDE desenvolvida pela Microsoft chamada Visual Studio.NET 2005 veio


para revolucionar o mercado em desenvolvimento de software. Para quem
não adquiriu ainda, segue link para download gratuitamente. A versão
express é gratuita e baseada para estudantes, desenvolvedores que estão
começando e outros. Vale a pena conferir.

Além da versão Visual Studio.NET 2005 Express Editions, está disponível a


versão do Express banco de dados SQL SERVER 2005.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Link: http://msdn.microsoft.com/vstudio/express/default.aspx

Seguindo, cliquei no menu HELP, depois em ABOUT MICROSOFT VISUAL


STUDIO. A IDE mostra a ilustração a seguir:

Como dito antes, mostrarei como armazenar os dados OOP (programação


orientado a objetos) no campo ViewState. Percebo que quando executo

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

uma página ASP.NET existe um campo oculto no meu código HTML com o
nome _ViewState, o mesmo é gerado com dados e objetos do formulário
WEB, é basicamente uma lista de nomes e valores que são salvos depois
que a página da um postback, ou é postada.

O _ViewState armazena todos os dados da página ocultamente do HTML,


porém existe algumas limitações, o mesmo só pode armazenar os dados
que são serializados, ou seja, SERIALIZABLE. O ASP.NET compara o
estado de um controle com o seu estado anterior.

Indo para a prática

Na execução dessa primeira página, segue a ilustração de como é


armazenado. Não desenvolvi nenhuma linha de código e o ViewState já está
lá.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Notei e note você também que os dados são criptografados, portanto existe
segurança de dados dentro desse campo _ViewState.

Criei uma outra classe chamada UsuarioTO.cs com alguns dados


declarados do tipo string.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Segue o código:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

using System.Web.UI.HtmlControls;

/// <summary>
/// Classe com campos de usuários
/// </summary>
[Serializable]
public class UsuarioTO
{
string usuario;
string senha;
string dataNascimento;
string email;

public string Email


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

public string DataNascimento


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

public string Senha


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

public string Usuario


{
get { return usuario; }

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

set { usuario = value; }


}

Explicação:

O primeiro de tudo, coloquei a classe do tipo SERIALIZABLE antes da


assinatura. Declare as variáveis necessárias como usuario, senha,
dataNascimento e email, depois gerei GET e SET das mesmas. Se você
ainda não sabe como gerar GET e SET automaticamente com a ferramenta
VS 2005, acesse link abaixo que mostrar como gerar.

http://www.aspneti.com/visualizar/downloadArtigo.aspx?ch_artigos=41

Depois de gerar a classe serializada, criei uma página chamada


Default.aspx onde possui um método que armazena os dados dentro do
viewstate usando a classe UsuarioTO.cs.

Segue a ilustração da classe:

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Código:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

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


{

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

//declarando variavel para ser usada no viewstate


private const string KEY_VIEW_STATE = "__NomeValor";

protected void Page_Load(object sender, EventArgs e)


{

/// <summary>
/// método que armazena os valores dentro do view state
/// </summary>
protected void ArmazenaDados()
{
UsuarioTO to = new UsuarioTO();
to.Usuario = "Mauricio Junior";
to.Senha = "Senha";
to.DataNascimento = "29/07/1982";
to.Email = "mauricio@ascompras.com";

ViewState.Add(KEY_VIEW_STATE, to);
}
}

Explicação:

Criei uma constante chamada KEY_VIEW_STATE com o valor


__NomeValor. Essa variável é o nome de dentro do ViewState. Mais
abaixo existe um método que criei chamado ArmazenaDados() onde
instancio o método da classe UsuarioTO. Armazeno os valores
manualmente por exemplo: to.Usuario = “Mauricio Junior”. A última
linha armazeno propriamente os dados e os valores dentro do ViewState.
ViewState.Add(KEY_VIEW_STATE, to).

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Não posso esquecer de coloca o método ArmazenaDados() dentro do


método Load.

protected void Page_Load(object sender, EventArgs e)


{
ArmazenaDados();
}

Executei o código e o mesmo gerou os valores armazenando dentro do


ViewState. Note que os valores realmente aumentaram.

Por enquanto fica por aqui. Estou à disposição de todos. Mostrarei como
pegar os dados criptografados e exibir na tela usando OOP.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Armazenando Dados no ViewState Parte II

Mostro como pegar os dados do viewstate. A primeira parte foi falado


anteriormente.

Armazenando os dados dentro do ViewState, os tornam mais seguros e


dinâmicos porque são criptografados de uma maneira bem segura. Na
primeira parte, mostro como colocar os dados dentro do campo escondido
chamado ViewState.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Visual Studio.NET 2005

Essa grande ferramenta para desenvolvimento tem ajudado a muitos e


ainda ajudará mais e mais. Existem algumas coisas que precisam ser
mudadas como: fechar a chave automaticamente depois de aberta, colocar
comentários automaticamente na geração de GET e SET e gerar os mesmos
mantendo as declarações no topo da classe. Falo isso porque quando gero
GET e SET, as declarações das variáveis são ficam bagunçadas no meio da
classe, outra no começo e outra no fim.

Direto para a prática

Lembrando o que foi feito antes, gerei uma classe DTO com GETs e SETs,
adicionei os dados dentro da classe e dentro do ViewState. Agora para
pegar os dados, é necessário apenas uma linha de código.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Adicionei os dados e valores dentro do ViewState, apenas nome e valor.

Llinha de como pegar os dados do ViewStates adicionados anteriormente. A


dto ainda está nula, porque ainda não passei totalmente na linha.

Passando pela linha, o valor está lá.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

Veja o tamanho do campo __VIEWSTATE.

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"


value="PV24jR7cu/lFMzlD4iBou7AyHy3WiVUGeFPR5Q6HIIlTMAqL+1nbR0hYj
pZkGnvZ8yvBXcn9Y5WOrGMYtKiM6kCkcD5ZqeUjc5WrhUZ4Jun1bMlaLU9keb
ACFDDyu67CkdrMxoasWGRDQDMBdpW4AtV/0+PWPplnrxZyfeBcQtoAdu812
YdwW0WZuQclWPU7kWcwv4GWfI2zPT7JvwyluJbmEbMJOTL7kCk0kZuGRd29
e4f487qNWX70SkQ/K/oZ5lsLdIUfOKItKH6DbIj3dVRL11qA/pbizX83ncP63sfgr
H333SIVvIogEjm42ukXlF+jlORs4zBm2Bj0GZxdkZTrUKblvo5+O7i+hsAH/Klg
nyb4MBP39kf5WGV6NdHnsyZ3pOUKbz/pOo9s9mIsyyIj1IarloFTz04XYt5dq+
X5z8ctPdzh8MkQcmxTNGOw4roLgg2ORMTrBpxcseNJ0+iFzpJ6P99SIpTkZXy3
wBT5k2FJHwVWDqemYjNHwdC57d4ZDKAghxnTkMv+4snwBig1Y9ujbTS/0fr6
ATipq1gs70A8YFZLzacaMxGMCuyTf50vovrKrxsJ965wXHleMGXtfoPN9a2NK13
tIt2k4C8LofGrrCej008Mp2rdBs5ndDmhyibMs7zU/mTgFRx4NZ31xbJU4UXzx7
URfHrg/FiNPnuSceIIMuX0PTahhyDOADWxuCa4qqFkJdaxQBEpAuXpGwJZmn
P2UMMlOu8wD+FRudw2Pik5dkO5Ow/z5ptGSAI9TnXAL0jDzpyoaDL5wIZQbe
Ks6tI35l8aaGn6SqLdo2UyiIZ+emmhulqcb3+yViLSoTKp5mhSOHFZ3OmG/6
UofjOq1oRp0++QbkouwLKMTLRpFeROkcXWYG4YASk1U73+eUR/yZxfCAfzml
B1QBfChQn6fVR2TkU0OIZGxnoIbtyzI35qITNJcq5Nmw0/V/j0mW5vGhZqVaT
R9Y9+zIigLmHiQncwUbvcE/IT49uWWu8AALDfVRw6tTXbWpQAi/Aq3M0l254
NhKS31SzuZZI2N8iFZrlz98w7GeRpAh8rA3BNpHe6Z5KbIMXSa9RzkJXaJ6t5r
wgtDB1hH0b9a+D44rBmzeqLndAqcfb9XkAEvbX0HhN1SD3Xtv/Nw1Jdrl1jE7

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005

OAirY/qJnSRkLJQ/jC6T+lesfYz/E6sBEhu1F5tA5KX3pFHyBXeZSlSAjFSS/tHl28
E1osR7NgkTuM9jer94T9xhmgU2oMfxMIdpIubmF6PW5CpzUKahaSBQeAYHH
TRUy3hGOCz6vjKGcGqoe7JTDu6kjUmbyCqSdnQrKM/BvZt3UgaXRyLb7PeIpB
QAdR6w+eE+Mj2gMjjQteVsqLgcvRLB/5t6uIrxIPSnqvECxFdIx/TU6aOBnFBfc
kSrnHNh3p4GuuYtf6Fzg7vQfN9oNLtdCfXknu7jhFpyTDkMNhulj5Mu1UCKVhN
QGDkteiI1+dL1tYJCe1v6w+C0ioREbYTlJJosQlshtl9C4psL7gS5WSVH4zmnxz5
oEteuWTUK3GbwbHSDx76p94V4B/F9J2gViGasZwh98bcjKh//hRjudIh4IMYal
kttcYHojjPRcXJm8iOjWpPgR12A==" />

Bom, fico por aqui. Espero ter ajudado a todos. Qualquer coisa pode entrar
em contato.

Este material não pode ser usado em treinamentos e em sala de aula.


http://www.mauriciojunior.org

Você também pode gostar