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.0 ponto(s). Avaliado por 1 pessoas

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

Tags: ,

ASP.NET | E-Commerce

Comentar


(Vai mostrar seu Gravatar)  

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



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.