 ASP .NET - Sistema para 
geração de pesquisas na web - II
  
ASP .NET - Sistema para 
geração de pesquisas na web - II
|  | Nesta segunda parte (veja a primeira parte) vamos definir a estrutura da aplicação definindo as páginas e suas funções e a criação da Master Page que irá ser a identidade visual do nosso web site. | 
Abaixo temos a figura exibindo a Master Page - Menu.master e a estrutura do projeto na janela Solution Explorer:
|  | 
O web site Pesquisas apresenta uma pasta Admin onde temos as seguintes páginas:
Alternativas.aspx - Define as alternativas de cada questão que compõem a pesquisa;
Estatistica.aspx - Exibe as estatísticas das pesquisas;
Participantes.aspx - Define os participantes para uma pesquisa;
Pesquisas.aspx - Define a pesquisa , seu título e descrição e permite enviar um email para os participantes da pesquisa;
Questoes.aspx - Define as questões de uma pesquisa;
Para criar a pasta Admin clique com o botão direito do mouse sobre o nome do projeto e selecione New Folder e informe o nome Admin;
A pasta App_Data contém o banco de dados Pesquisa.mdf criado no primeiro artigo.(Ela será criada mais adiante)
Temos ainda as páginas Default.aspx que serve apenas para montar a Master Page e a página Pesquisa.aspx que é a página de pesquisa apresentada ao participante.
Para criar a master page no menu web site selecione Add New Item e em Templates selecione Master Page, informe o nome Menu.master e clique em Add;
A seguir inclua uma tabela a partir do menu Table opção Insert Table com 3 linhas e duas colunas com o seguinte leiaute:
|  | 
Para definir as opções do Menu , inclua o componente TreeView a partir da ToolBox e selecionando o componente clique em Edit Nodes definindo a estrutura de opções do menu conforme a figura abaixo :
|  | 
Observe que para cada opção do menu temos a propriedade NavigateUrl definida para a página correspondente a ser exibida no web site:
| Gerenciar Pesquisas | ~/Admin/Pesquisas.aspx | 
| Gerenciar Questões | ~/Admin/Questoes.aspx | 
| Gerenciar Alternativas | ~/Admin/Alternativas.aspx | 
| Gerenciar Participantes | ~/Admin/Participantes.aspx | 
| Estatísticas | ~/Admin/Estatistica.aspx | 
Definindo a página de pesquisa na área de administração do site
No menu WebSite selecione Add New Item e em Templates selecione Web Form e informe o nome Pesquisas.aspx tendo o cuidado de marcar as opções Place code in separate file e Select Master Page;
A seguir selecione a master page Menu.Master e na sequência inclua a partir da ToolBox um componente DetailsView, um componente SqlDataSource e um controle Label no formulário;
  Clique no componente SqlDataSource e selecione
  Configure Data Source e defina a instrução para 
  selecionar todos os registros da tabela Pesquisa: 
  SELECT * [Pesquisa];
Finalmente selecione o controle DetailsView e na aba Details Tasks em choose Data Source selecione o componente SqlDataSource1 e habilite a opção para paginação no DetailsView;
|  | 
No controle DetailsView clique em Edit Templates e defina em ItemTemplate 4 LinkButtons conforme a figura abaixo:
|  | 
O código do arquivo Pesquisas.aspx.vb é dado a seguir:
Os namespaces usados são:
| Imports 
      System.Data.SqlClient Imports System.Data Imports System.Net.Mail | 
O código do evento ItemCommand que verifica se o nome do comando executado é "Convite" e envia um e-mail para o participante da pesquisa é dado a seguir:
| ProtectedSub DetailsView1_ItemCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewCommandEventArgs) Handles DetailsView1.ItemCommand If e.CommandName = "Convite" Then Dim erro As Boolean = False Dim con As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString) Dim cmd As New SqlCommand("Select * from participantes where pesquisaID=@id", con) Dim p1 As New SqlParameter("@id", DetailsView1.SelectedValue) cmd.Parameters.Add(p1) 
 Dim da As New SqlDataAdapter da.SelectCommand = cmd 
 Dim ds As New DataSet da.Fill(ds, "Participantes") 
 Dim cliente As New SmtpClient() For Each row As DataRow In ds.Tables("Participantes").Rows Try cliente.Send(ConfigurationManager.AppSettings("webmasteremail"), row("email"), "Convite para participar da nossa pesquisa", "Obtenha a pesquisa na seguinte URL : " & vbCrLf & "http://" & Request.Url.Host & "/pesquisa.aspx?id=" & DetailsView1.SelectedValue) Catch ex As Exception Label1.Text =" Erro ao enviar o convite " + ex.Message erro =True End Try Next If erro = False Then Label1.Text ="Convite enviado com sucesso!" End If End If End Sub 
 | 
Veja a baixo a página Pesquisas.aspx sendo exibida no navegador Google Chrome:
|  | 
Definindo a página de Questões
No menu WebSite selecione Add New Item e em Templates selecione Web Form e informe o nome Questoes.aspx tendo o cuidado de marcar as opções Place code in separate file e Select Master Page;
A seguir selecione a master page Menu.Master e na sequência inclua a partir da ToolBox um componente DetailsView, dois componentes SqlDataSource, um componente DropDownlist;
Clique no componente SqlDataSource2 e selecione Configure Data Source e defina a instrução para selecionar o código da pesquisa e o título da tabela Pesquisa: SELECT [pesquisaID], [titulo] FROM [Pesquisa]
Clique no componente SqlDataSource3 e selecione Configure Data Source e defina a instrução para selecionar todos os registros da tabela Questoes filtrando pelo código da pesquisa, onde o código da pesquisa tem origem do controle dropdownlist1(DropDownList1.SelectedValue)
SELECT * FROM [Questoes] WHERE ([pesquisaID] = @pesquisaID)
Finalmente selecione o controle DetailsView e na aba DetailsView Tasks em choose Data Source selecione o componente SqlDataSource3;
Habilite as opções para paginação, inclusão, exclusão e alteração no DetailsView;
|  | 
No controle DetailsView clique em Edit Templates e defina em as seções ItemTemplate, EditItemTemplate e InsertItemTemplate conforme a figura abaixo:
|  |  | 
Agora precisamos definir o código para os eventos ItemInserting e ItemUpdating para tratar a inclusão e atualização de dados no controle DetailsView. O código é dado a seguir:
| Protected
      Sub 
      DetailsView1_ItemInserting(ByVal 
      sender As
      Object, 
      ByVal e 
      As 
      System.Web.UI.WebControls.DetailsViewInsertEventArgs) 
      Handles 
      DetailsView1.ItemInserting e.Values("PesquisaID") = DropDownList1.SelectedValue End Sub Protected Sub DetailsView1_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles DetailsView1.ItemUpdating e.NewValues("PesquisaID") = DropDownList1.SelectedValue End Sub | 
No evento ItemInserting e ItemUpdating estamos atribuindo o valor selecionado no controle DropDownlist a PesquisaID que é o parâmetro usado no controle SqlDataSource3.
Abaixo temos a exibição da página Questoes.aspx :
|  | 
A definição das demais páginas segue o mesmo princípio e utiliza a master page para manter a identidade visual.
  
	O código completo esta no  
	Super DVD .NET 
	 que 
	contém mais de 130 programas com código fonte aberto para estudo.
 
| Veja os 
    Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique 
	e confira ! Quer migrar para o VB .NET ? 
 Quer aprender C# ?? 
 Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? | 
referências:
José Carlos Macoratti