ASP.NET: Consultando Endereços por CEP dos Correios Utilizando as Classes HttpWebRequest e HttpWebResponse

Postado por Daniel Garcia às 07:54 QUARTA-FEIRA, 25 DE JANEIRO DE 2012

Vejo em muitos fóruns, posts de desenvolvedores procurando por Webservices e outras formas de incorporar a consulta de endereços por CEP em seus sistemas. No entanto são poucas as maneiras disponíveis de forma gratuita para alcançar tal tarefa.

Então resolvi estudar uma forma simples de conseguir tal informação e consumi-la em uma aplicação .NET.

Para isso é necessário utilizar as classes HttpWebRequest e HttpWebResponse, ambas pertencentes ao namespace System.Net.

Um breve descritivo: A classe HttpWebRequest permite que uma aplicação faça uma requisição à um site, acesse um site. Já a classe HttpWebResponse é responsável por receber/tratar a resposta a essa requisição. Tudo isso ocorre, da mesma forma de quanto estamos entrando em um site a partir de um browser.

Vamos ao que interessa!

Para ilustrar essa funcionalidade optei por uma página ASP.NET (Web Form) bastante simplificado. Contendo: 1 TextBox e 1 Button para informar e submeter a pesquisa pelo CEP e 1 Literal para exibir o HTML resultante da consulta efetuada ao site dos correios.

Tela de Pesquisa:

Segue código HTML do Web Form: 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
    <
head runat="server">
        <title>Consulta de Endereos por CEP</title>
    </
head>
<
body>
    <form id="form1" runat="server">
        <div>
            <h2>Consulta de Endereos por CEP</h2>
            CEP:
            <asp:TextBox ID="TextBoxCEP" runat="server"></asp:TextBox>
            <asp:Button ID="ButtonConsulta" runat="server" Text="Consultar" OnClick="ButtonConsulta_Click" />
            <br /><br />
            <asp:Literal ID="LiteralResultado" runat="server"></asp:Literal>
        </div>
    </form>
</
body>
</
html>

Segue código fonte comentado passo a passo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using System.Text;

public partial class _Default : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void ButtonConsulta_Click(object sender, EventArgs e)
    {
        this.CosultarCEP(TextBoxCEP.Text);
    }

    private void CosultarCEP(string cep)
    {
        // Efetua a requisio ao site passando o CEP como querystring
        HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.buscacep.correios.com.br/servicos/dnec/consultaLogradouroAction.do?Metodo=listaLogradouro&CEP=" + cep + "&TipoConsulta=cep");
        int count;
        byte[] buf = new byte[1000];
        StringBuilder sb = new StringBuilder();
        string temp;

        // Recebe a resposta da requisio
        HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

        // Transforma a requisio em um Stream
        Stream stream = httpWebResponse.GetResponseStream();

        // Carrega e despeja um buffer (array de bytes), apendando em um StringBuider enquanto o buffer não estiver vazio
        do
        {
            count = stream.Read(buf, 0, buf.Length);
            temp =
Encoding.Default.GetString(buf, 0, count).Trim();
            sb.Append(temp);

       
}
while (count > 0);

        // Converte o String Buider para String
        string html = sb.ToString();

        // Seleciona o String HTML de acordo com os delimitadores
        html = this.retornarHtml(html, "<?xml version = '1.0' encoding = 'ISO-8859-1'?>", "<table width=\"645\">");
        // Exibe o HTML em um controle Literal
        LiteralResultado.Text = html; 
    }

    // Retorna o String HTML de acordo com os delimitadores
   
private string retornarHtml(string html, string delimitadorInicial, string delimitadorFinal)
    {
        int posInicial;
       
int posFinal;

        // Verifica se o delimitador inicial foi encontrado
        if (html.IndexOf(delimitadorInicial) != -1)
        {

            // Verifica a posio do delimitador inicial dentro do String HTML (soma a quantidade de caracteres do delimitador)
            posInicial = html.IndexOf(delimitadorInicial) + (delimitadorInicial.Length + 1);

            // Verifica a posio do ltimo caracter do delimitador final
            posFinal = html.IndexOf(delimitadorFinal, posInicial) - posInicial;

            // Retorna a String HTML de acordo com a posio inicial e a posio final
            html = html.Trim().Substring(posInicial, posFinal);

        }

        return html;

    }

}

Pronto! Agora basta executar a aplicação!

E válido ressaltar que o funcionamento deste mecanismo pode ser afetado caso haja alguma mudança na forma de consulta no site de onde origina a informação.

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | C#

LINQ to SQL: Utilizando a função getdate() do SQL Server

Postado por Daniel Garcia às 15:38 SEXTA-FEIRA, 23 DE JULHO DE 2010

Como vimos no post sobre LINQ to SQL, esta tecnologia nos oferece um grande ganho no desenvolvimento. Tanto em termos de praticidade quanto em termos tempo no desenvolvimento.

Porém existem algumas situações que precisamos utilizar recursos do banco de dados SQL Server e ficamos um pouco restritos. Isso aconteceu comigo, quando estava desenvolvendo uma aplicação de Atendimento On-line que consistia em duas "pontas": O lado do atendente e o lado do cliente. Porém essas pontas estavam hospedadas em servidores web distintos. E havia a necessidade da data atual para controlar o carregamento das mensagem.

O único problema, é que pelo fato da aplicação estar distribuida poderia haver diferença entre as datas desses servidores. A forma que encotrei para evitar isso era utilizar a função getdate() do SQL server.

Mas como fazer isso?
Muito simples!

Basta adicionar o seguinte método à classe data context, como no exemplo abaixo:

public partial class MeuDataContext 
{ 
 
public DateTime GetDate() 
 
{ 
   
return ExecuteQuery<DateTime>("SELECT GETDATE()").First(); 
 
} 
} 
 

Depois é só acessar o método através da instância do DataContext.

DateTime data = dbContext.GetDate();

Espero que a dica seja útil.

5.0 ponto(s). Avaliado por 1 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | Linq

ASP.NET: Trabalhando com a API do Twitter – Parte I (Exibindo mensagens do Twitter em uma página ASP.NET)

Postado por Daniel Garcia às 00:45 SEGUNDA-FEIRA, 23 DE NOVEMBRO DE 2009

Tenho visto que muitas pessoas vêm aderindo ao Twitter e que muitas ferramentas vêm sendo desenvolvidas em função disso.

Por isso, resolvi criar uma série de dicas que ajudarão aos desenvolvedores a desvendar os “macetes” de como trabalhar com a API do Twitter (http://apiwiki.twitter.com).

Nesta dica mostrarei como exibir as mensagens de seu Twitter em uma página ASP.NET de forma personalizada.

Como funciona?

1 – Criamos uma rotina que faz uma requisição ao serviço, informando como parâmetro o nome de usuário e a quantidade de mensagens que desejamos retornar. Com isso será retornado um XML contendo as mensagens deste usuário.

Daí então carregamos o XML em um DataSet para facilitar posteriormente a sua exibição.

Veja o código abaixo:

private DataSet RecuperarMensagens()
{
    
string usuario = "danielsgarcia";
    string quantidade = "3";
    string url; DataSet ds;

    try
   

        ds = new DataSet();
        url = string.Format("http://twitter.com/statuses/user_timeline.xml?screen_name={0}&count={1}", usuario, quantidade);

        System.Net. WebClient cliente = new System.Net.WebClient();

        System.IO.Stream stream = cliente.OpenRead(url);
        stream.Flush();

        ds.ReadXml(stream);

        return ds; 
    }
    catch (Exception ex)
    { 
        throw ex; 
    }
}

2 – O próximo passo é exibir os dados em sua página. Para isso eu utilizo um DataList, pois acho mais flexível na diagramação do layout. Porém podemos utilizar uma GridView ou outro controle.

Veja o a implementação do DataList no código da página:

    <form id="form1" runat="server">
    <div>
        <table cellpadding="0" cellspacing="0" width="300px">
            <tr>
                <td rowspan="2">
                    <asp:Image ID="ImageFoto" runat="server" />
                </td>
                <td>
                    Meu Twitter</td>
            </tr>
            <tr>
                <td>
                    <asp:HyperLink ID="HyperLinkNome" runat="server"></asp:HyperLink>
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <asp:DataList ID="DataListMensagens" runat="server">
                        <SeparatorTemplate>
                            <hr />
                        </SeparatorTemplate>
                        <HeaderTemplate>
                            <hr />
                        </HeaderTemplate>
                        <FooterTemplate>
                            <hr />
                        </FooterTemplate>
                        <ItemTemplate>
                            <asp:Label ID="LabelData" runat="server" Text='<%# Eval("created_at") %>'></asp:Label>
                            <br />
                            <asp:Label ID="LabelMensagem" runat="server" Text='<%# Eval("text") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:DataList>
                </td>
            </tr>
        </table>
    </div>
    </form>

3 – Então, precisamos codificar uma rotina para exibição dos dados, conforme o método a seguir:

private void ExibirMensagens()

    string nomeExibicao;
    string urlImagem;
    DataSet ds;

    try
    {
        ds = this.RecuperarMensagens();

        nomeExibicao = ds.Tables["user"].Rows[0]["screen_name"].ToString();
        urlImagem = ds.Tables["user"].Rows[0]["profile_image_url"].ToString();

        ImageFoto.ImageUrl = urlImagem;
        HyperLinkNome.Text = "@" + nomeExibicao;
        HyperLinkNome.NavigateUrl = "http://twitter.com/" + nomeExibicao;

        DataListMensagens.DataSource = ds.Tables["status"];
        DataListMensagens.DataBind();
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

E para finalizar invocá-lo no evento Load da página:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
        this.ExibirMensagens();
}
 

Abaixo o resultado:

Espero que a dica seja útil.

Continuem acompanhando a série de post que farei sobre como trabalhar com a API do Twitter utilizando o ASP.NET.

Ah! Já ia me esquecendo! Siga-me no Twitter: http://twitter.com/danielsgarcia

4.0 ponto(s). Avaliado por 6 pessoas

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Corrigindo Problemas de Compatibilidade entre o Google Chrome e o ASP.NET Menu

Postado por Daniel Garcia às 16:37 SEXTA-FEIRA, 2 DE OUTUBRO DE 2009

Com o surgimento de novos navegadores surgiram algumas incompatibilidades com nossas páginas web. Em sequência ao post Corrigindo Problemas de Incompatibilidade de Páginas ASP.NET e o Internet Explorer 8, mostrarei como corrigir o problema de compatibilidade do navegador Google Chrome com o componente Menu do ASP.NET.

O problema ocorre porque o ASP.NET faz uma verificação se o navegador suporta ou não a execução de Java Script. Porém esta verificação nem sempre é muito eficiente. Que é o caso da verificação dos navegadores da família do Safari, como exemplo o Google Chrome.

Para corrigir o problema, precisamos forçar a execução de Java Script. Então precisaremos forçar com que o ASP.NET “entenda” que o navegador do cliente é um navegador atual, moderno. Para tanto precisaremos implementar o método Page_PreInit da página como o seguinte código:

protected void Page_PreInit(object sender, EventArgs e)
{
    if (Page.Request.ServerVariables["http_user_agent"].ToLower().Contains("safari"))
    {
        Page.ClientTarget = "uplevel";

    }
}

Espero que a dica seja útil.

4.8 ponto(s). Avaliado por 4 pessoas

  • Currently 4,75/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Removendo acentos de um campo texto de uma página ASP.NET durante a digitação (Java Script)

Postado por Daniel Garcia às 19:41 TERÇA-FEIRA, 8 DE SETEMBRO DE 2009

Pessoal, vou dar uma dica de como podemos de forma simples remover caracteres acentuados de um campo durante a digitação. Para isso contarei com a ajuda de uma função Java Script.

A função que desenvolverei executará as seguintes tarefas:

1 – Pegar o valor digitado no campo texto;

2 – Localizar o caractere acentuado, conforme especificado dentro da variável “acento” da função;

3 – Substituir o caractere acentua do pelo caractere não acentuado correspondente, na variável “semacento”;

4 – Por fim, retornar o texto sem acentos para o campo de origem.

Veja a função Java Script a seguir:

    <script type="text/javascript" language="javascript">
        function retirarAcentos(campo) {
               var texto = campo.value;
 
             var acento = 'áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÖÔÚÙÛÜÇ';
  
             var semacento = 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC';
  
            var nova='';

               for (i = 0; i < texto.length; i++) {
                     if (acento.search(texto.substr(i, 1)) >= 0) {
                          nova += semacento.substr(acento.search(texto.substr(i, 1)), 1);
   
               }
  
                  else {
                         nova += texto.substr(i, 1);
  
                  }
  
            }

               campo.value = nova;
   
     }

    </script>

Lembre-se o tag <script> deve estar contido dentro do tag <head> da página.

Adicionarei um objeto do tipo TextBox à página .aspx, que receberá por padrão o nome de objeto “TextBox1”:

<form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    </div>

</form>

O próximo passo é associar a chamada da função Java Script ao campo “TextBox1” da página. Para isso teremos que atribuir ao campo texto a tarefa de executar o evento “onkeyup”, que ira díspar a função.

Para isso utilizarei o evento Load da página ASP.NET. Conforme código a seguir:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

         If Not Page.IsPostBack Then

             TextBox1.Attributes.Add("onkeyup", "retirarAcentos(this);")

         End If 

End Sub 

Você poderá ver mais exemplos de como trabalhar com funções Java Script no ASP.NET na seção Java Script do blog.

Concluído! Agora basta executar a página e ver o resultado.

Espero que aproveitem a dica!

4.7 ponto(s). Avaliado por 3 pessoas

  • Currently 4,666667/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | Java Script

Acesso a dados com ASP.NET e MySql

Postado por Daniel Garcia às 11:43 QUINTA-FEIRA, 3 DE SETEMBRO DE 2009

Muitos provedores de internet oferecem o MySql como solução gratuita de banco de dados. Mostrarei o que você deve fazer para que sua aplicação ASP.NET possa acessar o MySql.

1 - Primeiramente, baixe o MySql Connector para .net em
http://dev.mysql.com/downloads/connector/net/6.0.html.
Sugiro que baixe "Windows Binaries, no installer (ZIP)".

2 - Descompacte o zip em uma pasta local de sua preferência.

3 - Em sua aplicação ASP.NET adicione uma referência para o arquivo "MySql.Data.dll".

4 - Adicione uma string de conexão em seu web.config:

<connectionStrings>
    <add name="StringTeste" connectionString="Server=[NOME_SERVIDOR]; Port=[PORTA]; Database=[NOME_BANCO]; Uid=[USUARIO]; Pwd=[SENHA]; pooling=false;" providerName="MySql.Data.MySqlClient"
/>
</connectionStrings>

5 - Em seu Webform faça o import / using dos namespaces MySql.Data e MySql.Data.MySqlClient.

6 - Para finalizar implemente o(s) método(s) para efetuar as operações com o MySql. Como exemplo o método abaixo que retorna um MySqlDataReader:

   public static MySqlDataReader Localizar(int id)
   {
       MySqlConnection connection = null;
       MySqlCommand command;
       MySqlDataReader dr;

       try
       {
           connection = new MySqlConnection();
           command = new MySqlCommand();

           connection.ConnectionString = ConfigurationManager.ConnectionStrings["StringTeste"].ConnectionString;

           command.Connection = connection;
           command.CommandText = "select id, campo1, campo2 from Tabela1 where id = @id order by campo1;";
           command.Parameters.Add("@id", MySqlDbType.Int32).Value = id;

           connection.Open();
           dr = command.ExecuteReader(CommandBehavior.CloseConnection);

           return dr;

       }
       catch (Exception ex)
       {
           throw ex;
       }
   }

Agora é com vocês! Espero que aproveitem essa dica!

Ninguém avaliou. Dê sua nota!

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | Banco de Dados

Efetuando Postback entre Páginas ASP.NET Diferentes (Cross-Page Postbacks)

Postado por Daniel Garcia às 21:33 QUARTA-FEIRA, 2 DE SETEMBRO DE 2009

Por padrão, controles do ASP.NET como o Button causam postback nas páginas, submetendo-as para si mesmas. Porém em algumas situações é necessário postar valores de uma página para outra para que sejam processados. Neste caso é necessário configurar os controles para que postem as requisições (requests) para uma página diferente a partir propriedade PostbackUrl. Basta somente informar o nome da página para qual desejamos postar.

Seguiremos os seguintes passo:

1 – Configurar o controle que efetuará o post para a página de destino.

<asp:Button ID="Button1" runat="server" Text="Button" PostBackUrl="~/PaginaDestino.aspx" />

2 – Resgatar os valores postados pela página de origem.

Na página destino precisaremos resgatar os valores postados pela página origem. Para que possamos acessar os valores dos controles precisaremos utilizar o objeto Page.PreviousPage.

Veja o código a seguir que lê os valores digitados em um controle TextBox e os exibirá em um controle do tipo Label.

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.PreviousPage Is Nothing Then
            Dim TextBoxOrigem As TextBox
            SourceTextBox = CType(PreviousPage.FindControl("TextBox1"), TextBox)

            If Not TextBoxOrigem Is Nothing Then
                Label1.Text = TextBoxOrigem.Text
            End If
        End If
    End Sub

 

Espero que a dica seja útil!

5.0 ponto(s). Avaliado por 1 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

ASP.NET

Criando um Carrinho de Compras Simples utilizando ASP.NET e Cookies

Postado por Daniel Garcia às 18:57 QUINTA-FEIRA, 6 DE AGOSTO DE 2009

Neste post mostrarei como criar um carrinho de compras simples para seu site de e-commerce, utilizando ASP.NET e Cookies, dispensando a utilização de banco de dados.

Optei por utilizar cookies ao invés do banco de dados para armazenamento no carrinho, em função da performance e também porque o carrinho de compras normalmente é utilizado para armazenamento temporário dos produtos.

Neste exemplo utilizarei o banco de dados Northwind. Se você não tiver um banco de dados poderá baixar o Nothwind.

Para desenvolver a aplicação utilizarei o Visual Studio 2008 Professional, porém você poderá utilizar o Visual Web Developer 2008 Express Edition, disponibilizado gratuitamente pela Microsoft em: http://www.microsoft.com/express/.

Seguirei os seguintes passos para criação do carrinho de compras:

1 – Abra o Visual Studio.

2 – Crie um webform chamado Produtos.aspx. Neste webform carregarei os produtos do banco de dados Northwind, para que posteriormente possamos adicioná-los ao carrinho de compras.

A seguir, o screenshot da página Produtos.aspx:


Lista de Produtos

Veja parte do código da página Produtos.aspx:

<div>
   
<b>Produtos</b><br /><br
/>
   
<asp:GridView ID="gvwProdutos" runat="server" AutoGenerateColumns="False" onrowcommand
="gvwProdutos_RowCommand">
       
<Columns
>
           
<asp:BoundField DataField="ProductID" HeaderText="ID"
/>
           
<asp:BoundField DataField="ProductName" HeaderText="Nome"
/>
           
<asp:TemplateField
>
               
<ItemTemplate
>
                   
<asp:LinkButton ID="lbtnAdicionar" runat="server" CommandArgument='<%# Eval("ProductID") %>' 
                                          CommandName="Adicionar">Adicionar ao Carrinho</asp:LinkButton
>
               
</ItemTemplate
>
            
</asp:TemplateField
>
        
</Columns
>
   
</asp:GridView
>
   
<p><a href="Carrinho.aspx">Meu Carrinho</a></p
>
</div>

Veja a implementação da rotina de carregamento da grid de produtos e da rotina que adiciona os produtos no carrinho de compras:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class Produtos : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            this.CarregarProdutos();
    }

    // Este evento é executado quando clicar em "Adicionar ao Carrinho"
    protected void gvwProdutos_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Adicionar")
        {
            // Verifica o id do produto
            string idProduto = e.CommandArgument.ToString();
            // Adiciona o produto ao carrinho de compras
            this.AdicionarAoCarrinho(idProduto);
            // Redireciona para página Carrinho.aspx
            Response.Redirect("Carrinho.aspx");
        }
    }

    // Carrega a grid com a listagem de produtos
    private void CarregarProdutos()
    {
        SqlConnection conexao = new SqlConnection("[STRING_DE_CONEXÃO]");
        SqlCommand comando = new SqlCommand("select ProductID, ProductName from products where supplierid = 2");
        SqlDataAdapter da = new SqlDataAdapter();
        DataSet ds = new DataSet();

        comando.Connection = conexao;

        da.SelectCommand = comando;
        da.Fill(ds);

        gvwProdutos.DataSource = ds;
        gvwProdutos.DataBind();
    }

    // Adiciona o Produto ao Carrinho
    private void AdicionarAoCarrinho(string idProduto)
    {
        HttpCookie cookie;

        // Se o cookie não existe, efetuamos sua criação
        if (Request.Cookies["Carrinho"] == null)
        {
            cookie = new HttpCookie("Carrinho");
            // Configura a expiração do Cookie para 4 horas
            cookie.Expires = DateTime.Now.AddHours(4);
            // Adiciona item ao cookie
            cookie.Values.Add(idProduto, null);
        }
        // Caso o cookie já exista
        else
        {
            bool existe = false;
            // Resgata o cookie
            cookie = (HttpCookie)Request.Cookies["Carrinho"];
            // Configura a expiração do Cookie para 4 horas
            cookie.Expires = DateTime.Now.AddHours(4);

            // Verifica se o ID do produto já foi inserido ao cookie
            foreach (string item in cookie.Values.AllKeys)
            {
                if (item == idProduto)
                {
                    existe = true;
                    break;
                }
            }

            // Se o produto não existir no carrinho ser adicionado
            if (!existe)
                cookie.Values.Add(idProduto, null);
        }

        // Grava o cookie
        Response.Cookies.Add(cookie);
    }
} 

3 – Crie outro webform chamado Carrinho.aspx onde exibiremos os produtos adicionados ao carrinho. Serão armazenados os “IDs” dos produtos dentro dos cookies.

A seguir, o screenshot da página Carrinho.aspx:


Carrinho de Compras

Veja parte do código da página Carrinho.aspx:

<div>
   
<b>Carrinho de Compras</b><br
/>
   
<br
/>
   
<asp:GridView ID="gvwCarrinho" runat="server" AutoGenerateColumns="False" OnRowCommand
="gvwCarrinho_RowCommand">
       
<Columns
>
           
<asp:BoundField DataField="ProductID" HeaderText="ID"
/>
           
<asp:BoundField DataField="ProductName" HeaderText="Nome"
/>
           
<asp:TemplateField
>
               
<ItemTemplate
>
                   
<asp:LinkButton ID="lbtnRemover" runat="server" CommandArgument='<%# Eval("ProductID") %>
'
                                          
CommandName="Remover">Remover Produto</asp:LinkButton
>
               
</ItemTemplate
>
           
</asp:TemplateField
>
       
</Columns
>
        <EmptyDataTemplate
>
           
O carrinho está vazio!
        </EmptyDataTemplate
>
   
</asp:GridView
>
   
<p><a href="Produtos.aspx">Continuar Comprando</a></p
>
</div>

Veja a implementação da rotina que exibe os produtos adicionados ao carrinho de compras e a rotina que remove os produtos do carrinho: 

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

public partial class Carrinho : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            this.CarregarCarrinho();
    }

     // Este evento é executado quando clicar em "Adicionar ao Carrinho"
    protected void gvwCarrinho_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Remover")
        {
            // Verifica o id do produto
            string idProduto = e.CommandArgument.ToString();
            // Remove porduto do carrinho
            this.RemoverDoCarrinho(idProduto);
            this.CarregarCarrinho();
        }
    }

    // Carrega a grid com os produtos do carrinho
    private void CarregarCarrinho()
    {
        // Recupera os ids dos produtos do cookie
        string produtos = this.RecuperarIDProdutos();
        SqlConnection conexao = new SqlConnection("[STRING_DE_CONEXÃO]");
        SqlCommand comando = new SqlCommand();
        SqlDataAdapter da = new SqlDataAdapter();
        DataSet ds = new DataSet();

        comando.Connection = conexao;

        if (!string.IsNullOrEmpty(produtos))
        {
            comando.CommandText = "select ProductID, ProductName from products where supplierid = 2 and ProductID in (" + produtos + ")";

            da.SelectCommand = comando;
            da.Fill(ds);

            gvwCarrinho.DataSource = ds;

        }

        gvwCarrinho.DataBind();

    }

    // Remove porduto do carrinho
    private string RecuperarIDProdutos()
    {
        string ids = null;
        int index = 1;

        // Resgata o cookie
        HttpCookie cookie = (HttpCookie)Request.Cookies["Carrinho"];

        // Verifica se o ID do produto já foi inserido ao cookie
        foreach (string item in cookie.Values.AllKeys)
        {
            ids += item;

            if (index < cookie.Values.Count)
                ids += ",";

            index += 1;
        }

        return ids;
    }

    private void RemoverDoCarrinho(string idProduto)
    {
        // Resgata o cookie
        HttpCookie cookie = (HttpCookie)Request.Cookies["Carrinho"];
        // Configura a expiração do Cookie para 4 horas
        cookie.Expires = DateTime.Now.AddHours(4);
        // Remove o id do produto do cookie
        cookie.Values.Remove(idProduto);
        // Grava o cookie

        Response.Cookies.Add(cookie);
    }
} 

Conclusão 

Este é um exemplo básico da criação de um carrinho de compras em ASP.NET. Use a sua criatividade e explore novos recursos e funcionalidades.

Espero que aproveitem esta dica!

3.3 ponto(s). Avaliado por 4 pessoas

  • Currently 3,25/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | E-Commerce

Limitando a Quantidade de Caracteres Digitados em um TextBox do tipo MultiLine

Postado por Daniel Garcia às 20:35 SÁBADO, 1 DE AGOSTO DE 2009

O TexBox é um dos controles de digitação mais utilizados. Ele possui três formatos para digitação de dados que podem ser configurados pela propriedade TextMode:

  • SingleLine: Permite digitação em uma única linha
  • MultiLine: Permite digitação em múltiplas linhas
  • Password: Permite digitação em formato senha. Oculto por caracter (por exemplo: “*”)

Os TextModes SingleLine e Password permitem a limitação da quantidade de caracteres digitados através da propriedade MaxLength. Porém no modo MultiLine está propriedade é desconsiderada.

Para entendermos o porquê deste comportamento, basta lembrarmos que ao executar uma aplicação ASP.NET os WebControls são processados e o resultado gerado nada mais é que o bom e velho HTML. Consequentemente, nosso TextBox MultiLine gera o controle “textarea” do HTML, que não possui propriedade para limitação da quantidade de caracteres digitados.

Para que possamos solucionar este problema, mostrarei uma maneira de limitar os caracteres digitados utilizando a ajuda do Java Script.

Seguiremos os seguintes passos:

1 - Crie um Webform conforme especificações abaixo:


Webform contendo TextBox MultiLine

Veja parte do código fonte do Webform:

...
<
asp:TextBox ID="TextBox1" runat="server" Height="87px" TextMode="MultiLine" Width="267px"></asp:TextBox>
<br />
Caracteres restantes: <span id="contador">100</span>. (Máximo de Caracteres: 100)
...

Vejamos que o código acima é composto somente por um TextBox em modo MultiLine e adicionamente um "span" que chamado "contador" que utilizarei para exibir a quantidade restante de caracteres a sesem digitados.

2 - Crie uma função Java Script chamada "limitarTexto" em seu Webform, que terá como parâmentros: campo (TextBox), contador (span), númeroLimite (quantidade de caractéres máximo). Conforme código a seguir:

...
<
head runat="server">
    <title></title>
    <script type="text/javascript" language="javascript">

function limitarTexto(campo, contador, numeroLimite) {

    if (campo.value.length > numeroLimite) {

        campo.value = campo.value.substring(0, numeroLimite);

    }
    else {

        contador.innerHTML = numeroLimite - campo.value.length;

    }

}

    </script>
</
head>
...

3 - O terceiro e último passo é associar a função "limitarTexto" ao controle TextBox1. Para isso precisaremos implementar o evento Load do Webform. Adicionaremos os atributos "onkeypress" e "onkeyup" ao TextBox para chamar a função. Veja a implementação abaixo:

protected void Page_Load(object sender, EventArgs e)
{

     if (!Page.IsPostBack)
    {
        TextBox1.Attributes.Add(
"onkeypress", "limitarTexto(this, contador, 100);");
        TextBox1.Attributes.Add(
"onkeyup", "limitarTexto(this, contador, 100);"); 
    }

}

Observação: Observe que passei "this" no parâmetro "campo" da função. Isso indica que é o próprio componente (TextBox1).

Agora podemos executar a aplicação e testar o funcionamento.

Esperam que esta dica seja útil! Até a próxima e bons códigos!

5.0 ponto(s). Avaliado por 4 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | Java Script

Corrigindo Problemas de Incompatibilidade de Páginas ASP.NET e o Internet Explorer 8

Postado por Daniel Garcia às 17:10 QUARTA-FEIRA, 29 DE JULHO DE 2009

Tenho visto que algumas pessoa estão encontrando algumas dificuldades em compatibilizar suas aplicações com o Internet Explorer 8. Então resolvi postar algumas dicas que a Microsoft disponibilizou no site do MSDN.

Este documento o conduzirá pelas etapas necessárias para corrigir seu site a fim de que ele seja renderizado corretamente no Windows Internet Explorer 8.

A correção rápida a curto prazo

Você mantém uma página da Web que funciona corretamente no Windows Internet Explorer 7 e gostaria de atualizá-la para que ela funcionasse no Windows Internet Explorer 8 com o mínimo possível de modificações. Há dois métodos disponíveis. Você pode adicionar a cada página uma marca META de modo de compatibilidade, o que fará com que o Windows Internet Explorer 8 renderize a página da mesma maneira que no Windows Internet Explorer 7. Ou, se você controlar seu servidor Web, poderá fazer com que o servidor adicione a compatibilidade automaticamente configurando-o para enviar um cabeçalho de resposta HTTP personalizado equivalente à marca META com cada página da Web.

Como modificar cada página

Coloque a seguinte marca META HTML no elemento HEAD de cada página da Web (antes de qualquer marca que não seja TITLE ou META):

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>

Isso instruirá o Windows Internet Explorer 8 a renderizar cada página como se fosse o Windows Internet Explorer 7, corrigindo o seu site.

Como configurar o servidor para modificar cada página automaticamente

Para adicionar automaticamente a mesma compatibilidade a cada página como a marca META HTML, configure seu servidor para enviar o seguinte cabeçalho:

X-UA-Compatible: IE=EmulateIE7

Para configurar o IIS (Serviços de Informações da Internet da Microsoft) 7.0, configure o arquivo Web.config da seguinte maneira:

<?xml version="1.0" encoding="utf-8"?>
<
configuration>
    <
system.webServer>
        <
httpProtocol>
            <
customHeaders>
                <
clear />
                <
add name="X-UA-Compatible" value="IE=EmulateIE7" />
            </
customHeaders>
        </
httpProtocol>
    </
system.webServer>
</
configuration>

(Adicione o arquivo Web.config ao diretório em que deseja aplicar a alteração)

Observe que as marcas de alternância de modos de compatibilidade META presentes na marcação real de uma página da Web sempre prevalecem sobre a declaração do cabeçalho HTTP.

Para obter mais informações sobre como configurar seu servidor Web (incluindo o IIS 6.0) para enviar o cabeçalho de resposta HTTP personalizado, leia os documentos a seguir.

Essas correções a curto prazo são recomendadas apenas para uso rápido e temporário. Eventualmente, você deverá modificar seu site de forma que ele envie código baseado em padrões para o Windows Internet Explorer 8 e versões posteriores e código herdado para as versões anteriores do Windows Internet Explorer.

A solução permanente recomendada 

Você mantém uma página da Web que funciona corretamente no Windows Internet Explorer 7. Você deseja criar uma página baseada em padrões que funcione corretamente no Windows Internet Explorer 8 com tratamento especial para as versões de navegador herdadas. Depois de ter adicionado a nova funcionalidade CSS 2.1 ao fluxo de páginas principal, você precisará configurar o modo de compatibilidade como Padrões do IE8 e usar comentários condicionais a fim de fornecer correções para versões herdadas do Windows Internet Explorer.

Definindo o modo de compatibilidade como Padrões do IE8

Coloque a seguinte marca META HTML na parte superior do elemento HEAD de cada página da Web (antes de qualquer marca que não seja TITLE ou META):

<meta http-equiv="X-UA-Compatible" content="IE=8"/>

Isso instruirá o Windows Internet Explorer 8 a renderizar cada página usando os padrões CSS 2.1.

Você também pode configurar seu servidor Web, como demonstrado acima, para fazer alterações em todo o site; basta alterar o valor do conteúdo para “IE=8”. Lembre-se de que quaisquer alterações de META no nível de página prevalecem sobre os valores do cabeçalho; portanto, os cabeçalhos no nível de página talvez precisem ser alterados ou removidos.

Usando comentários condicionais para manter seu site funcionando com navegadores herdados

O exemplo de código a seguir ilustra como usar comentários condicionais para direcionar o CSS para versões atuais ou herdadas do Windows Internet Explorer.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN">
<html>
   <head>
      <title>Test Page</title>
      <meta http-equiv="X-UA-Compatible" content="IE=8"/>
      <!--[if gte IE 8]>
      <style type="text/css">
      body {
       color: #0000ff;
       background-color: #000000;
      }
      </style>
      <![endif]-->
      <!--[if lt IE 8]>
      <style type="text/css">
      body {
       color: #000000;
       background-color: #ffffff;
      }
      </style>
      <![endif]-->
   </head>
   <body>
      <h1>
      <!--[if gte IE 8]>
      Chapter 1.
      <![endif]-->
      First Chapter
      </h1>
      <h1>
      <!--[if gte IE 8]>
      Chapter 2.
      <![endif]-->
      Second Chapter
      </h1>
      Text any version will see.
   </body>
</html>

Para obter mais informações sobre técnicas de detecção de navegadores, leia os documentos a seguir. 

A solução permanente descrita aqui é o método mais recomendado para a correção de seu site. Ao aderir a esses padrões, seu site funcionará igualmente bem nas versões herdadas do Windows Internet Explorer e no Windows Internet Explorer 8, bem como em quaisquer versões futuras lançadas.

Fonte: MSDN - http://msdn.microsoft.com/pt-br/library/cc817570.aspx

5.0 ponto(s). Avaliado por 4 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

ASP.NET | Internet Explorer

Sobre o Autor

Daniel Garcia - MCP, MCTS, MCPD
Meu nome é Daniel Garcia, venho atuando no mercado de tecnologia há mais de uma década. Durante esse tempo tive a oportunidade de trabalhar com diversas tecnologias, principalmente Microsoft. Conquistei os títulos: MCP, MCTS, MCDP e MCT. Desde então, venho contribuindo com toda a Comunidade, divulgando meu conhecimento das tecnologias Microsoft.