NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!
UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI
Olá pessoal,
Chegamos a quarta etapa do nosso tutorial, agradeço a todos que têm lido e aprendido com este material. Nos primeiros tutoriais desta série, aprendemos a implementar e consumir um WebService. Por isso, se você ainda têm dúvidas sobre isso, é melhor que leia novamente a parte I,II, e III.
Hoje trabalharemos com WebServices retornando DataSets. Começaremos a desenvolver o código que exibe uma determinada enquete e seus itens, e também já implementaremos uma interface de exibição destes dados.
Abra o projeto Enquetes que já havíamos criado anteriormente.
Adicione um novo arquivo ao projeto do tipo WebService, e dê a ele o nome de EnqueteServices.asmx:
Clique no botão ViewCode para exibir o código do arquivo.
Vamos criar agora o serviço ObterEnquete, na qual irá selecionar uma das enquetes cadastradas no banco de dados e também selecionará seus itens. Estes dados serão armazenados em um DataSet com duas tabelas. Deverá ser passado o parâmetro IDEnquete. Para isso, digite o código conforme está abaixo:
//Descrição do serviço
[WebMethod(Description="Seleciona a enquete através de um parâmetro de identificação")]
//Assinatura do método, passando o parâmetro IDEnquete
public DataSet ObterEnquete(int IDEnquete) {
//Cria o adaptador de dados para obter a enquete
OleDbDataAdapter OledbAdp1=new OleDbDataAdapter("Select IDEnquete,Pergunta from TbEnquetes where IDEnquete=" + IDEnquete + "",Conexao);
//Cria o adaptador de dados para obter os itens da enquete selecionada
OleDbDataAdapter OledbAdp2=new OleDbDataAdapter("Select IDItem,Texto,Votos from TbItens where IDEnquete=" + IDEnquete + "",Conexao);
//Cria o DataSet
DataSet dsEnquetes=new DataSet();
//Anexa os dados dos adaptadores em tabelas do Dataset
OledbAdp1.Fill(dsEnquetes,"Enquete");
OledbAdp2.Fill(dsEnquetes,"Itens");
//Retorna o DataSet
return dsEnquetes;
}
Um detalhe importante neste código é que a conexão não foi criado neste trecho. Mas por quê?
Bem, como vamos utilizar esta mesma conexão em todos os serviços. Declaramos esta conexão como pública. Então faça esta declaração em seu código logo após a declaração da classe:
public class EnqueteService : System.Web.Services.WebService {
//Cria a conexão a ser utilizada no projeto
public OleDbConnection Conexao=new
OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data
source=E:/SistemaDeEnquetes.mdb");
Lembre-se: digite somente o trecho referente ao objeto OleDbConnection, pois a declaração da classe já havia sido feita automaticamente
No método ObterEnquete não encontramos muitas novidades, a não ser na utilização de dois DataAdapters no mesmo DataSet. Como o DataSet é uma estrutura de Base de Dados ele permite a inclusão de várias tabelas, por isso, não houve a necessidade de criar mais um DataSet. Vamos fazer o teste do WebService, mas antes disso é necessário incluir pelo menos uma enquete no banco de dados e seus itens. Abra o banco de dados e faça isso, se quiser pode utilizar o meu exemplo:
Cadastrando a enquete...
Cadastrando os itens...
Agora vou executar o WebService e informar o valor 1 para o parâmetro IDEnquete:
Exibindo os serviços disponíveis...
Selecionando o serviço ObterEnquete e passando o valor do parâmetro IDEnquete...
Resultado do serviço...
Ok, vejam que os resultados foram retornados. Isso significa que sua enquete já pode ser visualizada. Então vamos construir agora a interface que consumirá este serviço.
Adicione um novo arquivo do tipo WebForm e dê a ele o nome VisualizarEnquete.aspx
Defina o Set StartPage para este arquivo:
Agora, conforme o modelo abaixo insira os seguintes WebControls:
Panel – Apenas para a organização dos elementos.
DataList – ID=dlEnquete
RadioButtonList – ID=rdItens
Button –ID=btnResultado – Text=Ver Resultado
Button – ID=btnVotar – Text=Votar
Vamos agora configuar o DataList para que ele exiba a pergunta da enquete.
Clique com o botão direito sobre o dlEnquete, vá em Edit Templates >Item Templates
Arraste um Label para a região ItemTemplate. Selecione o Label e na caixa de propriedades clique na opção DataBindings
Na parte da direita da tela que se abriu, expanda o item Container e clique em DataItem:
Marque a opção Custom binding expression e escreva a expressão conforme a imagem abaixo:
Ok, agora vamos saía da edição do templates do DataList. Vamos fazer referência ao serviço no qual iremos consumir. Clique com o botão direito sobre o projeto e escolha Add Web Reference....Caso não saiba como fazer a referência, leia o tutorial anterior a este.
Vejam dei o nome localhost como referência ao meu serviço.
Clique no botão view Code para visualizarmos o código do arquivo VisualizarEnquete.aspx
Vamos criar o método que exibirá a enquete. Digite o código abaixo:
private void MostrarEnquete(int IDEnquete)
{
//Cria a instãncia do serviço
localhost.EnqueteService es=new Enquetes.localhost.EnqueteService();
//Anexa ao DataList o conteúdo da tabela Enquete que está no DataSet do WebService
dlEnquete.DataSource=es.ObterEnquete(IDEnquete).Tables["Enquete"];
dlEnquete.DataBind();
//Anexa ao RadiobuttonList o conteúdo que está na tabela Itens do DataSet
rdItens.DataTextField="Texto";
rdItens.DataValueField="IDItem";
rdItens.DataSource=es.ObterEnquete(IDEnquete).Tables["Itens"];
rdItens.DataBind();
}
Viram como foi simples? Em outras tecnologias seria no mínimo necessário o uso de alguns ifs e loops, mas em .Net, seus controles já estão preparados para receber dados em coleções.
Não esqueça de chamar este código no PageLoad:
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack){
MostrarEnquete(1);
}
}
Agora formate sua aplicação, se quiser usem o meu modelo como sugestão:
Agora vamos aos testes:
Exibindo a enquete...
Faça o teste cadastrando mais enquetes e não esqueça de mudar o parâmetro IDItem:
Alterando o IDEnquete para mostrar uma outra enquete...
Até mais pessoal,
No próximo implementaremos a votação da enquete!
Lano de Castro
lanodecastro@hotmail.com