Curso prático de visual studio net 2005

330
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 de Visual Studio.NET 2005 Autor: Maurício Júnior www.mauriciojunior.org www.aspneti.com E-mail: [email protected] [email protected]

description

Curso básico de Visual Studio 2005

Transcript of Curso prático de visual studio net 2005

Page 1: Curso prático de visual studio net 2005

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 de

Visual Studio.NET 2005

Autor: Maurício Júnior www.mauriciojunior.org

www.aspneti.com

E-mail: [email protected] [email protected]

Page 2: Curso prático de visual studio net 2005

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

Nota sobre direitos autorais:

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

diretamente através do site shop.linhadecodigo.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: [email protected] ou através

do site www.aspneti.com.br e www.mauriciojunior.org , mediante ao e-mail

[email protected], 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 [email protected]

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

[email protected].

Visite periodicamente o site shop.linhadecodigo.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.

Page 3: Curso prático de visual studio net 2005

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

• 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 SHOP.LINHADECODIGO.COM.BR.

Page 4: Curso prático de visual studio net 2005

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

PIRATARIA É CRIME, COM PENA DE CADEIA. EU

AGRADEÇO PELA SUA HONESTIDADE. SE VOCÊ COMPROU

UMA CÓPIA DESTE CURSO, DIRETAMENTE EM

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

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

Page 5: Curso prático de visual studio net 2005

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

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 [email protected].

Page 6: Curso prático de visual studio net 2005

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

Anotações:

Page 7: Curso prático de visual studio net 2005

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

Anotações:

Page 8: Curso prático de visual studio net 2005

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

Í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

Page 9: Curso prático de visual studio net 2005

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

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

Page 10: Curso prático de visual studio net 2005

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

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

Page 11: Curso prático de visual studio net 2005

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

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.

Page 12: Curso prático de visual studio net 2005

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

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:

Page 13: Curso prático de visual studio net 2005

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

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

BancoDados.cs.

Page 14: Curso prático de visual studio net 2005

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

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:

Page 15: Curso prático de visual studio net 2005

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

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

Page 16: Curso prático de visual studio net 2005

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

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

Page 17: Curso prático de visual studio net 2005

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

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

Page 18: Curso prático de visual studio net 2005

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

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.

Page 19: Curso prático de visual studio net 2005

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

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.

Page 20: Curso prático de visual studio net 2005

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

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.

Page 21: Curso prático de visual studio net 2005

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

Referência: 1-3

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

Referência: 1-4

Page 22: Curso prático de visual studio net 2005

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

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

Page 23: Curso prático de visual studio net 2005

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

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.

Page 24: Curso prático de visual studio net 2005

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

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.

Page 25: Curso prático de visual studio net 2005

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

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

Page 26: Curso prático de visual studio net 2005

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

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.

Page 27: Curso prático de visual studio net 2005

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

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.

Page 28: Curso prático de visual studio net 2005

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

Referência: 1-11

Page 29: Curso prático de visual studio net 2005

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

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

Page 30: Curso prático de visual studio net 2005

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

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

}

Page 31: Curso prático de visual studio net 2005

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

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>

Page 32: Curso prático de visual studio net 2005

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

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

Page 33: Curso prático de visual studio net 2005

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

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

Page 34: Curso prático de visual studio net 2005

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

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:

Page 35: Curso prático de visual studio net 2005

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

Referência: 2-4

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

inicial do seu projeto. Figura 2-5.

Page 36: Curso prático de visual studio net 2005

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

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.

Page 37: Curso prático de visual studio net 2005

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

Referência: 2-7

Veja agora o menu criado depois que clica com o usuário Admin.

Figura 2-8.

Page 38: Curso prático de visual studio net 2005

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

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.

Page 39: Curso prático de visual studio net 2005

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

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.

Page 40: Curso prático de visual studio net 2005

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

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.

Page 41: Curso prático de visual studio net 2005

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

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.

Page 42: Curso prático de visual studio net 2005

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

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.

Page 43: Curso prático de visual studio net 2005

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

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.

Page 44: Curso prático de visual studio net 2005

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

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.

Page 45: Curso prático de visual studio net 2005

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

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.

Page 46: Curso prático de visual studio net 2005

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

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.

Page 47: Curso prático de visual studio net 2005

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

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

Page 48: Curso prático de visual studio net 2005

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

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>

Page 49: Curso prático de visual studio net 2005

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

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

Page 50: Curso prático de visual studio net 2005

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

{

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.

Page 51: Curso prático de visual studio net 2005

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

Referência: 1.9

Page 52: Curso prático de visual studio net 2005

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

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

Page 53: Curso prático de visual studio net 2005

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

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.

Page 54: Curso prático de visual studio net 2005

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

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.

Page 55: Curso prático de visual studio net 2005

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

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.

Page 56: Curso prático de visual studio net 2005

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

Referência: 1-5.

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

Page 57: Curso prático de visual studio net 2005

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

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();

}

Page 58: Curso prático de visual studio net 2005

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

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.

Page 59: Curso prático de visual studio net 2005

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

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.

Page 60: Curso prático de visual studio net 2005

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

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.

Page 61: Curso prático de visual studio net 2005

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

* 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

Page 62: Curso prático de visual studio net 2005

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

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>

Page 63: Curso prático de visual studio net 2005

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

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.

Page 64: Curso prático de visual studio net 2005

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

Referência: 1-4

Espero que tenha ajudado.

Page 65: Curso prático de visual studio net 2005

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

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

Page 66: Curso prático de visual studio net 2005

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

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;

}

Page 67: Curso prático de visual studio net 2005

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

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.

Page 68: Curso prático de visual studio net 2005

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

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{

Page 69: Curso prático de visual studio net 2005

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

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

}

Page 70: Curso prático de visual studio net 2005

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

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

Page 71: Curso prático de visual studio net 2005

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

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

Page 72: Curso prático de visual studio net 2005

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

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.

Page 73: Curso prático de visual studio net 2005

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

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)

Page 74: Curso prático de visual studio net 2005

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

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

{

Page 75: Curso prático de visual studio net 2005

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

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:

Page 76: Curso prático de visual studio net 2005

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

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

Page 77: Curso prático de visual studio net 2005

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

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();

Page 78: Curso prático de visual studio net 2005

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

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>

Page 79: Curso prático de visual studio net 2005

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

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

Page 80: Curso prático de visual studio net 2005

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

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.

Page 81: Curso prático de visual studio net 2005

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

Referência: 1-4

Referência: 1-5

Page 82: Curso prático de visual studio net 2005

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

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

Referência: 1-6

Espero que tenha ajudado a todos.

Page 83: Curso prático de visual studio net 2005

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

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.

Page 84: Curso prático de visual studio net 2005

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

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.

Page 85: Curso prático de visual studio net 2005

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

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>

Page 86: Curso prático de visual studio net 2005

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

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

Page 87: Curso prático de visual studio net 2005

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

Referência: 1-5

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

Referência: 1-6

Page 88: Curso prático de visual studio net 2005

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

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.

Page 89: Curso prático de visual studio net 2005

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

Referência: 1-8

Espero ter ajudado.

O treeview será desenvolvido com banco de dados SQL Server.

Aguardo e verás mais e mais.

Page 90: Curso prático de visual studio net 2005

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

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.

Page 91: Curso prático de visual studio net 2005

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

Referência: 1.1

Referência: 1.2

Page 92: Curso prático de visual studio net 2005

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

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

{

Page 93: Curso prático de visual studio net 2005

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

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

Page 94: Curso prático de visual studio net 2005

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

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.

Page 95: Curso prático de visual studio net 2005

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

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

Page 96: Curso prático de visual studio net 2005

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

}

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

Page 97: Curso prático de visual studio net 2005

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

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.

Page 98: Curso prático de visual studio net 2005

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

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

Page 99: Curso prático de visual studio net 2005

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

<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

Page 100: Curso prático de visual studio net 2005

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

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.

Page 101: Curso prático de visual studio net 2005

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

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.

Page 102: Curso prático de visual studio net 2005

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

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.

Page 103: Curso prático de visual studio net 2005

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

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());

}

Page 104: Curso prático de visual studio net 2005

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

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.

Page 105: Curso prático de visual studio net 2005

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

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:

Page 106: Curso prático de visual studio net 2005

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

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

Page 107: Curso prático de visual studio net 2005

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

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.

Page 108: Curso prático de visual studio net 2005

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

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

Page 109: Curso prático de visual studio net 2005

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

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.

Page 110: Curso prático de visual studio net 2005

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

Referência: 1-4

Clique em OPEN e espere alguns segundos.

Page 111: Curso prático de visual studio net 2005

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

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.

Page 112: Curso prático de visual studio net 2005

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

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.

Page 113: Curso prático de visual studio net 2005

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

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.

Page 114: Curso prático de visual studio net 2005

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

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

Page 115: Curso prático de visual studio net 2005

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

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

{

Page 116: Curso prático de visual studio net 2005

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

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.

Page 117: Curso prático de visual studio net 2005

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

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

Page 118: Curso prático de visual studio net 2005

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

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

Page 119: Curso prático de visual studio net 2005

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

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.

Page 120: Curso prático de visual studio net 2005

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

Referência: 1.6

Referência: 1.7

Page 121: Curso prático de visual studio net 2005

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

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

Referência: 1.8

Espero que tenham gostado.

Page 122: Curso prático de visual studio net 2005

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

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"

Page 123: Curso prático de visual studio net 2005

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

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"

Page 124: Curso prático de visual studio net 2005

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

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.

Page 125: Curso prático de visual studio net 2005

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

Referência: 1-2

Agora mostrarei o código C#.NET enviando uma imagem pela internet.

Referência: 1-3

Page 126: Curso prático de visual studio net 2005

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

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

Page 127: Curso prático de visual studio net 2005

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

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.

Page 128: Curso prático de visual studio net 2005

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

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.

Page 129: Curso prático de visual studio net 2005

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

Referência: 1-4

Referência: 1-5

Page 130: Curso prático de visual studio net 2005

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

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

pasta images.

Referência: 1-6

Page 131: Curso prático de visual studio net 2005

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

Referência: 1-7

Veja que a figura está dentro da pasta images.

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

Page 132: Curso prático de visual studio net 2005

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

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)

Page 133: Curso prático de visual studio net 2005

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

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

Page 134: Curso prático de visual studio net 2005

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

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

}

Page 135: Curso prático de visual studio net 2005

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

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.

Page 136: Curso prático de visual studio net 2005

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

Page 137: Curso prático de visual studio net 2005

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

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.

Page 138: Curso prático de visual studio net 2005

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

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

figura ilustrativa a seguir:

Page 139: Curso prático de visual studio net 2005

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

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.

Page 140: Curso prático de visual studio net 2005

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

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.

Page 141: Curso prático de visual studio net 2005

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

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.

Page 142: Curso prático de visual studio net 2005

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

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.

Page 143: Curso prático de visual studio net 2005

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

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.

Page 144: Curso prático de visual studio net 2005

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

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.

Page 145: Curso prático de visual studio net 2005

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

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.

Page 146: Curso prático de visual studio net 2005

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

Page 147: Curso prático de visual studio net 2005

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

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.

Page 148: Curso prático de visual studio net 2005

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

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.

Page 149: Curso prático de visual studio net 2005

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

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

Application_BeginRequest

No inicio o pedido de cada request do servidor.

Um request do servidor acontece toda vez que

o browser de alguém inicia ou entra na

aplicação.

Application_EndRequest Fim do pedido de requet, ou seja, quando o

usuário sai da aplicação.

Session_Start Toda vez que um usuário entra na aplicação.

Session_End Quando a sessão é terminada definida pela

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:

Page 150: Curso prático de visual studio net 2005

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

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.

Page 151: Curso prático de visual studio net 2005

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

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:

Page 152: Curso prático de visual studio net 2005

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

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:

Page 153: Curso prático de visual studio net 2005

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

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

e

var = a * b / (c - g + f) +

4 * z;

Page 154: Curso prático de visual studio net 2005

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

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

Page 155: Curso prático de visual studio net 2005

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

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>

Page 156: Curso prático de visual studio net 2005

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

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.

Page 157: Curso prático de visual studio net 2005

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

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:

Page 158: Curso prático de visual studio net 2005

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

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

umn

dgdtpc

DataGridTableStyle dgts

DataGridTextBoxColumn dgtbc

DataReader dreader

DataRow drow

DataTable dtable

Dialog dialog

DialogResult dr

DomainUpDown upd updPages

ErrorProvider err errOpen

Exception ex

Page 159: Curso prático de visual studio net 2005

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

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

Page 160: Curso prático de visual studio net 2005

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

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

Page 161: Curso prático de visual studio net 2005

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

Single sgn

Double dbl

Currency cur

Date Time dtm

Variant var

Array ary

User-defined

type

typ

Enum enu

Collection

Object

col

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

Page 162: Curso prático de visual studio net 2005

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

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

Page 163: Curso prático de visual studio net 2005

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

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)

Page 164: Curso prático de visual studio net 2005

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

Referência: 1.1 – Class Library

Cliquei no link que está em vermelho.

Page 165: Curso prático de visual studio net 2005

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

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)

Page 166: Curso prático de visual studio net 2005

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

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)

{

Page 167: Curso prático de visual studio net 2005

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

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

Page 168: Curso prático de visual studio net 2005

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

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

Page 169: Curso prático de visual studio net 2005

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

}

}

}

Referência: 1.8 – Class Library

Bom, fico por aqui.

Page 170: Curso prático de visual studio net 2005

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

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.

Page 171: Curso prático de visual studio net 2005

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

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.

Page 172: Curso prático de visual studio net 2005

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

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

{

Page 173: Curso prático de visual studio net 2005

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

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.

Page 174: Curso prático de visual studio net 2005

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

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.

Page 175: Curso prático de visual studio net 2005

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

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.

Page 176: Curso prático de visual studio net 2005

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

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.

Page 177: Curso prático de visual studio net 2005

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

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.

Page 178: Curso prático de visual studio net 2005

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

Cliquei no programa e abriu uma tela com algumas funcionalidades. É bem

simples utilizar o mesmo.

Page 179: Curso prático de visual studio net 2005

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

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.

Page 180: Curso prático de visual studio net 2005

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

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.

Page 181: Curso prático de visual studio net 2005

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

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.

Page 182: Curso prático de visual studio net 2005

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

Prontinho, depois disso é só verificar o arquivo .chm.

Espero ter ajudado.

Page 183: Curso prático de visual studio net 2005

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

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

Page 184: Curso prático de visual studio net 2005

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

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.

Page 185: Curso prático de visual studio net 2005

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

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 =

Page 186: Curso prático de visual studio net 2005

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

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)

Page 187: Curso prático de visual studio net 2005

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

{

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>

Page 188: Curso prático de visual studio net 2005

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

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

------------------------------------------------------------------------------------

------

Page 189: Curso prático de visual studio net 2005

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

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:

Page 190: Curso prático de visual studio net 2005

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

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.

Page 191: Curso prático de visual studio net 2005

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

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)

Page 192: Curso prático de visual studio net 2005

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

Referência: 1.1 – Exception Parte I

Criação da classe (Referência 1.2 – Exception Parte I)

Page 193: Curso prático de visual studio net 2005

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

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 = "+";

Page 194: Curso prático de visual studio net 2005

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

}

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

Page 195: Curso prático de visual studio net 2005

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

É 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

Page 196: Curso prático de visual studio net 2005

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

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.

Page 197: Curso prático de visual studio net 2005

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

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)

Page 198: Curso prático de visual studio net 2005

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

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

Page 199: Curso prático de visual studio net 2005

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

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)

Page 200: Curso prático de visual studio net 2005

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

{

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

Page 201: Curso prático de visual studio net 2005

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

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

Page 202: Curso prático de visual studio net 2005

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

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

Page 203: Curso prático de visual studio net 2005

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

{

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)

{

Page 204: Curso prático de visual studio net 2005

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

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.

Page 205: Curso prático de visual studio net 2005

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

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.

Page 206: Curso prático de visual studio net 2005

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

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.

Page 207: Curso prático de visual studio net 2005

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

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

Page 208: Curso prático de visual studio net 2005

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

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

Page 209: Curso prático de visual studio net 2005

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

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

Page 210: Curso prático de visual studio net 2005

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

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.

Page 211: Curso prático de visual studio net 2005

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

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:

Page 212: Curso prático de visual studio net 2005

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

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

Page 213: Curso prático de visual studio net 2005

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

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.

Page 214: Curso prático de visual studio net 2005

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

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>

Page 215: Curso prático de visual studio net 2005

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

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

Page 216: Curso prático de visual studio net 2005

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

<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

Page 217: Curso prático de visual studio net 2005

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

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

Page 218: Curso prático de visual studio net 2005

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

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();

}

Page 219: Curso prático de visual studio net 2005

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

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 =

Page 220: Curso prático de visual studio net 2005

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

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

Page 221: Curso prático de visual studio net 2005

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

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.

Page 222: Curso prático de visual studio net 2005

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

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

Page 223: Curso prático de visual studio net 2005

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

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.

Page 224: Curso prático de visual studio net 2005

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

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

Page 225: Curso prático de visual studio net 2005

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

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='<%#

Page 226: Curso prático de visual studio net 2005

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

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='<%#

Page 227: Curso prático de visual studio net 2005

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

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

Page 228: Curso prático de visual studio net 2005

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

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

Page 229: Curso prático de visual studio net 2005

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

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

Page 230: Curso prático de visual studio net 2005

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

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

Page 231: Curso prático de visual studio net 2005

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

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

Page 232: Curso prático de visual studio net 2005

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

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.

Page 233: Curso prático de visual studio net 2005

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

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.

Page 234: Curso prático de visual studio net 2005

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

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.

Page 235: Curso prático de visual studio net 2005

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

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;

Page 236: Curso prático de visual studio net 2005

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

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:

Page 237: Curso prático de visual studio net 2005

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

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

Page 238: Curso prático de visual studio net 2005

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

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

Page 239: Curso prático de visual studio net 2005

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

Note que depois de clicar em imprimir, o titulo da página sumiu e logo após

apareceu com o dialog de impressora.

Page 240: Curso prático de visual studio net 2005

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

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.

Page 241: Curso prático de visual studio net 2005

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

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.

Page 242: Curso prático de visual studio net 2005

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

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>

Page 243: Curso prático de visual studio net 2005

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

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

Page 244: Curso prático de visual studio net 2005

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

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.

Page 245: Curso prático de visual studio net 2005

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

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.

Page 246: Curso prático de visual studio net 2005

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

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.

Page 247: Curso prático de visual studio net 2005

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

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

Page 248: Curso prático de visual studio net 2005

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

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

Page 249: Curso prático de visual studio net 2005

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

}

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.

Page 250: Curso prático de visual studio net 2005

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

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;

Page 251: Curso prático de visual studio net 2005

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

}

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:

Page 252: Curso prático de visual studio net 2005

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

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.

Page 253: Curso prático de visual studio net 2005

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

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;

}

Page 254: Curso prático de visual studio net 2005

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

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

[email protected] e cliquei no botão OBFUSCADOR. (Referência

1.9)

Referência: 1.9

Depois apaguei o valor do text1, ([email protected]) 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).

Page 255: Curso prático de visual studio net 2005

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

Referência: 1.10

Referência: 1.11

Fico por aqui e espero ter ajudado.

Page 256: Curso prático de visual studio net 2005

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

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

Page 257: Curso prático de visual studio net 2005

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

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.

Page 258: Curso prático de visual studio net 2005

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

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.

Page 259: Curso prático de visual studio net 2005

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

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

{

Page 260: Curso prático de visual studio net 2005

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

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)

//{

Page 261: Curso prático de visual studio net 2005

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

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

Page 262: Curso prático de visual studio net 2005

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

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

Page 263: Curso prático de visual studio net 2005

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

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.

Page 264: Curso prático de visual studio net 2005

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

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"

Page 265: Curso prático de visual studio net 2005

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

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.

Page 266: Curso prático de visual studio net 2005

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

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.

Page 267: Curso prático de visual studio net 2005

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

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

Page 268: Curso prático de visual studio net 2005

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

/// </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();

Page 269: Curso prático de visual studio net 2005

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

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

{

Page 270: Curso prático de visual studio net 2005

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

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)

{

Page 271: Curso prático de visual studio net 2005

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

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.

Page 272: Curso prático de visual studio net 2005

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

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

Page 273: Curso prático de visual studio net 2005

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

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.

Page 274: Curso prático de visual studio net 2005

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

/// <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");

}

}

Page 275: Curso prático de visual studio net 2005

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

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

}

Page 276: Curso prático de visual studio net 2005

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

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.

Page 277: Curso prático de visual studio net 2005

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

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:

Page 278: Curso prático de visual studio net 2005

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

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.

Page 279: Curso prático de visual studio net 2005

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

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.

Page 280: Curso prático de visual studio net 2005

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

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

Page 281: Curso prático de visual studio net 2005

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

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.

Page 282: Curso prático de visual studio net 2005

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

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.

Page 283: Curso prático de visual studio net 2005

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

Agora dentro da classe default.aspx.cs, colocarei o meu label recebendo

esse valor para mostrar na tela.

Page 284: Curso prático de visual studio net 2005

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

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;

Page 285: Curso prático de visual studio net 2005

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

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

{

protected void Page_Load(object sender, EventArgs e)

{

lbl.Text = Resources.MyStrings.PRINCIPAL;

}

}

Page 286: Curso prático de visual studio net 2005

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

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.

Page 287: Curso prático de visual studio net 2005

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

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

Page 288: Curso prático de visual studio net 2005

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

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

Page 289: Curso prático de visual studio net 2005

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

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"

Page 290: Curso prático de visual studio net 2005

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

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

Page 291: Curso prático de visual studio net 2005

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

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:

Page 292: Curso prático de visual studio net 2005

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

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.

Page 293: Curso prático de visual studio net 2005

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

Defini apenas que a língua INGLÊS (ESTADOS UNIDOS) [en-us] seja a

primeira do meu cliente. Segue a ilustração:

Page 294: Curso prático de visual studio net 2005

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

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.

Page 295: Curso prático de visual studio net 2005

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

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.

Page 296: Curso prático de visual studio net 2005

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

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.

Page 297: Curso prático de visual studio net 2005

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

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:

Page 298: Curso prático de visual studio net 2005

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

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

Page 299: Curso prático de visual studio net 2005

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

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>

Page 300: Curso prático de visual studio net 2005

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

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());

Page 301: Curso prático de visual studio net 2005

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

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

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

Page 302: Curso prático de visual studio net 2005

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

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.

Page 303: Curso prático de visual studio net 2005

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

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.

Page 304: Curso prático de visual studio net 2005

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

Page 305: Curso prático de visual studio net 2005

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

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/

Page 306: Curso prático de visual studio net 2005

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

Para lembrar a primeira tela da parte I, segue uma imagem onde

acrescentei um link que chama outra página.

Page 307: Curso prático de visual studio net 2005

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

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>

Page 308: Curso prático de visual studio net 2005

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

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

Page 309: Curso prático de visual studio net 2005

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

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

Page 310: Curso prático de visual studio net 2005

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

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

Page 311: Curso prático de visual studio net 2005

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

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)

Page 312: Curso prático de visual studio net 2005

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

{

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.

Page 313: Curso prático de visual studio net 2005

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

Cliquei no link ler cookie gerado.

Page 314: Curso prático de visual studio net 2005

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

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.

Page 315: Curso prático de visual studio net 2005

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

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.

Page 316: Curso prático de visual studio net 2005

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

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

Page 317: Curso prático de visual studio net 2005

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

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

Page 318: Curso prático de visual studio net 2005

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

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.

Page 319: Curso prático de visual studio net 2005

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

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;

Page 320: Curso prático de visual studio net 2005

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

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

Page 321: Curso prático de visual studio net 2005

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

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:

Page 322: Curso prático de visual studio net 2005

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

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

{

Page 323: Curso prático de visual studio net 2005

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

//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 = "[email protected]";

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

Page 324: Curso prático de visual studio net 2005

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

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.

Page 325: Curso prático de visual studio net 2005

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

Page 326: Curso prático de visual studio net 2005

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

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.

Page 327: Curso prático de visual studio net 2005

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

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.

Page 328: Curso prático de visual studio net 2005

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

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

Page 329: Curso prático de visual studio net 2005

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

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

Page 330: Curso prático de visual studio net 2005

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

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.