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;
using
System.Data;
using
System.Data.SqlClient;

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;
using
System.Web.UI;
using
System.Data.SqlClient;

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:

  1. Cria uma conexão obtendo a string de conexão definida no arquivo Global.asax
  2. Abre a conexão com o SQL Server
  3. Chama as rotinas para carregar as informações do currículo do usuário
  4. Fecha a conexão

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:


José Carlos Macoratti