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

Você está em: PrincipalArtigosNet : Webservices005
Quer receber novidades e e-books gratuitos?

Sistema de Enquetes baseado em WebServices –Parte V

Olá pessoal,

Nesta quinta etapa de nosso tutorial trabalharemos coma visualização dos resultados.

Abra o VS .Net 2003, pois daremos continuidade a implementação de nosso WebService.

Abra o arquivo EnqueteService.asmx. O próximo passo agora é criar o serviço que armazena os valores percentuais de cada item da enquête. O código que vamos mostrar logo abaixo, primeiramente obtém o total de votos de uma determinada enquete, depois usamos o próprio código SQL para tornar os valores inteiros em valores relativos, ou percentuais, dividindo seu valor real pelo total de votos e depois multiplicando por 100, veja. Então, digite o código como mostrado abaixo:

            //Descrição do serviço

            [WebMethod(Description="Obtém o percentual de votos de uma determinada enquete")]

            public DataSet ObterPercentualDosVotos(int IDEnquete)

            {

                  //Abre a conexão para executar um comando

                  Conexao.Open();

                  // Instancia o objeto OleDbommand para obter o total de votos de uma determinada enquete

                  OleDbCommand OleDbCmd1=new OleDbCommand("Select Sum (Votos) from TbItens where IDEnquete=" + IDEnquete +"",Conexao);

                  int TotalDeVotos;

                  //Atribui o total de votos a vairável criada

                  TotalDeVotos=Convert.ToInt32(OleDbCmd1.ExecuteScalar());

                  //Cria um novo Adapter para armazenar a porcentagem dos votos de cada Item

                  OleDbDataAdapter oleDbAdp=new OleDbDataAdapter("Select (Votos/" + TotalDeVotos +" *100 ) as VotosPercentuais,CorDoGrafico,Texto from TbItens where IDEnquete=" + IDEnquete + "",Conexao);

                  //Cria um novo DataSet

                  DataSet dsPercentual=new DataSet();

                  //Anexa os dados do Adapter ao DataSet criado

                  oleDbAdp.Fill(dsPercentual,"PercentuaisDeVotos");

                  //Encerra a conexão.

                  Conexao.Close();

                  Conexao.Dispose();

                  return dsPercentual;

            }

Ok, agora criaremos a interface que consumirá este serviço. Faça novamente a referência ao projeto.

Crie um novo arquivo chamado Resultado.aspx. Insira os controles conforme a imagem abaixo:

PlaceHolder – ID=Ph

Panel – Este deve ser colocado sob o PlaceHoldes, pois é apenas para determinar a área do gráfico.

O que vamos fazer agora é criar um gráfico de barras com os Itens de uma determinada enquête. Estes itens devem possuir cores diferentes. Por isso, vamos criar um controle do tipo Panel. Ele será criado dinamicamente, pois precisamos ajustar sua cor, sua largura de acordo com os dados da enquête. Segue abaixo o código que gera o gráfico de barras:

private void DesenharGrafico(int IDEnquete)

            {

                  //Faz referência ao serviço

                  localhost.EnqueteService es=new Enquetes.localhost.EnqueteService();

                  //Cria um DataSet e armazena nele os dados do serviço ObterPercentualDeVotos

                  DataSet ds=es.ObterPercentualDosVotos(IDEnquete);

                  //Cria uma matriz com as possíveis cores para as barras:::Configure da forma que quiser

Color[]

cor={Color.Firebrick,Color.DarkCyan,Color.MediumVioletRed,Color.DarkGreen};

                  //Variável contadora para selecionar a cor da barra

                  int x;

                  //Início do loop

                  //Incrementa x enquanto não atingir todos os itens da tabela

                  for(x=0;x<ds.Tables[0].Rows.Count;x++)

                  {

                        //Percorre todas as linhas(rows) da tabela

                        foreach(DataRow row in ds.Tables[0].Rows)

                        {

                             //Cria um Label dinamicamente para exibir o texto do Item

                             Label lb=new Label();

                             //Formata o label

                             lb.Text=row[2].ToString();

                             lb.Font.Name="Arial";

                             lb.Font.Size=FontUnit.XSmall;

                             //Indica que a cor da fonte do label será a mesma da barra

                             lb.ForeColor=cor[x];

                             //Cria o Panel dinamicamente::Este representará a barra de cada item

                             Panel pn=new Panel();

                             //Indica o valor percentual do Item na propriedade ToolTip(Dica de Tela)

                             pn.ToolTip=row[0].ToString() + " %";

                             //Indica que a largura do Panel representa o gráfico de barra

                             pn.Width=Convert.ToInt32(row[0]);

                             //Altura da barra

                             pn.Height=20;

                             //Cor da barra

                             pn.BackColor=cor[x];

                             //Renderiza o Label através do PlaceHolder

                             Ph.Controls.Add(lb);

                             //Renderiza o Panel através do PlaceHolder

                             Ph.Controls.Add(pn);

                             //Incremento da variável x::É necessário fazer para evitar a repetição das cores e dos gráficos

                             x=x+1;

                        }

                  }

            }

Ok, o código acima apresenta algumas novidades, como o uso dos PlaceHolder para renderizar os controles criados dinamicamente.

A cor do texto e da barra são as mesmas. Você pode determinar outras cores, desde que o número de cores disponíveis de cores no Array seja maior ou igual ao número de itens, e que também sejam adicionados através do prefixo Color.NomeDaCor, pois,esta matriz armazena valores da classe System.Drawing.Color.

Vamos fazer um teste neste código. Faça a chamada da rotina no Page_load() passando como parâmetro o IDEnquete de uma enquête existente e que contenha votos.

private void Page_Load(object sender, System.EventArgs e)

            {

                  if(!Page.IsPostBack)

                  {

                        DesenharGrafico(1);

                  }

                 

            }

Vejam que os gráficos foram desenhados corretamente. Agora, posicione o mouse sobre as barras para ver o valor percentual:

Vejam que o resultado aparece. Uma Dica: Se você achou que o tamanho das barras está muito pequeno em relação à área do gráfico, basta aumentar sua escala alterando o seguinte trecho do código:

pn.Width=Convert.ToInt32(row[0]);

para

pn.Width=5* Convert.ToInt32(row[0]);

Vejam que multipliquei o tamanho da barra por 5. Você pode usar o valor que melhor se ajustar na sua aplicação. Vejam:

Escala ajustada para 8X

Ainda não concluímos precisamos fazer com que a página principal da enquete chame esta página. Abra o arquivo VisualizarEnquete.aspx.

Agora vamos apenas adicionar uma linha de código para que o botão btnResultado funcione:

No final da rotina MostrarEnquete, acrescente o seguinte trecho do código:

btnResultado.Attributes.Add("onclick","window.open('Resultado.aspx?idenquete=" + IDEnquete +"')");

Este trecho fará com que os resultados a serem carregados são referentes a enquete visualizada.

Para terminar falta apenas uma modificação no arquivo Resultado.aspx.

No page_load, altere o código da chamada da rotina para o código abaixo:

private void Page_Load(object sender, System.EventArgs e)

            {

                  if(!Page.IsPostBack)

                  {

DesenharGrafico(Convert.ToInt32(Request.QueryString["idenquete"]));

                  }

            }

Isto conclui mais esta etapa do tutorial. Vamos ao teste final:

Mais uma enquete criada....

Exibição dos resuitados....

Valeu pessoal. Na próxima etapa estaremos concluindo finalmente este tutorial. Para dicas,sugestões, críticas ou elogios, o email é

lanodecastro@hotmail.com

Um grande abraço!

Lano de Castro

1 Visão geral do .NET Framework e do CLR
1 Comunicação .NET e VB 6.0 (com Visual Studio.NET 2005) - Parte I
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 1
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 2
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 3
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 4
1 Desenvolvendo aplicações Windows utilizando o VB.NET e o C# - Parte 5
1 VB: Menu Principal, Menu PopUp e Arquivos Texto
Visual Studio
1 ASP.NET 2.0 - Conhecendo o ObjectDataSource Control
1 Visual Web Developer - 2005 - Beta 2 - Introdução
1 ASP.NET 2.0 - Conhecendo o GridView
1 ASP.NET 2.0 - Utilizando o GridView e DetailsView
1 ASP.NET 2.0 - Conhecendo o ObjectDataSource Control - Parte 2
1 ASP.NET 2.0 - Utilizando o XmlDataSource
1 Envio de e-mail através de formulário web
1 ADO.NET 2.0 - Conhecendo as novidades parte 1
1 Série Visual Source Safe - Parte 1
1 Série Visual Source Safe - Parte 3
1 URL Indexável – Reescrever URL de uma forma amigável
1 Permissão de Página Utilizando Web.Config
1 Usando public interface
1 Trabalhando com o componente TabContainer
1 Adicionando Menu no DataGridView
ASP.NET
1 Conhecendo o ambiente integrado do WebMatrix
1 Desenvolvendo aplicações ASP.NET no WebMatrix - WebControls – Parte I
1 Desenvolvendo aplicações ASP.NET no WebMatrix - WebControls – Parte II
1 Desenvolvendo aplicações ASP.NET no WebMatrix - WebControls – Parte III
1 Acessando um banco de dados facilmente com ADO.Net e Datagrid
1 Desvendando os segredos do Dataset- Parte I
1 Construindo um Sistema de Publicação de Notícias – Parte 1
1 Construindo um Sistema de Publicação de Notícias – Parte 2
1 Construindo um Sistema de Publicação de Notícias – Parte 3
1 Construindo um Sistema de Publicação de Notícias – Parte 4
1 Construindo um Sistema de Publicação de Notícias – Parte 5
1 Login com Perfil de Acesso
1 Guest Book com XML - Parte 1
1 Guest Book com XML - Parte 2
1 Agendando Datas no Calendário com XML
1 Filtrando e Organizando Dados com o Controle DataView
1 Lista de Dados com Subitens – Parte 1
1 Lista de Dados com Subitens – Parte 2
1 Trabalhando com Arquivos e Diretórios – Parte 1
1 Trabalhando com Arquivos e Diretórios – Parte 2
1 Trabalhando com Arquivos e Diretórios – Parte 3
1 Sistema de Enquetes baseado em WebServices – Parte 1
1 Sistema de Enquetes baseado em WebServices – Parte 2
1 Sistema de Enquetes baseado em WebServices – Parte 3
1 Upload de Arquivos
1 Crie seu próprio código de verificação
1 Login e Senha com FormsAuthentication – Parte 1
1 Login e Senha com FormsAuthentication – Parte 2
1 Sistema de Enquetes baseado em WebServices – Parte 4
1 Sistema de Enquetes baseado em WebServices – Parte 5
1 Sistema de Enquetes baseado em WebServices – Parte 6