Curso prático de visual studio net 2005
-
Upload
omar-virguez -
Category
Technology
-
view
1.767 -
download
3
description
Transcript of Curso prático de visual studio net 2005
Curso 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]
Curso 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:
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.
Curso 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.
Curso 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.
Curso 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].
Curso 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:
Curso 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:
Curso 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
Curso 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
Curso 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
Curso 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.
Curso 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:
Curso 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.
Curso 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:
Curso 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";
Curso 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
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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
Curso 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...
Curso 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.
Curso 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.
Curso 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
Curso 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.
Curso 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.
Curso 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
Curso 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
Curso 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");
}
Curso 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>
Curso 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>
Curso 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.
Curso 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:
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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
Curso 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>
Curso 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
Curso 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.
Curso 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
Curso 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
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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();
}
Curso 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.
Curso 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.
Curso 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.
Curso 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
Curso 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>
Curso 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.
Curso 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.
Curso 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
Curso 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;
}
Curso 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.
Curso 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{
Curso 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>";
}
Curso 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
Curso 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
Curso 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.
Curso 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)
Curso 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
{
Curso 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:
Curso 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);
Curso 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();
Curso 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>
Curso 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.
Curso 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.
Curso 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
Curso 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.
Curso 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.
Curso 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.
Curso 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>
Curso 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.
Curso 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
Curso 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.
Curso 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.
Curso 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.
Curso 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
Curso 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()
{
Curso 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",
Curso 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.
Curso 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);
Curso 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.
Curso 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.
Curso 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">
Curso 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>
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
Curso 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.
Curso 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.
Curso 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.
Curso 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());
}
Curso 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.
Curso 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:
Curso 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.
Curso 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.
Curso 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 = "";
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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
{
Curso 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.
Curso 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
Curso 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.
Curso 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.
Curso 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
Curso 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.
Curso 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"
Curso 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"
Curso 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.
Curso 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
Curso 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
Curso 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.
Curso 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.
Curso 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
Curso 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
Curso 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ê.
Curso 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)
Curso 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
Curso 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");
}
Curso 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.
Curso Prático Visual Studio.NET 2005
Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005
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.
Curso 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:
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso Prático Visual Studio.NET 2005
Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005
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.
Curso 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.
Curso 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:
Curso 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.
Curso 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:
Curso 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:
Curso 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;
Curso 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
Curso 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>
Curso 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.
Curso 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:
Curso 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
Curso 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
Curso 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
Curso 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
Curso 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
Curso 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)
Curso 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.
Curso 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)
Curso 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)
{
Curso 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).
Curso 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;
Curso 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.
Curso 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.
Curso 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.
Curso 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
{
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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
Curso 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.
Curso 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 =
Curso 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)
Curso 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>
Curso 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
------------------------------------------------------------------------------------
------
Curso 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:
Curso 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.
Curso 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)
Curso 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)
Curso 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 = "+";
Curso 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
Curso 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
Curso 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.
Curso 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)
Curso 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);
Curso 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)
Curso 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)
Curso 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)
Curso 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
Curso 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)
{
Curso 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.
Curso 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.
Curso 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.
Curso 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
Curso 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
Curso 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
Curso 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ÇÃO"
InsertVisible="False"
ShowDeleteButton="true" ShowEditButton="True" UpdateText="A" />
</Columns>
<PagerSettings
Mode="NumericFirstLast" Position="TopAndBottom"
FirstPageText="Primeira" LastPageText="Ú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.
Curso 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:
Curso 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.
Curso 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.
Curso 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>
Curso 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>
Curso 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ÇÃO"
InsertVisible="False"
ShowDeleteButton="true" ShowEditButton="True" UpdateText="A" />
</Columns>
Referência: 2.2 GridView Parte II
Curso 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).
Curso 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();
}
Curso 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 =
Curso 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.
Curso 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.
Curso 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ÇÃ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
Curso 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.
Curso 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
Curso 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='<%#
Curso 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='<%#
Curso 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ÇÃO"
InsertVisible="False"
ShowDeleteButton="true" ShowEditButton="True" UpdateText="A" />
</Columns>
<PagerSettings
Mode="NumericFirstLast" Position="TopAndBottom"
FirstPageText="Primeira" LastPageText="Última" />
</asp:GridView>
Referência: 3.0 – GridView Parte III
Curso 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).
Curso 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
Curso 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.
Curso 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
Curso 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.
Curso 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.
Curso 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.
Curso 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;
Curso 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:
Curso 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">
Curso 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" />
<input type="button" name="cmdImprimirHTML"
onclick="imprimir()" value="Imprimir HTML" />
</form>
</body>
</html>
Note o código que está em vermelho.
Curso 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.
Curso 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.
Curso 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.
Curso 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>
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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
Curso 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);
Curso 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.
Curso 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;
Curso 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:
Curso 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.
Curso 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;
}
Curso 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).
Curso 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.
Curso 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
Curso 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.
Curso 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.
Curso 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
{
Curso 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)
//{
Curso 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
Curso 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; }
Curso 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.
Curso 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: <asp:TextBox ID="txtNome"
Curso 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:
<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 />
CEP:
<asp:TextBox ID="txtCEP" runat="server"></asp:TextBox><br />
<br />
<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.
Curso 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.
Curso 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
Curso 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();
Curso 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()
{
Curso 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)
{
Curso 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.
Curso 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
Curso 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.
Curso 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");
}
}
Curso 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");
}
Curso 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.
Curso 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:
Curso 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.
Curso 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.
Curso 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 ...
Curso 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.
Curso 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.
Curso 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.
Curso 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;
Curso 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;
}
}
Curso 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.
Curso 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
Curso 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
Curso 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"
Curso 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>
Curso 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:
Curso 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.
Curso 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:
Curso 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.
Curso 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.
Curso 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.
Curso 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:
Curso 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>
Curso 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>
Curso 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());
Curso 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
//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.
Curso 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.
Curso 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.
Curso Prático Visual Studio.NET 2005
Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005
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/
Curso 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.
Curso 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>
Curso 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.
Curso 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" %>
Curso 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.
Curso 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)
Curso 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.
Curso 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.
Curso 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.
Curso 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.
Curso 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
Curso 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á.
Curso 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.
Curso 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;
Curso 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; }
Curso 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:
Curso 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
{
Curso 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).
Curso 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.
Curso Prático Visual Studio.NET 2005
Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org
Curso Prático Visual Studio.NET 2005
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.
Curso 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.
Curso 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á.
Curso 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
Curso 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.