Your SlideShare is downloading. ×
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Curso prático de visual studio net 2005
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Curso prático de visual studio net 2005

1,752

Published on

Curso básico de Visual Studio 2005

Curso básico de Visual Studio 2005

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,752
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
121
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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 Curso Prático de Visual Studio.NET 2005 Autor: Maurício Júnior www.mauriciojunior.org www.aspneti.com E-mail: mauricio@ascompras.com mauricio@aspneti.com
  • 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 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: mauricio@ascompras.com ou através do site www.aspneti.com.br e www.mauriciojunior.org , mediante ao e-mail mauricio@aspneti.com.br, diretamente pelo autor. Nenhum outro usuário/email e/ou empresa está autorizada a comercializar este ebook. Ao adquirir este ebook você tem o direito de lê-lo na tela do seu computador e de imprimir quantas cópias desejar. É vetada a distribuição deste arquivo, mediante cópia ou qualquer outro meio de reprodução, para outras pessoas. Se você recebeu este ebook através do e-mail ou via ftp de algum site da Internet, ou através de um CD de Revista, saiba que você está com uma cópia pirata, ilegal, não autorizada, a qual constitui crime de Violação de Direito Autoral, de acordo com a Lei 5988. Se for este o caso entre em contato com o autor, através do e-mail mauricio@ascompras.com , para regularizar esta cópia. Ao regularizar a sua cópia você irá remunerar, mediante uma pequena quantia, o trabalho do autor e incentivar que novos trabalhos sejam disponibilizados. Se você tiver sugestões sobre novos cursos que gostaria de ver disponibilizados, entre em contato pelo e-mail: mauricio@ascompras.com. 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.
  • 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 • 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.
  • 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 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.
  • 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 Palavras do autor: Maurício Júnior Tenho 24 anos e possuo três livros publicados pela editora Ciência Moderna no ano de 2005. Procurei em todos os livros mostrar detalhadamente conceitos de orientação a objetos, banco de dados como mysql e sql server e componentes da própria ferramenta de desenvolvimento. Sou MCP Microsoft WebApplication, faço parte da comunidade ASPNETI.COM (www.aspneti.com), onde publico todos os artigos, vídeos, ebooks e livros. Trabalho como consultor .NET na empresa STEFANINI IT Solution, fábrica de software. Ministrei palestras e cursos sobre C#.NET, WebSerivces, Banco de Dados SQL Server 2000, ASP 3.0, HTML Dinâmico e lógica de programação pela empresa POLITEC LTDA, fábrica de software e fui premiado pelos mesmos. Fui desenvolvendor ASP 3.0, Visual Basic 6.0 e Java J2EE pela POLITEC durante quatro anos, comecei a desenvolver sistemas com 15 anos estando até hoje no ramo por gostar de criar, desenvolver e principalmente quando se diz respeito em ajudar e prover recursos de tecnologia a todos. Qualquer dúvida, fale diretamente com o autor através do site www.mauriciojunior.org ou pelo e-mail mauricio@ascompras.com.
  • 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 Anotações:
  • 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 Anotações:
  • 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 Í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
  • 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 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
  • 10. Curso 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
  • 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 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.
  • 12. Curso 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:
  • 13. Curso 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.
  • 14. Curso 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:
  • 15. Curso 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";
  • 16. Curso 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
  • 17. Curso 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.
  • 18. Curso 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.
  • 19. Curso 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.
  • 20. Curso 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.
  • 21. Curso 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
  • 22. Curso 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...
  • 23. Curso 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.
  • 24. Curso 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.
  • 25. Curso 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
  • 26. Curso 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.
  • 27. Curso 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.
  • 28. Curso 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
  • 29. Curso 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
  • 30. Curso 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"); }
  • 31. Curso 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>
  • 32. Curso 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>
  • 33. Curso 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.
  • 34. Curso 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:
  • 35. Curso 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.
  • 36. Curso 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.
  • 37. Curso 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.
  • 38. Curso 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.
  • 39. Curso 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.
  • 40. Curso 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.
  • 41. Curso 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.
  • 42. Curso 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.
  • 43. Curso 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.
  • 44. Curso 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.
  • 45. Curso 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.
  • 46. Curso 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.
  • 47. Curso 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
  • 48. Curso 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>
  • 49. Curso 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
  • 50. Curso 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.
  • 51. Curso 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
  • 52. Curso 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
  • 53. Curso 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.
  • 54. Curso 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.
  • 55. Curso 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.
  • 56. Curso 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.
  • 57. Curso 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(); }
  • 58. Curso 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.
  • 59. Curso 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.
  • 60. Curso 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.
  • 61. Curso 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
  • 62. Curso 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>
  • 63. Curso 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.
  • 64. Curso 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.
  • 65. Curso 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
  • 66. Curso 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; }
  • 67. Curso 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.
  • 68. Curso 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{
  • 69. Curso 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>"; }
  • 70. Curso 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
  • 71. Curso 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
  • 72. Curso 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.
  • 73. Curso 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)
  • 74. Curso 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 {
  • 75. Curso 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:
  • 76. Curso 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);
  • 77. Curso 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();
  • 78. Curso 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>
  • 79. Curso 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.
  • 80. Curso 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.
  • 81. Curso 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
  • 82. Curso 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.
  • 83. Curso 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.
  • 84. Curso 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.
  • 85. Curso 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>
  • 86. Curso 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.
  • 87. Curso 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
  • 88. Curso 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.
  • 89. Curso 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.
  • 90. Curso 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.
  • 91. Curso 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
  • 92. Curso 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() {
  • 93. Curso 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",
  • 94. Curso 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.
  • 95. Curso 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);
  • 96. Curso 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.
  • 97. Curso 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.
  • 98. Curso 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">
  • 99. Curso Prático Visual Studio.NET 2005 Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org <title>String Builder</title> </head> <body> <form id="form1" runat="server"> <div> &nbsp;Nome: <asp:TextBox ID="txtNome" runat="server"></asp:TextBox> <asp:Button ID="cmdBotao" runat="server" OnClick="cmdBotao_Click" Text="Botão Confirmação" /> <br /> <br /> <asp:Label ID="lblNome" runat="server" ForeColor="Red"></asp:Label> <br /> <br /> <asp:Button ID="cmdAlert" runat="server" OnClick="cmdAlert_Click" Text="Gerar Alerta" /></div> </form> </body> </html> Cliquei duas vezes em cima da página e no método load adicionei um atributo para o botão no onclick, é bem simples esse código e serve para adicionar uma mensagem de confirmação para o botão cmdBotao criado anteriormente. protected void Page_Load(object sender, EventArgs e) { cmdBotao.Attributes.Add("onclick","javascript:if (confirm('Deseja realmente inserir os valores ?')==false) return
  • 100. Curso 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.
  • 101. Curso 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.
  • 102. Curso 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.
  • 103. Curso 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()); }
  • 104. Curso 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.
  • 105. Curso 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:
  • 106. Curso 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.
  • 107. Curso 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.
  • 108. Curso 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 = "";
  • 109. Curso 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.
  • 110. Curso 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.
  • 111. Curso 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.
  • 112. Curso 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.
  • 113. Curso 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.
  • 114. Curso 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.
  • 115. Curso 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 {
  • 116. Curso 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.
  • 117. Curso 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
  • 118. Curso 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.
  • 119. Curso 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.
  • 120. Curso 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
  • 121. Curso 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.
  • 122. Curso 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"
  • 123. Curso 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"
  • 124. Curso 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.
  • 125. Curso 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
  • 126. Curso 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
  • 127. Curso 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.
  • 128. Curso 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.
  • 129. Curso 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
  • 130. Curso 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
  • 131. Curso 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ê.
  • 132. Curso 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)
  • 133. Curso 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
  • 134. Curso 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"); }
  • 135. Curso 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.
  • 136. Curso Prático Visual Studio.NET 2005 Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org
  • 137. Curso 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.
  • 138. Curso 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:
  • 139. Curso 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.
  • 140. Curso 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.
  • 141. Curso 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.
  • 142. Curso 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.
  • 143. Curso 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.
  • 144. Curso 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.
  • 145. Curso 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.
  • 146. Curso Prático Visual Studio.NET 2005 Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org
  • 147. Curso 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.
  • 148. Curso 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.
  • 149. Curso 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:
  • 150. Curso 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.
  • 151. Curso 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:
  • 152. Curso 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:
  • 153. Curso 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;
  • 154. Curso 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
  • 155. Curso 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>
  • 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 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.
  • 157. Curso 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:
  • 158. Curso 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
  • 159. Curso 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
  • 160. Curso 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
  • 161. Curso 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
  • 162. Curso 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
  • 163. Curso 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)
  • 164. Curso 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.
  • 165. Curso 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)
  • 166. Curso 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) {
  • 167. Curso 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).
  • 168. Curso 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;
  • 169. Curso 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.
  • 170. Curso 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.
  • 171. Curso 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.
  • 172. Curso 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 {
  • 173. Curso 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.
  • 174. Curso 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.
  • 175. Curso 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.
  • 176. Curso 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.
  • 177. Curso 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.
  • 178. Curso 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.
  • 179. Curso 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.
  • 180. Curso 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.
  • 181. Curso 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.
  • 182. Curso 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.
  • 183. Curso 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
  • 184. Curso 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.
  • 185. Curso 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 =
  • 186. Curso 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)
  • 187. Curso 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>
  • 188. Curso 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 ------------------------------------------------------------------------------------ ------
  • 189. Curso 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:
  • 190. Curso 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.
  • 191. Curso 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)
  • 192. Curso 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)
  • 193. Curso 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 = "+";
  • 194. Curso 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
  • 195. Curso 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
  • 196. Curso 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.
  • 197. Curso 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)
  • 198. Curso 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);
  • 199. Curso 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)
  • 200. Curso 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)
  • 201. Curso 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)
  • 202. Curso 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
  • 203. Curso 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) {
  • 204. Curso 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.
  • 205. Curso 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.
  • 206. Curso 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.
  • 207. Curso 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
  • 208. Curso 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
  • 209. Curso 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
  • 210. Curso 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.
  • 211. Curso 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:
  • 212. Curso 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.
  • 213. Curso 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.
  • 214. Curso 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>
  • 215. Curso 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>
  • 216. Curso 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
  • 217. Curso 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).
  • 218. Curso 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(); }
  • 219. Curso 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 =
  • 220. Curso 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.
  • 221. Curso 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.
  • 222. Curso 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
  • 223. Curso 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.
  • 224. Curso 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
  • 225. Curso 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='<%#
  • 226. Curso 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='<%#
  • 227. Curso 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
  • 228. Curso 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).
  • 229. Curso 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
  • 230. Curso 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.
  • 231. Curso 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
  • 232. Curso 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.
  • 233. Curso 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.
  • 234. Curso 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.
  • 235. Curso 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;
  • 236. Curso 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:
  • 237. Curso 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">
  • 238. Curso Prático Visual Studio.NET 2005 Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Imprimir</title> <script language=javascript> function imprimir(){ window.titulo.style.display="none"; window.print(); window.titulo.style.display=""; } </script> </head> <body> <form id="form1" runat="server"> <div id="titulo"> Título da página </div> <br /><br /> <div id="conteudo"> conteúdo da página </div> <br /><br /> <asp:Button ID="cmdImprimir" Text="Imprimir" runat="server" OnClick="cmdImprimir_Click" /> &nbsp; <input type="button" name="cmdImprimirHTML" onclick="imprimir()" value="Imprimir HTML" /> </form> </body> </html> Note o código que está em vermelho.
  • 239. Curso 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.
  • 240. Curso 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.
  • 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 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.
  • 242. Curso 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>
  • 243. Curso 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.
  • 244. Curso 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.
  • 245. Curso 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.
  • 246. Curso 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.
  • 247. Curso 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
  • 248. Curso 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);
  • 249. Curso 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.
  • 250. Curso 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;
  • 251. Curso 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:
  • 252. Curso 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.
  • 253. Curso 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; }
  • 254. Curso 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 mauricio@ascompras.com e cliquei no botão OBFUSCADOR. (Referência 1.9) Referência: 1.9 Depois apaguei o valor do text1, (mauricio@ascompras.com) e cliquei no botão DesObfuscar, o mesmo pegará o valor do text2 e transformar os dados mostrando no text1. (Referência 1.10 e 1.11).
  • 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 Referência: 1.10 Referência: 1.11 Fico por aqui e espero ter ajudado.
  • 256. Curso 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
  • 257. Curso 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.
  • 258. Curso 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.
  • 259. Curso 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 {
  • 260. Curso 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) //{
  • 261. Curso 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
  • 262. Curso 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; }
  • 263. Curso 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.
  • 264. Curso Prático Visual Studio.NET 2005 Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org Referência: 1.5 Segue abaixo todo código da pagina. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> Nome: &nbsp;<asp:TextBox ID="txtNome"
  • 265. Curso Prático Visual Studio.NET 2005 Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org runat="server"></asp:TextBox> <br /> E-mail: &nbsp; <asp:TextBox ID="txtEmail" runat="server"></asp:TextBox><br /> Endereço: <asp:TextBox ID="txtEndereco" runat="server" Height="49px" TextMode="MultiLine" Width="189px"></asp:TextBox><br /> &nbsp;CEP: &nbsp; <asp:TextBox ID="txtCEP" runat="server"></asp:TextBox><br /> &nbsp; &nbsp; <br /> &nbsp; &nbsp; <asp:Button ID="cmbGravar" runat="server" Text="Gravar" OnClick="cmbGravar_Click" /></div> </form> </body> </html> Veja a relação: Nome: txtNome E-mail: txtEmail Endereço: txtEndereco Cep: txtCEP Botão Gravar: cmdGravar A figura 1.6 mostra como ficará a página que acabou de ser criada.
  • 266. Curso 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.
  • 267. Curso 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
  • 268. Curso 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();
  • 269. Curso 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() {
  • 270. Curso 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) {
  • 271. Curso 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.
  • 272. Curso 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
  • 273. Curso 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.
  • 274. Curso 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"); } }
  • 275. Curso 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"); }
  • 276. Curso 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.
  • 277. Curso 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:
  • 278. Curso 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.
  • 279. Curso 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.
  • 280. Curso 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 ...
  • 281. Curso 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.
  • 282. Curso 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.
  • 283. Curso 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.
  • 284. Curso 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;
  • 285. Curso 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; } }
  • 286. Curso 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.
  • 287. Curso 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
  • 288. Curso 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
  • 289. Curso 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"
  • 290. Curso 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>
  • 291. Curso 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:
  • 292. Curso 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.
  • 293. Curso 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:
  • 294. Curso 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.
  • 295. Curso 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.
  • 296. Curso 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.
  • 297. Curso 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:
  • 298. Curso 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>
  • 299. Curso 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>
  • 300. Curso 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());
  • 301. Curso Prático Visual Studio.NET 2005 Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org cookie.Values.Add("NOME", nome); cookie.Values.Add("EMAIL", email); Estas três linhas apenas adicionam valores dentro do arquivo do cookie. Existe um nome e valor, por exemplo: dentro do meu cookie terá um nome chamado NOME (em maiúsculo) = ao valor que adicionei. NOME=MAURICIOJUNIOR, da mesma forma terá um valor para o EMAIL=MAURICIO@ASPNETI.COM. //colocando o cookie para expirar daki um dia cookie.Expires = DateTime.Now.AddDays(1); Response.AppendCookie(cookie); A linha EXPIRES significa apenas que esse cookie irá expirar no próximo dia, ou seja, fiz a soma do dia de hoje mais um. O comando APPENDCOOKIE apenas gera o cookie, ou seja, efetivamente gera o cookie dentro do pc em uma pasta meio escondida. O próximo método é o do botão.
  • 302. Curso 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.
  • 303. Curso 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.
  • 304. Curso Prático Visual Studio.NET 2005 Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org
  • 305. Curso 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/
  • 306. Curso 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.
  • 307. Curso 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>
  • 308. Curso 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.
  • 309. Curso 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" %>
  • 310. Curso 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.
  • 311. Curso 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)
  • 312. Curso 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.
  • 313. Curso 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.
  • 314. Curso 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.
  • 315. Curso 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.
  • 316. Curso 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
  • 317. Curso 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á.
  • 318. Curso 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.
  • 319. Curso 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;
  • 320. Curso 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; }
  • 321. Curso 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:
  • 322. Curso 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 {
  • 323. Curso 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 = "mauricio@ascompras.com"; ViewState.Add(KEY_VIEW_STATE, to); } } Explicação: Criei uma constante chamada KEY_VIEW_STATE com o valor __NomeValor. Essa variável é o nome de dentro do ViewState. Mais abaixo existe um método que criei chamado ArmazenaDados() onde instancio o método da classe UsuarioTO. Armazeno os valores manualmente por exemplo: to.Usuario = “Mauricio Junior”. A última linha armazeno propriamente os dados e os valores dentro do ViewState. ViewState.Add(KEY_VIEW_STATE, to).
  • 324. Curso 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.
  • 325. Curso Prático Visual Studio.NET 2005 Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org
  • 326. Curso 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.
  • 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 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.
  • 328. Curso 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á.
  • 329. Curso 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
  • 330. Curso Prático Visual Studio.NET 2005 Este material não pode ser usado em treinamentos e em sala de aula. http://www.mauriciojunior.org 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.

×