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:

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:

 

Protected Sub 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