Desenvolvimento - ASP. NET

Simulando o Hotmail com ASP.NET 2.0

Você que já usou o hotmail e é desenvolvedor de aplicações WEB, verá neste artigo como usar o controle GridView do ASP.NET 2.0 com uma tabela no banco de dados, mostrar um checkbox em cada linha e, por fim, enviar e-mail para todas as linhas selecionadas.

por Renato Haddad



Você que já usou o hotmail e é desenvolvedor de aplicações WEB, verá neste artigo como usar o controle GridView do ASP.NET 2.0 com uma tabela no banco de dados, mostrar um checkbox em cada linha e, por fim, enviar e-mail para todas as linhas selecionadas.

Sem nenhuma dúvida o GridView é o controle com mais funcionalidades existentes na WEB. É possível criar templates e controles, usar diversas fontes de dados, aplicar diversos eventos, enfim, com o tempo você descobrirá como explorar o GridView.

O primeiro passo é criar uma aplicação ASP.NET 2.0 chamada hotmail. Em seguida, adicione um formulário também chamado hotmail com os seguintes controles (Figura 1): 3 buttons, 1 TextBox (Multline), 1 GridView e 1 BulletList.

Figura 1 – layout do hotmail

Neste formuário, teremos as seguintes funcionalidades:

1 – Send Email – envia email para todos os nomes selecionados no checkbox no GridView;

2 – Select All / Clear All – seleciona ou não todos os checkboxes listados no GridView. Esta funcionalidade irá facilitar a vida do usuário, permitindo ao mesmo marcar ou não todas as linhas com apenas um clique.

Para o GridView é preciso customizar as 3 colunas. Na Smart Tag do GridView selecione Edit Columns. Adicione 1 TemplateField e 2 BoundField (Figura 2).

Figura 2 – Customização do GridView

Nos dois BoundFields, é precido alterar as propriedades HeaderText e DataField. Para o primeiro, digite “Nome” e para o segundo “email”. Note que estes nomes são referentes ao cabeçalho da coluna e o nome do campo na tabela do banco de dados. Clique no botão OK para finalizar.

Para configurar o TemplateField, na Smart Tag do GridView, selecione Edit Templates. Serão exibidas várias sessões do Template (Figura 3), mas o que nos interessa é o ItemTemplate. A seguir, exiba a Toolbox e adicione um checkbox na sessão ItemTemplate. Pronto, já temos o checkbox adicionado na primeira coluna do GridView e o nome do mesmo é checkbox1. Para sair do Template, selecione End Template Editing.

Figura 3 – Sessões do Template

Como o GridView irá mostrar os dados contidos numa tabela do banco de dados, crie um Database chamado Associados contendo uma tabela chamada Cadastro. Crie a estrutura com os campos conforme a Figura 4.

Figura 4 – estrutura da tabela Cadastro do banco de dados

Vamos para a parte de codificação. Assim que o formulário for carregado, todos os registros da tabela Cadastro deverão aparecer no GridView. Para isso, pressione F7 para exibir a janela de código e digite o seguintes códigos:

Na lista de using no topo da lista, inclua os dois namespaces referentes ao acesso ao SQL Server e ao envio de email, sendo:

using System.Data.SqlClient;

using System.Net.Mail;

Localize o evento Page_Load e digite o código que irá mostrar todos os dados. Note que há o If (!Page.IsPostBack) o qual tem como finalidade executar o código contigo no mesmo somente uma vez, ou seja, apenas quando a página for carregada pela primeira vez. O restante da explicação você pode encontrar nas linhas de comentários do código.

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack)

{

// Alternativa de usar a string de conexao do Web.Config

//string conStr = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["NWind"].ConnectionString;

// define a string de conexão

string conStr = "Server=(local);Database=Associados;Integrated Security=true";

// instrução SQL

string sql = "Select email, Nome FROM Cadastro";

// instancia a conexão

SqlConnection conn = new SqlConnection(conStr);

// instancia o Command com a instrução sql da respectiva conexão

SqlCommand cmd = new SqlCommand(sql, conn);

// monta o tratamento de erro

try

{

// abre a conexão

conn.Open();

// instancia e executa o DataReader

SqlDataReader reader = cmd.ExecuteReader();

// usa o DataReader na fonte do GridView

GridView1.DataSource = reader;

// renderiza o GridView

GridView1.DataBind();

// fecha o DataReader

reader.Close();

}

finally

{

// fecha a conexão

conn.Close();

}

}

}

No layout do formulário, dê um duplo clique no botão Select All e digite o seguinte código que irá chamar a rotina SetCheckBox passando como argumento o valor TRUE.

protected void Button1_Click(object sender, EventArgs e)

{

SetCheckBox(true);

}

Faça o mesmo com o botão Clear All o qual chama a mesma rotina só que passando o argumento FALSE.

protected void Button2_Click(object sender, EventArgs e)

{

SetCheckBox(false);

}

Por fim, digite a rotina SetCheckBox, o qual recebe um argumento do tipo Boolean chamado mySet. Nesta rotina é definido um objeto do tipo CheckBox chamado “c” igual a “null”, e um looping “for” que vai do índice 0 até o número de items listados do controle GridView. Portanto, não se preocupe com o número de linhas no GridView que o próprio código se encarrega disso.

Dentro do looping, é atribuído ao objeto “c” o checkbox criado na primeira coluna do GridView. Note no código que é feito um Cast do objeto para o tipo CheckBox; em seguida é usado o Rows do índice do looping, seguido da posição da célula. É preciso usar o FindControl do objeto checkbox1 porque numa mesma célula você pode colocar quantos objetos quiser. Resumindo, o objeto “c” conterá todas as propriedades referentes ao checkbox1.

Na última linha do código é atribuída a propriedade Checked do objeto “c”, o valor passado no argumento, podendo ser True ou False.

protected void SetCheckBox(Boolean mySet)

{

CheckBox c = null;

for (int i = 0; i < GridView1.Rows.Count; i++)

{

c = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("checkbox1");

c.Checked = mySet;

}

}

O próximo passo é montar a rotina de envio de email. A idéia é varrer todas as linhas do GridView, verificar se o checkbox está selecionado e enviar o respectivo email para todas as linhas selecionadas. A explicação está no próprio código.

Atenção: altere a descrição do smtp de acordo com a sua configuração de smtp.

protected void btnEmail_Click(object sender, EventArgs e)

{

// limpa a lista de itens no BulletList

BulletedList1.Items.Clear();

// instancia o objeto c (checkbox)

CheckBox c = null;

// monta o looping que percorre todas as linhas do GridView

for (int i = 0; i < GridView1.Rows.Count; i++)

{

// localiza e faz o Cast do checkbox

c = (CheckBox)GridView1.Rows[i].Cells[0].FindControl("checkbox1");

// verifica o valor do checkbox

if (c.Checked == true)

{

try

{

// envia email

SmtpClient smtp = new SmtpClient("mail.YourDomain.com");

string emailTo = GridView1.Rows[i].Cells[2].Text.Trim();

MailMessage email = new MailMessage("rehaddad@msn.com", emailTo);

email.Subject = "Article from LC";

email.Body = txtMsg.Text.Trim();

email.IsBodyHtml = true;

smtp.Send(email);

// adiciona o nome no BulletList para mostra-lo ao usuário

BulletedList1.Items.Add(GridView1.Rows[i].Cells[2].Text);

}

catch (SmtpException ex)

{

Response.Write(ex.Message);

}

}

}

}

Salve o projeto e execute no browser (Figura 5). Faça os testes necessários e a partir deste exemplo você pode implementar rotinas de exclusão de linhas no GridView, pois o código para varrer todas as linhas você já tem neste artigo.

Figura 5 – Execução do projeto

Renato Haddad

Renato Haddad - MVP, MCPD e MCTS, palestrante em eventos da Microsoft em diversos países, ministra treinamentos focados em produtividade com o VS.NET 2008, ASP.NET 3.5, Reporting Services e Windows Mobile.