Escolar Documentos
Profissional Documentos
Cultura Documentos
Curso PR - Tico de Ms Visual Studio (1) Net 2005 PDF
Curso PR - Tico de Ms Visual Studio (1) Net 2005 PDF
NET 2005
Curso Prático de
Visual Studio.NET 2005
E-mail: mauricio@ascompras.com
mauricio@aspneti.com
Tenho 24 anos e possuo três livros publicados pela editora Ciência Moderna
no ano de 2005.
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.
Anotações:
Anotações:
Índice
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
/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:
Veja a figura abaixo mostrando executando o código que foi criado acima.
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.
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.
Referência: 1-3
Referência: 1-4
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
Referência: 1-6
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.
Referência: 1-7
Referência: 1-9
Referência: 1-10
Referência: 1-11
Referência: 2-1
LinkButton
Id = lnkUsuario
Text = Usuário Normal
LinkButton
Id = lnkAdmin
Text = Usuário Admin
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.
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
<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>
</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.
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:
Referência: 2-4
Referência: 2-5
Referência: 2-6
Referência: 2-7
Veja agora o menu criado depois que clica com o usuário Admin.
Figura 2-8.
Referência: 2-8
Referência: 1.1
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.
Referência: 1.3
Referência: 1.4
Referência: 1.5
Referência: 1.6
<httpHandlers>
<add verb="POST,GET" path="ajax/*.ashx"
type="Ajax.PageHandlerFactory, Ajax" />
</httpHandlers>
Referência: 1.7
Referência: 1.8
TextBox
Id = txtNome
Button
Id = cmdEnviar
Div
Id = divResultado
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.
function enviar(){
var form = document.forms[0];
_Default.primeiraAplicacaoAjax(nome,pegarValor_CallBack);
}
function pegarValor_CallBack(response){
var resultado = response.value;
document.all('divResultado').innerHTML = resultado;
}
</script>
</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;
{
protected void Page_Load(object sender, EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(_Default));
}
[Ajax.AjaxMethod()]
public string primeiraAplicacaoAjax(string nome)
{
return "Nome: " + nome;
}
}
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.
Referência: 1.9
Referência: 1-1
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.
Referência: 1-3
Referência: 1-4
Response.Write(oStringWriter.ToString());
}
Referência: 1-5.
Referência: 1-6
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.
* Instalando Ajax.Net
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>
* 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 + "!";
}
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.
<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>
Referência: 1-3
Referência: 1-4
Ajax parte II
Referência: 1.1
Especificação da tabela:
Nome: TB_USUARIO
Campos:
ch_usuario int
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.
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[Ajax.AjaxMethod()]
public DataSet BuscaUsuario(string id)
{
sBanco.Conecta();
string sql = "select * from tb_usuario ";
Referência: 1.2
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{
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>";
}
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
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
Referência: 1.3
Referência: 1-1
TB_USUARIO
ch_usuario int(3) auto_increment
no_usuario varchar(200)
pw_usuario varchar(255)
email_usuario varchar(255)
/// <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 + "')";
sBanco.Desconecta();
}
}
Referência: 1-2
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);
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();
}
}
<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>
Referência: 1-3
Referência: 1-4
Referência: 1-5
Referência: 1-6
Referência: 1-1
Referência: 1-2
Referência: 1-3
Referência: 1-4
Referência: 1-5
Referência: 1-6
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
Referência: 1-8
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.
Segue o código:
<asp:TreeView
ID="Tree"
runat="server"
ExpandDepth=0
OnSelectedNodeChanged="SelectedNodeChanged">
</asp:TreeView>
Referência: 1.1
Referência: 1.2
Referência: 1.3
A linha de código que está pintada de amarela é outro método que criei que
retorna um objeto dataset. Veja o mesmo abaixo:
dst.Tables["Categories"].Columns["CategoryID"],
dst.Tables["Products"].Columns["CategoryID"]);
return dst;
}
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.
Referência: 1.4
OnSelectedNodeChanged="SelectedNodeChanged">
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:
Referência: 1.1
TextBox
Id = txtNome
Label
Id = lblNome
ForeColor = Red
Button
Id = cmdBotao
Text = Botão Confirmação
Button
Id = cmdAlert
Text = Gerar Alerta
<title>String Builder</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Nome:
<asp:TextBox ID="txtNome"
runat="server"></asp:TextBox>
<asp:Button ID="cmdBotao" runat="server"
OnClick="cmdBotao_Click" Text="Botão Confirmação" />
<br />
<br />
<asp:Label ID="lblNome" runat="server"
ForeColor="Red"></asp:Label>
<br />
<br />
<asp:Button ID="cmdAlert" runat="server"
OnClick="cmdAlert_Click" Text="Gerar Alerta" /></div>
</form>
</body>
</html>
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.
Referência: 1.2
Referência: 1.3
Referência: 1.4
Page.RegisterStartupScript("alert", str.ToString());
}
Referência: 1.5
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.
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.
Referência: 1-2
Referência: 1-3
Segue o código:
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";
this.EnableViewState = false;
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.
Referência: 1-4
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.
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
Referência: 1.2
Explicando as variáveis:
Referência: 1.3
Referência: 1.4
/// <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
{
mail.Body = descricaoEmail;
getAutenticacao(mail);
SmtpMail.SmtpServer = SMTP_MAIL;
SmtpMail.Send(mail);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
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.
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);
mail.Fields["http://schemas.microsoft.com/cdo/configuration
/smtpauthenticate"] = SMTP_AUT;
mail.Fields["http://schemas.microsoft.com/cdo/configuration
/sendusername"] = MAIL_DE;
mail.Fields["http://schemas.microsoft.com/cdo/configuration
/sendpassword"] = PW_DE;
}
Referência: 1.5
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");
}
}
Referência: 1.6
Referência: 1.7
Referência: 1.8
Referência: 1-1
Tag HTML.
<INPUT class="caixa" id="txtImagem" style="WIDTH: 296px;
HEIGHT: 22px" type="file" size="30" name="txtImagem"
runat="server">
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.
Referência: 1-2
Agora mostrarei o código C#.NET enviando uma imagem pela internet.
Referência: 1-3
/// <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();
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>");
}
}
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.
Referência: 1-4
Referência: 1-5
Referência: 1-6
Referência: 1-7
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)
Criei uma página no meu projeto com o nome testeCript.aspx, você pode
criar a sua própria página conforme quiser.
TextBox
Id = txtSenha
Text = “em branco”
Button
Id = cmdCript
Text = Criptografar
Id = lblMD5
Text = “em branco”
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.
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 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.
Tipo Explicação
Application_Start A primeira visita do usuário em uma aplicação.
Application_End Na saída da aplicação pelo usuário
No inicio o pedido de cada request do servidor.
Um request do servidor acontece toda vez que
Application_BeginRequest
o browser de alguém inicia ou entra na
aplicação.
Fim do pedido de requet, ou seja, quando o
Application_EndRequest
usuário sai da aplicação.
Session_Start Toda vez que um usuário entra na aplicação.
Quando a sessão é terminada definida pela
Session_End
aplicação ou o usuário sai da aplicação.
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>");
}
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());
C#.NET
INTRODUÇÃO
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.
Exemplo:
var = a * b / (c - g + f) +
4 * z;
Comentários
/** Line 1
* Line 2
* Line 3
**/
/// <summary>
/// </summary>
/// <returns>
/// </returns>
/// <exception
cref="ActiveDirectoryManager.ActiveDirectoryManagerException">
/// </exception>
/// <remarks>
/// </remarks>
Declarações
Exemplo:
String firstName;
Variáveis locais
Namespace
Exemplo:
Bancoob.NomeProjeto.CamadaNegocio.AccessControl
Interface
Exemplo:
IServiceProvider
Métodos
Enumerações
Eventos
Exemplos:
Constantes
Exemplo:
A2A_MAX
Exceções
Exemplo:
ServiceProviderException
Propriedades públicas
Exemplo:
Windows Forms
Objeto de dados
Variáveis
Single sgn
Double dbl
Currency cur
Date Time dtm
Variant var
Array ary
User-defined typ
type
Enum enu
Collection col
Object
Web Forms
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 invés de:
int a, b;
usar:
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.
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)
[ComVisible(true)]
public string TesteDados(string entrada)
{
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)]
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
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).
[ClassInterface(ClassInterfaceType.AutoDual)]
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;
}
}
}
Criando HELP
Praticando
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
{
return retorno;
}
}
}
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.
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.
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.
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.
Se ainda não sabe qual a diferença entre eles. Disponibilizei nas referências
abaixo.
Referência: 1.1
Referência: 1.2
apenas para o conhecimento, geralmente não faz nada com os dados que
conseguiu pegar.
Referência: 1.3
Referência: 1.4
Referência: 1.5
Referência: 1.6
Bom, antes de tudo segue mais uma frase criptografada para conhecimento
e possibilidade de ganhar prêmios se for descriptografada.
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.
Referência: 1.7
/// <summary>
/// Método que descriptografa dados
/// Pega do App.config ou Web.Config automaticamente
/// </summary>
/// <returns></returns>
public string DecryptConnectionString()
{
Byte[] b =
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
/// <summary>
/// Método para encriptografar string de conexao.
/// Pega a conexao passada
/// </summary>
/// <param name="connectionString"></param>
/// <returns></returns>
public string EncryptConnectionString(string connectionString)
{
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
<appSettings>
<add key="ConnectionString"
value="UGFzc3dvcmQ9MTIzOyBQZXJzaXN0IFNlY3VyaXR5IEluZm89VHJ1ZTs
gVXNlciBJZD1zYTsgSW5pdGlhbCBDYXRhbG9nPUJER0VDT1JFOyBEYXRhIFNv
dXJjZT1zdGYtbHVpcw=="/>
</appSettings>
</configuration>
Referência: 2.0
Referência: 2.1
Dados da tela.
Label
Id = Label1
------------------------------------------------------------------------------------
-----
TextBox
Id = textBox2
MultLine = True
------------------------------------------------------------------------------------
------
Label
Id = Label2
------------------------------------------------------------------------------------
------
TextBox
Id = textBox1
MultLine = True
------------------------------------------------------------------------------------
-----
Button
Id = button1
Text = button1
Referência: 2.2
Referência: 2.3
Explicação:
Referência: 2.4
Requisitos:
- Ferramenta Visual Studio.NET 2003 ou 2005;
- Conhecimento em escrita de arquivo;
- Conhecimento da linguagem C#.NET.
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)
}
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
{
}
}
Explicação:
Começando com a assinatura do método.
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
{
}
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/
public AppException()
{
//apenas chamo o método para log de erro
LogError("An unexpected error occurred.");
}
{
//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);
}
}
Explicação:
Configuração
<appSettings>
</appSettings>
Explicação:
O arquivo .txt já criado e colocado dentro da pasta Errors não tem nada
dentro. (Referência 1.6 – Exception Parte II)
using System;
using System.Diagnostics;
using System.Web;
namespace WebChamps.Components.Web
{
/// <summary>
/// </summary>
public class AppException: System.ApplicationException
{
public AppException()
{
LogError("An unexpected error occurred.");
}
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
{
}
}
}
}
GridView Parte I
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
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
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
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
Código Behing
if (!Page.IsPostBack)
{
PreencheGridView();
}
/// <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();
}
Explicação:
Bom, fico por aqui e espero ter ajudado. Na segunda parte mostrarei como
editar e deletar dados gridview.
GridView Parte II
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)
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.
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>
<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>
<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
<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>
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();
}
Explicação:
/// <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 =
((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();
}
}
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)
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.
if (config.AtualizarCooperativaOffLine(Convert.ToInt32(txtIdCooperativa),
txtNumCooperativa, txtInitialCatalog, txtDataSource,
Convert.ToInt32(txtIdAmbiente)))
{
this.gdBancoServidor.EditIndex = -1;
PreencheGridView();
}
Cancelar
/// <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();
}
Explicação:
O código que cancela a edição é apenas o EditIndex = -1 e depois mando
preencher o grid novamente.
Código em funcionamento
Cliquei no Editar.
Cliquei no Cancelar
Mudando os dados
Valor mudado
Mostrarei nessa parte III como deletar dados usando o novo componente da
IDE 2005 da Microsoft chamado GridView.
Parte I:
http://www.aspneti.com/visualizar/downloadArtigo.aspx?ch_artigos=152
Parte II:
http://www.aspneti.com/visualizar/downloadArtigo.aspx?ch_artigos=155
OnRowEditing="gdBancoServidor_RowEditing"
OnRowCancelingEdit="gdBancoServidor_RowCancelingEdit"
OnRowUpdating="gdBancoServidor_RowUpdating"
DataKeyNames="IdCooperativa"
OnRowDeleting="gdBancoServidor_RowDeleting">
<AlternatingRowStyle
BackColor="#cdcdcd" />
<HeaderStyle
<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>
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"
Método RowDeleting
/// <summary>
/// Método que pega o valor e manda para a camada acima para deletar
if (config.ExcluirCooperativaOffLine(Convert.ToInt32(idCooperativa)))
{
this.gdBancoServidor.EditIndex = -1;
PreencheGridView();
}
}
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();
if (config.ExcluirCooperativaOffLine(Convert.ToInt32(idCooperativa)))
{
this.gdBancoServidor.EditIndex = -1;
PreencheGridView();
}
Funcionamento
É 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
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.
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;
}
protected void cmdImprimir_Click(object sender, EventArgs e)
{
Response.Write("<script>window.print();</script>");
}
}
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.
Note que depois de clicar em imprimir, o titulo da página sumiu e logo após
apareceu com o dialog de impressora.
Referência: 1.1
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.
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
Agora foi criado alguns atributos da tag <asp:Label onde pode ser
associado uma tecla de atalho automaticamente.
Referência: 1.2
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.
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”.
Referência: 1.4
Referência: 1.5
Mais uma vez, não posso esquecer de adicionar o campo citado pelo
atributo AssociatedControlID.
Referência: 1.6
Misturando dados
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:
Referência: 1.1
Propriedades do form:
Objetos de tela:
TextBox
Id = textBox1
TextBox
Id = textBox2
Button
Id = button1
Text = Obfuscador
Button
Id = button2
Text = DesObfuscar
Referência: 1.2
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];
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];
return retorno;
}
Referência: 1.3
Explicação:
return retorno;
}
Referência: 1.4
return retorno;
Referência: 1.5
Programando Form2
byte[] aux =
Obfuscator.Application.Obfuscator.ObfuscateValue(bytesValores);
resultado = encoder.GetString(aux) ;
textBox2.Text = resultado;
}
Referência: 1.6
Explicação:
byte[] obj =
Obfuscator.Application.Obfuscator.GetClearObfuscatedValue(bytesValores);
textBox1.Text = encoder.GetString(obj);
}
Referência: 1.7
Explicação:
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;
byte[] aux =
Obfuscator.Application.Obfuscator.ObfuscateValue(bytesValores);
resultado = encoder.GetString(aux) ;
textBox2.Text = resultado;
}
byte[] obj =
Obfuscator.Application.Obfuscator.GetClearObfuscatedValue(bytesValores);
textBox1.Text = encoder.GetString(obj);
}
}
}
Referência: 1.8
Testando aplicação:
Referência: 1.9
Referência: 1.10
Referência: 1.11
Referência: 1.1
2005 depois de todas as classes criadas. Pode ser criado antes ou depois,
não existe problema algum.
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.
Referência: 1.2
Referência: 1.3
using System;
using System.Data;
using System.Data.SqlClient;
/// <summary>
/// Classe de banco de dados
/// </summary>
public class BancoDados
{
/// <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)
//{
sConn.Close();
//}
}
catch(Exception e)
{
throw new Exception("Fora:"+ e.Message);
}
}
#endregion
}
Referência: 1.4
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;
Referência: 1.5
runat="server"></asp:TextBox>
<br />
E-mail:
<asp:TextBox ID="txtEmail" runat="server"></asp:TextBox><br />
Endereço:
<asp:TextBox ID="txtEndereco" runat="server" Height="49px"
TextMode="MultiLine" Width="189px"></asp:TextBox><br />
CEP:
<asp:TextBox ID="txtCEP" runat="server"></asp:TextBox><br />
<br />
<asp:Button ID="cmbGravar" runat="server" Text="Gravar"
OnClick="cmbGravar_Click" /></div>
</form>
</body>
</html>
Veja a relação:
Nome: txtNome
E-mail: txtEmail
Endereço: txtEndereco
Cep: txtCEP
Botão Gravar: cmdGravar
A figura 1.6 mostra como ficará a página que acabou de ser criada.
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.
Referência: 1.7
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
/// </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();
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()
{
Conecta();
}
/// <summary>
/// metodo que desconecta do banco de dados
/// </summary>
public void getConectionOut()
{
Desconecta();
}
}
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)
{
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.
/// <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
/// <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 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.
setValores(dto);
if (dao.insereUsuarioDAO(dto))
{
Response.Redirect("resultadoFinal.aspx");
}
else
{
Response.Redirect("resultadoFinalErro.asp");
}
}
/// <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");
}
Referência: 1.8
Referência: 1.9
Segue a agenda:
Mbp dpouf b Efvt p ubnboip ept tfvt qspcmfnbt, dpouf bpt tfvt
qspcmfnbt p ubnboip ep tfv Efvt. Bcsbdpt b upept.
Depois disso, cliquei com o botão direito em cima do projeto e fui direto à
opção ADD NEW ITEM ...
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.
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;
Frase criptografada:
N Uhrtzj Rstchn.MDS ehbnt zhmcz ldjgnq bnl z udqrzn 1994, drstchn
oqz uzjdq.
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.
Chave Valor
MEUPC MEU COMPUTADOR
PRINCIPAL MEU VALOR
SEUPC SEU COMPUTADOR
Chave Valor
MEUPC MY COMPUTER
PRINCIPAL MY VALUE
SEUPC YOUR PC
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
</body>
</html>
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:
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.
Espero ter ajudado a todos. Qualquer dúvida, pode entrar em contato, será
um prazer.
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:
Antes de tudo, criei um projeto web chamado website1 com uma página
que possui um formulário e uma classe.
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:
</div>
</form>
</body>
</html>
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>
Response.AppendCookie(cookie);
}
Explicando código:
cookie.Values.Add("NOME", nome);
cookie.Values.Add("EMAIL", email);
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.
Código fonte:
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:
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.
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.
Especificação da página:
Label
Id = lblNome
Label
Id = lblEmail
Código fonte:
Passei para o código .CS da classe, mostro apenas como pegar o cookie que
gerei e como mostrar na tela.
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;
{
LerCookieGerado();
}
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.
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.
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:
Link: http://msdn.microsoft.com/vstudio/express/default.aspx
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.
Notei e note você também que os dados são criptografados, portanto existe
segurança de dados dentro desse campo _ViewState.
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;
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;
Explicação:
http://www.aspneti.com/visualizar/downloadArtigo.aspx?ch_artigos=41
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;
/// <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:
Por enquanto fica por aqui. Estou à disposição de todos. Mostrarei como
pegar os dados criptografados e exibir na tela usando OOP.
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.
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.