ASP .NET - Revendo conceitos - Aplicação Currículos web - III
Na segunda parte do artigo definimos a página Default.aspx onde é feito o login do usuário e onde cadastramos um novo usuário; para isso criamos as rotinas CriarNovoUsuarioLogin e DoLogin.
Vamos continuar definindo a página Menu.aspx que permite procurar e editar currículos.
Definindo a página Menu.aspx
Abra a página Menu.aspx e no menu Table clique em Insert Table e defina uma tabela com 6 linhas e duas colunas;
A seguir inclua os seguintes controles nesta página:
Distribua os controles conforme o leiaute da figura abaixo:
Nesta página temos as opções para procurar um currículo onde para isso deve-se informar o nome e o cep cadastrado; e a outra opção é editar o currículo atual que permitirá alterar os dados do currículo já cadastrado.
Os namespaces usados na página Menu.aspx são:
using
System;No evento Load da página temos o seguinte código no arquivo code-behind Menu.aspx.cs:
protected void Page_Load(object sender, EventArgs e) { if (Session["UsuarioID"] == null || Session["UsuarioID"].Equals("")) { Response.Redirect("~/Default.aspx"); } } |
Este código verifica se existe a variável de sessão UsuarioID que foi gerada no Login e caso ela não tenha um valor válido redireciona o usuário para a página Default.aspx;
Vejamos a seguir o código do evento Click do controle LinkButton - Editar Curriculo Atual:
1 - Editar Currículo Atual
Nesta opção o usuário deve estar logado para poder editar o seu currículo que foi gerado quando do seu cadastramento.
protected void LinkButton1_Click(object sender, EventArgs e) { Response.Redirect("~/EditarCurriculo.aspx"); } |
Ao clicar neste link o usuário será direcionado para a página EditarCurriculo.aspx que é exibida a seguir:
Nesta página usamos os seguintes namespaces:
using
System;Observe que nesta página temos vários controles TextBox divididos por seções da seguinte forma:
No início de cada seção temo um controle checkbox que se quando marcado indica que a informação deve ser salva no banco de dados;
No evento Load da página no arquivo code-behind EditarCurriculo.aspx.cs temos o seguinte código:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { try { SqlConnection conexaoSQL = new SqlConnection(Convert.ToString(Application["ConexaoDBSQLCurriculos"])); conexaoSQL.Open(); carregarInfoPessoal(conexaoSQL); carregarInfoEducacao(conexaoSQL); CarregarInfoHabilidades(conexaoSQL); CarregarInfoProfissional(conexaoSQL); conexaoSQL.Close(); } catch (Exception ex) { lblErro.Text = ex.Message.ToString(); } } } |
Este código é executado se a requisição não for um postback e faz o seguinte:
Em todas as rotinas usamos a variável de sessão UsuarioID que contém o código do usuário atual que esta logado.
A seguir temos o código de cada uma das rotinas chamadas:
private void carregarInfoPessoal(SqlConnection conexaoSQL) { string strSql = "select * from InfoPessoal where usuarioid=" + Convert.ToString(Session["UsuarioID"]); SqlCommand cmdSQL = new SqlCommand(strSql, conexaoSQL); SqlDataReader reader = cmdSQL.ExecuteReader(); if (reader.Read()) { txtNome.Text = reader["nome"] == DBNull.Value ? "" : reader["nome"].ToString(); txtEndereco.Text = reader["endereco"] == DBNull.Value ? "" : reader["endereco"].ToString(); txtCidade.Text = reader["cidade"] == DBNull.Value ? "" : reader["cidade"].ToString(); txtEstado.Text = reader["estado"] == DBNull.Value ? "" : reader["estado"].ToString(); txtCep.Text = reader["cep"] == DBNull.Value ? "" : reader["cep"].ToString(); txtPais.Text = reader["pais"] == DBNull.Value ? "" : reader["pais"].ToString(); txtTelefone.Text = reader["telefone"] == DBNull.Value ? "" : reader["telefone"].ToString(); txtCelular.Text = reader["celular"] == DBNull.Value ? "" : reader["celular"].ToString(); txtEmail.Text = reader["email"] == DBNull.Value ? "" : reader["email"].ToString(); txtNascimento.Text = reader["nascimento"] == DBNull.Value ? "" : reader["nascimento"].ToString(); txtFoto.Text = reader["foto"] == DBNull.Value ? "" : reader["foto"].ToString(); int ativo = reader["ativo"] == DBNull.Value ? 0 : 1; if (ativo == 0) { chkInfoPessoal.Checked = false; } else { chkInfoPessoal.Checked = true; } } reader.Close(); } |
O código acima seleciona as informações pessoais da tabela InfoPessoal para o usuário atual e exibe as informações nos controles TextBox.
Ao percorrer o DataReader gerado verificamos se o respectivo campo é nulo antes de atribuir o valor do campo e se o mesmo for nulo atribuímos um valor vazio("");
reader["nome"] == DBNull.Value ? "" : reader["nome"].ToString();
O controle FileUpload permite a seleção de imagem e seu envio para o banco de dados.
Cada uma das rotinas basicamente repete o código para obter e exibir as informações existentes no currículo do usuário:
A seguir temos a rotina para carregar e exibir as informações do usuário atual da tabela InfoEducacao:
private void carregarInfoEducacao(SqlConnection conexaoSQL) { string strSql = "select * from InfoEducacao where usuarioid='" + Convert.ToString(Session["UsuarioID"]) + "'"; SqlCommand cmdSQL = new SqlCommand(strSql, conexaoSQL); SqlDataReader reader = cmdSQL.ExecuteReader(); if (reader.Read()) { txtInfoEducacao.Text = reader["informacao"] == DBNull.Value ? "" : reader["informacao"].ToString(); int ativo = reader["ativo"] == DBNull.Value ? 0 : 1; if (ativo == 0) { chkInfoEducacional.Checked = false; } else { chkInfoEducacional.Checked = true; } } reader.Close(); } |
Agora a rotina para carregar e exibir as informações do usuário atual da tabela InfoProfissional:
private void CarregarInfoProfissional(SqlConnection conexaoSQL) { string strSql = "select * from InfoProfissional where usuarioid='" + Convert.ToString(Session["UsuarioID"]) + "'"; SqlCommand cmdSQL = new SqlCommand(strSql, conexaoSQL); SqlDataReader reader = cmdSQL.ExecuteReader(); if (reader.Read()) { txtInfoProfissional.Text = reader["informacao"] == DBNull.Value ? "" : reader["informacao"].ToString(); int ativo = reader["ativo"] == DBNull.Value ? 0 : 1; if (ativo == 0) { chkInfoProfissional.Checked = false; } else { chkInfoProfissional.Checked = true; } } reader.Close(); } |
E ainda a rotina para carregar e exibir as informações do usuário atual da tabela InfoHabilidades:
private void CarregarInfoHabilidades(SqlConnection conexaoSQL) { string strSql = "select * from InfoHabilidades where usuarioid='" + Convert.ToString(Session["UsuarioID"]) + "'"; SqlCommand cmdSQL = new SqlCommand(strSql, conexaoSQL); SqlDataReader reader = cmdSQL.ExecuteReader(); if (reader.Read()) { txtInfoHabilidades.Text = reader["informacao"] == DBNull.Value ? "" : reader["informacao"].ToString(); int ativo = reader["ativo"] == DBNull.Value ? 0 : 1; if (ativo == 0 ) { chkInfoHabilidades.Checked = false; } else { chkInfoHabilidades.Checked = true; } } reader.Close(); } |
Para salvar as informações o usuário clica no botão - Salvar Informações - cujo evento Click possui o seguinte código:
protected void btnSalvar_Click(object sender, EventArgs e) { try { SqlConnection conexaoSQL = new SqlConnection(Convert.ToString(Application["ConexaoDBSQLCurriculos"])); conexaoSQL.Open(); EnviaImagem(); SalvarInfoPessoal(conexaoSQL); SalvarInfoEducacao(conexaoSQL); SalvarInfoHabilidades(conexaoSQL); SalvarInfoProfissional(conexaoSQL); conexaoSQL.Close(); lblErro.Text = "Informações salvas com sucesso !"; } catch (Exception ex) { lblErro.Text = ex.Message.ToString(); } } |
Neste código após definir e abrir uma conexão com o SQL Server temos a chamada da rotina EnviaImagem():
private void EnviaImagem() { try { if (fupImagem.HasFile) { // BLOQUEIA A TRANSFERÊNCIA DE ARQUIVOS MAIOR QUE 1MB if (fupImagem.PostedFile.ContentLength < 1048576) { Boolean fileOK = false; String pathFoto = Server.MapPath(".") + @"\fotos\"; if (fupImagem.HasFile) { String extensaoArquivo = System.IO.Path.GetExtension(fupImagem.FileName).ToLower(); String[] extensoesPermitidas = { ".gif", ".png", ".jpeg", ".jpg" }; for (int i = 0; i < extensoesPermitidas .Length; i++) { if (extensaoArquivo == extensoesPermitidas [i]) { fileOK = true; } } } if (fileOK) { try { fupImagem.SaveAs(pathFoto + fupImagem.FileName); } catch (Exception ex) { // MENSAGEM PARA O USUÁRIO Page.ClientScript.RegisterStartupScript(this.GetType(), "init", "<script>alert('" + ex.Message + ".');</script>"); } } else { // MENSAGEM PARA O USUÁRIO string msg = "Só poderá carregar imagens neste campo."; Page.ClientScript.RegisterStartupScript(this.GetType(), "init", "<script>alert('" + msg + ".');</script>"); } } else { // MENSAGEM PARA O USUÁRIO string msg = "Limite máximo para a imagem é de 1MB."; Page.ClientScript.RegisterStartupScript(this.GetType(), "init", "<script>alert('" + msg + ".');</script>"); } } } catch (Exception ex) { //exibe erro lblErro.Text = ex.Message; } } |
O código da rotina EnviaImagem() verifica se a imagem enviada não possui um tamanho superior a 1 MG e salva a imagem selecionada.
Após a imagem ser salva é chamada a rotina para salvar as informações em cada uma das tabelas definidas para a aplicação.
Salvando as informações na tabela InfoPessoal usando uma instrução SQL Update para atualizar os dados do currículo do usuário atual:
private void SalvarInfoPessoal(SqlConnection conexaoSQL) { int nAtivo = 1; if (!chkInfoPessoal.Checked) { nAtivo = 0; } string strSql = "update InfoPessoal set Nome='" + txtNome.Text + "',endereco='" + txtEndereco.Text + "',cidade='" + txtCidade.Text + "',estado='" + txtEstado.Text + "',cep='" + txtCep.Text + "',pais='" + txtPais.Text + "',telefone='" + txtTelefone.Text + "',celular='" + txtCelular.Text + "',email='" + txtEmail.Text + "',nascimento='" + txtNascimento.Text + "',foto='" + fupImagem.FileName.ToString() + "',Ativo=" + Convert.ToString(nAtivo) + " where usuarioid=" + Convert.ToString(Session["UsuarioID"]); try { SqlCommand cmdSQL = new SqlCommand(strSql, conexaoSQL); cmdSQL.ExecuteNonQuery(); } catch(Exception ex) { lblErro.Text = "Erro ao salvar dados pessoais :: " + ex.Message ; return; } } |
O código para atualizar os dados da tabela InfoEducacao:
private void SalvarInfoEducacao(SqlConnection conexaoSQL) { int nAtivo = 1; if (!chkInfoEducacional.Checked) { nAtivo = 0; } string strSql = "update infoEducacao set informacao='" + txtInfoEducacao.Text + "',ativo=" + Convert.ToString(nAtivo) + " where usuarioid=" + Convert.ToString(Session["UsuarioID"]); SqlCommand cmdSQL = new SqlCommand(strSql, conexaoSQL); cmdSQL.ExecuteNonQuery(); } |
O código para atualizar os dados da tabela InfoProfissional:
private void SalvarInfoProfissional(SqlConnection conexaoSQL) { int nAtivo = 1; if (!chkInfoProfissional.Checked) { nAtivo = 0; } string strSql = "update InfoProfissional set informacao='" + txtInfoProfissional.Text + "',ativo=" + Convert.ToString(nAtivo) + " where usuarioid=" + Convert.ToString(Session["UsuarioID"]); SqlCommand cmdSQL = new SqlCommand(strSql, conexaoSQL); cmdSQL.ExecuteNonQuery(); } |
O código para atualizar os dados da tabela InfoHabilidades:
private void SalvarInfoHabilidades(SqlConnection conexaoSQL) { int nAtivo = 1; if (!chkInfoHabilidades.Checked) { nAtivo = 0; } string strSql = "update infoHabilidades set informacao='" + txtInfoHabilidades.Text + "',ativo=" + Convert.ToString(nAtivo) + " where usuarioid=" + Convert.ToString(Session["UsuarioID"]); SqlCommand cmdSQL = new SqlCommand(strSql, conexaoSQL); cmdSQL.ExecuteNonQuery(); } |
Finalmente o código do botão Cancelar:
protected void btnCancelar_Click(object sender, EventArgs e) { Response.Redirect("~/Menu.aspx"); } |
Embora tenhamos várias rotinas o código é muito parecido alterando-se apenas a instrução SQL com o nome da tabela e seus campos.
Vimos então que a página EditarCurriculo.aspx permite ao usuário atualizar o seu currículo com informações fornecidas nesta página.
Aguarde a continuação em : ASP .NET - Revendo conceitos - Aplicação Currículos web - IV
Onde vamos definir a página VisualizarCurriculo.aspx e como exibir o currículo no formato PDF.
"Amado, não imites o mal, mas o bem. Quem faz o bem é de Deus; mas quem faz o mal não tem visto a Deus." 3 João 1:11
Referências: