Beruflich Dokumente
Kultur Dokumente
1.
2.
3.
1.
2.
3.
4.
Cuarto cuando llega a pagar en el supermercado totaliza su compra a partir de los subtotales
de todas sus productos esto lo hace mentalmente, de esta forma decide si dejar algo por que no le
alcanza el dinero. Nuestro carro de compras debe ser capaz de mostrarnos el subtotal a partir de
cada producto que llevamos y as como en el supermercado me debe de permitir eliminar un
producto si no me alcanza el dinero.
5.
Hoy comenzaremos creando una clase que se encargue de los productos que pondr en mi sitio.
using System.Collections.Generic;
3.
using System.Linq;
4.
using System.Web;
5.
6.
namespace CarroDeComprasEjemplo
7.
8.
9.
10.
11.
12.
13.
14. }
Ahora solo tendramos que hacer un catalogo de productos que me los maneje esta clase. Para ello
haremos un constructor al cual le pase el Id del producto y me devuelva el la descripcin y el precio
del mismo.
Clase Producto
1. namespace CarroDeComprasEjemplo
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Id = pId;
12.
13.
switch (pId)
14.
15.
case 1:
16.
17.
18.
Precio = Convert.ToDecimal(50.90);
19.
break;
20.
21.
case 2:
Descripcion = Camisas Deportivas;
22.
23.
Precio = 15.50m;
24.
break;
25.
26.
case 3:
Descripcion = Pantalones Cortos;
27.
Precio = 12.50m;
28.
break;
29.
case 4:
30.
Descripcion = Sandalias;
31.
Precio = 5m;
32.
break;
33.
case 5:
34.
Descripcion = Bxer;
35.
Precio = 2.75m;
36.
break;
37.
38.
39.
40. }
Ahora tendramos que crear una clase que me maneje los productos y la cantidad de los mismos que
sern enviados al carro de compras.
Esta clase tiene que ser capaz de decirme o encontrarme un producto de los que estoy introduciendo
en el carro de compras. Para ello utilizare una interfaz genrica que me los filtre, la que ocupare ser
IEquatable.
Clase ProductosAlCarro
1.
namespace CarroDeComprasEjemplo
2.
3.
4.
5.
6.
3.
4.
5.
6.
7.
8.
9.
}
}
En esta clase tenemos que manejar tres cosas la cantidad de producto el id del producto y una
instancia que me permita tener acceso al catalogo de productos. encapsularemos el id y producto
nos quedara as:
Clase ProductosAlCarro
1. namespace CarroDeComprasEjemplo
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
set
13.
14.
_producto = null;
15.
_IdProducto = value;
16.
17.
}
}
18.
19.
20.
21.
get
22.
23.
if (_producto == null)
24.
25.
26.
27.
return _producto;
28.
29.
30.
31. }
En el encapsulador del id hay que hacer un nuevo producto volvindolo null para que siempre nos
introduzca un nuevo producto al carro de compras. En el de productos solo hay que ver si el
producto viene vaco o no.
Bueno ahora hay que hacer unas propiedades que me manejen la descripcin del producto y el
precio unitario de cada producto adems del total de productos:
Clase ProductosAlCarro
1. namespace CarroDeComprasEjemplo
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
set
13.
14.
_producto = null;
15.
_IdProducto = value;
16.
17.
}
}
18.
19.
20.
21.
get
22.
23.
if (_producto == null)
24.
25.
26.
27.
return _producto;
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44. }
Con esto solo necesitare un constructor que me tome como parmetro el id del producto as como
usar el mtodo Equals para filtrar los distintos productos que tenga en mi carro de compras.
Clase ProductosAlCarro
1. namespace CarroDeComprasEjemplo
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
set
13.
14.
_producto = null;
15.
_IdProducto = value;
16.
17.
}
}
18.
19.
20.
21.
get
22.
23.
if (_producto == null)
24.
25.
26.
27.
return _producto;
28.
29.
}
}
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
IdProducto = pId;
}
48.
49.
50.
51.
52.
53.
54. }
Con esto tengo dos clase una que me maneja los producto y otra que me maneja dichos productos en
el carro de compras. Hoy solo tengo que tener una clase que me maneje el carro de compras y me
guarde en una lista los productos que han sido comprados o seleccionados.
Esta clase que me permitira seleccionar un producto, guardar uno producto y eliminar un producto
del carro de compras. Primero crearemos una lista para guardar todos los productos dentro del
carro de compras:
Clase CarroDeCompras
1.
namespace CarroDeComprasEjemplo
2.
3.
4.
5.
6.
7.
}
}
Crearemos un mtodo que me capture el producto que ser enviado al carro de compras (la lista),
para este caso usaremos unas variables de seccin entre la pagina que muestra el catalogo y laque
me muestra los productos en al carro de compras.
Clase CarroDeCompras
1. namespace CarroDeComprasEjemplo
2.
3.
4.
5.
6.
7.
8.
9.
CarroDeCompras _carrito =
(CarroDeCompras)HttpContext.Current.Session[ASPCarroDeCompras];
10.
if (_carrito == null)
11.
12.
HttpContext.Current.Session[ASPCarroDeCompras] =
_carrito = new CarroDeCompras();
13.
14.
return _carrito;
15.
16.
17. }
Ahora hay que hacer un constructor que me permita hacer una lista de productos, recuerda que nos
solo una persona comprara en lnea as que cada persona hay que hacerle una lista de productos.
Crearemos un mtodo me debe de identificar si ya hay productos en el carro de compras si los hay
solo tenemos que sumar a la cantidad de producto un producto mas sino hay hay que agregarle una
a la cantidad de producto as que veamos como queda:
Clase CarroDeCompras
1. namespace CarroDeComprasEjemplo
2.
3.
4.
5.
6.
7.
8.
9.
CarroDeCompras _carrito =
(CarroDeCompras)HttpContext.Current.Session[ASPCarroDeCompras];
10.
if (_carrito == null)
11.
12.
HttpContext.Current.Session[ASPCarroDeCompras] =
_carrito = new CarroDeCompras();
13.
14.
return _carrito;
15.
16.
17.
protected CarroDeCompras()
18.
19.
20.
21.
22.
23.
24.
ProductosAlCarro NuevoProducto
= newProductosAlCarro(pIdProducto);
25.
if (ListaProductos.Contains(NuevoProducto))
26.
27.
28.
29.
if (item.Equals(NuevoProducto))
30.
31.
item.Cantidad++;
32.
return;
33.
34.
35.
36.
else
37.
38.
NuevoProducto.Cantidad = 1;
39.
ListaProductos.Add(NuevoProducto);
40.
41.
42.
43. }
Hoy tenemos que hacer un mtodo que me permita eliminar un producto de la lista que tengo si ya
no lo quiero esto es relativamente fcil quedara as:
Clase CarroDeCompras
1. namespace CarroDeComprasEjemplo
2.
3.
4.
5.
6.
7.
8.
9.
CarroDeCompras _carrito =
(CarroDeCompras)HttpContext.Current.Session[ASPCarroDeCompras];
10.
if (_carrito == null)
11.
12.
HttpContext.Current.Session[ASPCarroDeCompras] =
_carrito = new CarroDeCompras();
13.
14.
return _carrito;
15.
16.
17.
protected CarroDeCompras()
18.
19.
20.
21.
22.
23.
24.
ProductosAlCarro NuevoProducto
= newProductosAlCarro(pIdProducto);
25.
if (ListaProductos.Contains(NuevoProducto))
26.
27.
28.
29.
if (item.Equals(NuevoProducto))
30.
31.
item.Cantidad++;
32.
return;
33.
34.
35.
36.
else
37.
38.
NuevoProducto.Cantidad = 1;
39.
ListaProductos.Add(NuevoProducto);
40.
41.
42.
43.
44.
45.
ProductosAlCarro eliminaritems
= newProductosAlCarro(pIdProducto);
46.
ListaProductos.Remove(eliminaritems);
47.
48.
49. }
Hoy tendramos que hacer un mtodo queme permita ver o saber la cantidad de productos en el
carro de compras para que me sirve esto es para actualizar la cantidad cuando compre mas del
mismo producto o cuando compre otro producto, que daria as:
Clase CarroDeCompras
1. namespace CarroDeComprasEjemplo
2.
3.
4.
5.
6.
7.
8.
9.
CarroDeCompras _carrito =
(CarroDeCompras)HttpContext.Current.Session[ASPCarroDeCompras];
10.
if (_carrito == null)
11.
12.
HttpContext.Current.Session[ASPCarroDeCompras] =
_carrito = new CarroDeCompras();
13.
14.
return _carrito;
15.
16.
17.
protected CarroDeCompras()
18.
19.
20.
21.
22.
23.
24.
ProductosAlCarro NuevoProducto
= newProductosAlCarro(pIdProducto);
25.
if (ListaProductos.Contains(NuevoProducto))
26.
27.
28.
29.
if (item.Equals(NuevoProducto))
30.
31.
item.Cantidad++;
32.
return;
33.
34.
35.
36.
else
37.
38.
NuevoProducto.Cantidad = 1;
39.
ListaProductos.Add(NuevoProducto);
40.
41.
42.
43.
44.
45.
ProductosAlCarro eliminaritems
= newProductosAlCarro(pIdProducto);
46.
ListaProductos.Remove(eliminaritems);
47.
48.
49.
50.
51.
if (pCantidad == 0)
52.
53.
EliminarProductos(pIdProducto);
54.
return;
55.
56.
ProductosAlCarro updateProductos
= newProductosAlCarro(pIdProducto);
57.
58.
59.
if (item.Equals(updateProductos))
60.
61.
item.Cantidad = pCantidad;
62.
return;
63.
64.
65.
66.
67. }
Por ultimo en esta clase sacaremos los subtotales por producto que hemos agregado al carro de
compras:
Clase CarroDeCompras
1. namespace CarroDeComprasEjemplo
2.
3.
4.
5.
6.
7.
8.
9.
CarroDeCompras _carrito =
(CarroDeCompras)HttpContext.Current.Session[ASPCarroDeCompras];
10.
if (_carrito == null)
11.
12.
HttpContext.Current.Session[ASPCarroDeCompras] =
_carrito = new CarroDeCompras();
13.
14.
return _carrito;
15.
16.
17.
protected CarroDeCompras()
18.
19.
20.
21.
22.
23.
24.
ProductosAlCarro NuevoProducto
= newProductosAlCarro(pIdProducto);
25.
if (ListaProductos.Contains(NuevoProducto))
26.
27.
28.
29.
if (item.Equals(NuevoProducto))
30.
31.
item.Cantidad++;
32.
return;
33.
34.
35.
36.
else
37.
38.
NuevoProducto.Cantidad = 1;
39.
ListaProductos.Add(NuevoProducto);
40.
41.
42.
43.
44.
45.
ProductosAlCarro eliminaritems
= newProductosAlCarro(pIdProducto);
46.
ListaProductos.Remove(eliminaritems);
47.
48.
49.
50.
51.
if (pCantidad == 0)
52.
53.
EliminarProductos(pIdProducto);
54.
return;
55.
56.
ProductosAlCarro updateProductos
= newProductosAlCarro(pIdProducto);
57.
58.
59.
if (item.Equals(updateProductos))
60.
61.
item.Cantidad = pCantidad;
62.
return;
63.
64.
65.
66.
67.
68.
69.
decimal subtotal = 0;
70.
71.
72.
subtotal += item.Total;
73.
74.
return subtotal;
75.
76.
77. }
Con esto solo seria dibujar nuestros webform y programarlos y as ya tenemos nuestro carro de
compras los siguiente no vamos a hondar mucho solo seria implementar esta programacin.
Comencemos la implementacin creando un WeBForms que llamaremos CatalogoProductos.
CatalogoProductos
1. <%@ Page Language=C# AutoEventWireu
p=trueCodeBehind=CatalogoProductos.aspx.csInherits=CarroDeCompr
asEjemplo.CataloProductos %>
2.
3.
4.
5.
<html xmlns=http://www.w3.org/1999/xhtml>
6.
<head runat=server>
7.
<title></title>
8.
</head>
9.
<body>
10.
11.
<div>
12.
13.
</div>
14.
</form>
15. </body>
16. </html>
Recordemos que no entrare en detalles en esta parte, este WebForms quedara as:
CatalogoProductos
1. <%@ Page Language=C# AutoEventWireu
p=trueCodeBehind=CatalogoProductos.aspx.csInherits=CarroDeCompr
asEjemplo.CataloProductos %>
2.
3.
4.
5.
<html xmlns=http://www.w3.org/1999/xhtml>
6.
<head runat=server>
7.
<title></title>
8.
<style type=text/css>
9.
.style1
10.
11.
width: 995px;
12.
13.
.style2
14.
15.
width: 2387px;
16.
17.
.style3
18.
19.
width: 783px;
20.
21.
</style>
22. </head>
23. <body>
24.
25.
<div>
26.
27.
28.
<thead>
<tr style=border:1px;>
29.
30.
31.
Tienda al mayoreo
32.
33.
</th>
</tr>
34.
</thead>
35.
<tbody>
36.
<tr style=border:1px;>
37.
38.
text-transform: capitalize;>
39.
Zapatos Deportivos
40.
</td>
41.
<td class=style3>
42.
43.
</td>
44.
</tr>
45.
<tr style=border:1px;>
46.
47.
text-transform: capitalize;>
48.
Camisas Deportivas
49.
</td>
50.
<td class=style3>
51.
52.
</td>
53.
</tr>
54.
<tr style=border:1px;>
55.
56.
text-transform: capitalize;>
57.
Pantalones Cortos
58.
</td>
59.
<td class=style3>
60.
<asp:LinkButton ID=lbPantalonesrunat=ser
ver onclick=lbPantalones_Click>Agregar al
Carrito</asp:LinkButton>
61.
</td>
62.
</tr>
63.
<tr style=border:1px;>
64.
65.
text-transform: capitalize;>
66.
Sandalias
67.
</td>
68.
<td class=style3>
69.
<asp:LinkButton ID=lbSandaliasrunat=serv
er onclick=lbSandalias_Click>Agregar al Carrito</asp:LinkButton>
70.
</td>
71.
</tr>
72.
<tr style=border:1px;>
73.
74.
text-transform: capitalize;>
75.
Boxer
76.
</td>
77.
<td class=style3>
78.
79.
</td>
80.
</tr>
81.
<tr style=border:1px;>
82.
83.
</td>
84.
</tr>
85.
</tbody>
86.
</table>
87.
</div>
88.
</form>
89. </body>
en modo e diseo se vera as:
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CarroDeCompras carrito
=CarroDeCompras.CapturarProducto();
13.
carrito.Agregar(1);
14.
Response.Redirect(VerCarrito.aspx);
15.
16.
17.
18.
19.
CarroDeCompras carrito
=CarroDeCompras.CapturarProducto();
20.
carrito.Agregar(2);
21.
Response.Redirect(VerCarrito.aspx);
22.
23.
24.
25.
26.
CarroDeCompras carrito
=CarroDeCompras.CapturarProducto();
27.
carrito.Agregar(3);
28.
Response.Redirect(VerCarrito.aspx);
29.
30.
31.
32.
33.
CarroDeCompras carrito
=CarroDeCompras.CapturarProducto();
34.
carrito.Agregar(4);
35.
Response.Redirect(VerCarrito.aspx);
36.
37.
38.
39.
40.
CarroDeCompras carrito
=CarroDeCompras.CapturarProducto();
41.
carrito.Agregar(5);
42.
Response.Redirect(VerCarrito.aspx);
43.
44.
}
}
45. }
Como Podemos ver solo es mandar el producto en este caso el id que seria un numero del 1 al 5 al
mtodo agregar. En el otro formulario que le pondr verCarrito tenemos que mostrar los productos
que vayamos comprando.
4.
5.
<html xmlns=http://www.w3.org/1999/xhtml>
6.
<head runat=server>
7.
<title></title>
8.
</head>
9.
<body>
10.
11.
12.
13.
<h1>
Carrito de Compras</h1>
14.
15.
<br />
16.
<br />
17.
18.
19.
OnRowCommand=gvCaritoCompras_RowCommandOnRowDataBound
=gvCaritoCompras_RowDataBound>
20.
<HeaderStyle HorizontalAlign=LeftBackColor=BlueViole
t ForeColor=AliceBlue />
21.
<FooterStyle HorizontalAlign=RightBackColor=Chocolat
e ForeColor=Aqua />
22.
23.
<Columns>
24.
<asp:BoundField DataField=DescripcionHeaderText=
Descripcion />
25.
<asp:TemplateField HeaderText=Cantidad>
26.
<ItemTemplate>
27.
28.
<asp:LinkButton runat=serverID=btnElimin
ar Text=Eliminar CommandName=Eliminar
29.
CommandArgument=<%# Eval(IdProducto)
%> Style=font-size: 12px;></asp:LinkButton>
30.
</ItemTemplate>
31.
</asp:TemplateField>
32.
<asp:BoundField DataField=PrecioUnitarioHeaderTex
t=Precio ItemStyle-HorizontalAlign=Right
33.
HeaderStyleHorizontalAlign=RightDataFormatString={0:C} />
34.
35.
HeaderStyleHorizontalAlign=RightDataFormatString={0:C} />
36.
</Columns>
37.
</asp:GridView>
38.
<br />
39.
40.
41.
onclick=btActulizar_Click/>
</div>
42.
</form>
43. </body>
44. </html>
3.
4.
5.
6.
7.
if (!IsPostBack)
8.
9.
BindData();
}
10.
11.
12.
13.
gvCaritoCompras.DataSource
=CarroDeCompras.CapturarProducto().ListaProductos;
14.
gvCaritoCompras.DataBind();
15.
16.
17.
18.
19.
if (e.Row.RowType == DataControlRowType.Footer)
20.
21.
e.Row.Cells[3].Text = Total:
+CarroDeCompras.CapturarProducto().SubTotal().ToString(C);
22.
23.
24.
25.
26.
27.
if (e.CommandName == Eliminar)
28.
29.
30.
CarroDeCompras.CapturarProducto().EliminarProductos
(productId);
31.
32.
BindData();
33.
34.
35.
36.
37.
38.
39.
if (row.RowType == DataControlRowType.DataRow)
40.
41.
try
42.
43.
int productoId
=Convert.ToInt32(gvCaritoCompras.DataKeys[row.RowIndex].Value);
44.
int cantidad
=int.Parse(((TextBox)row.Cells[1].FindControl(txtCantidad)).Text);
45.
CarroDeCompras.CapturarProducto().CantidadD
eProductos(productoId, cantidad);
46.
47.
catch (FormatException) { }
48.
49.
50.
BindData();
51.
52.
}
}
53. }
Si lo corremos se vera as: