Correcto, ese es el problema.
> Muy completo y útil, si utilizo el carro tal cual esta funciona perfecto,
> pero como la selección de los artículos se realiza en otra/s pagina/s ,
> modifique el carrito para que tomara los datos de la venta directamente de
> la url y los colocara en el dataset(el cual se genera en el evento page
> load). Que una vez rellenado con los datos de la venta primero es guardado
> en la variable session("cart") y finalmente es es volcado en un datagrid
> para ser mostrados. hasta ahi todo funciona perfecto, pero al intentar
> agregar otro ítem, no funciona simplemente elimina el anterior y solo deja
> el ultimo ítem agregado.
> ahora bien corrijan si me equivoco pero el error esta en que cada vez que la
> página es invocada, se genera nuevamente el dataset y la variable de session
> se resetea? como evito esto?
> el codigo es este
> <%@ Page debug="true" Language="VB" ContentType="text/html"
> ResponseEncoding="iso-8859-1" %>
> <html>
> <head>
> <title>Shopping Cart</title>
> <script runat="server">
> Dim objDT As System.Data.DataTable
> Dim objDR As System.Data.DataRow
> Dim Articulo As String
> Dim CodigoArticulo As String
> Dim PrecioArticulo As Integer
> Dim CantidadArticulo As Integer
> Dim costoEnvio As Integer
> Dim imgArticulo As String
> Private Sub Page_Load(ByVal s As Object, ByVal e As EventArgs)
> 'limpiar variables
> Dim parametro As NameValueCollection
> Dim key() As String
> Dim valor() As String
> Dim loop1 As Integer
> Dim loop2 As Integer
> Dim nroKeys As Integer
> parametro = Request.QueryString
> key = parametro.AllKeys
> nroKeys = key.GetUpperBound(0)
> If Not nroKeys = -1 Then
> For loop1 = 0 To key.GetUpperBound(0)
> valor = parametro.GetValues(loop1)
> For loop2 = 0 To valor.GetUpperBound(0)
> Select Case key(loop1)
> Case "codigo"
> CodigoArticulo = valor(loop2)
> Case "precio"
> PrecioArticulo = valor(loop2)
> Case "articulo"
> Articulo = valor(loop2)
> Case "cantidad"
> CantidadArticulo = valor(loop2)
> Case Else
> Response.Write("ERROR, Parametro no valido")
> Exit Sub
> End Select
> Next loop2
> Next loop1
> If Not IsPostBack Then
> makeCart()
> AddToCart()
> End If
> Else
> Response.Write("Se Requiere Precio Producto Codigo Nombre")
> End If
> End Sub
> Function makeCart()
> objDT = New System.Data.DataTable("Cart")
> objDT.Columns.Add("ID", GetType(Integer))
> objDT.Columns("ID").AutoIncrement = True
> objDT.Columns("ID").AutoIncrementSeed = 1
> objDT.Columns.Add("Cantidad", GetType(Integer))
> objDT.Columns.Add("Codigo", GetType(String))
> objDT.Columns.Add("Articulo", GetType(String))
> objDT.Columns.Add("Precio", GetType(Integer))
> Session("Cart") = objDT
> End Function
> Sub AddToCart()
> objDT = Session("Cart")
> Dim blnMatch As Boolean = False
> For Each objDR In objDT.Rows
> If objDR("Codigo") = CodigoArticulo Then
> objDR("Cantidad") += CantidadArticulo
> blnMatch = True
> Exit For
> End If
> Next
> If Not blnMatch Then
> objDR = objDT.NewRow
> objDR("Cantidad") = CantidadArticulo
> objDR("Codigo") = CodigoArticulo
> objDR("Articulo") = Articulo
> objDR("Precio") = PrecioArticulo
> objDT.Rows.Add(objDR)
> End If
> Session("Cart") = objDT
> dg.DataSource = objDT
> dg.DataBind()
> lblTotal.Text = "$" & GetItemTotal()
> End Sub
> Function GetItemTotal() As Decimal
> Dim intCounter As Integer
> Dim decRunningTotal As Decimal
> For intCounter = 0 To objDT.Rows.Count - 1
> objDR = objDT.Rows(intCounter)
> decRunningTotal += (objDR("Precio") * objDR("Cantidad"))
> Next
> Return decRunningTotal
> End Function
> Sub Delete_Item(ByVal s As Object, ByVal e As DataGridCommandEventArgs)
> objDT = Session("Cart")
> objDT.Rows(e.Item.ItemIndex).Delete()
> Session("Cart") = objDT
> dg.DataSource = objDT
> dg.DataBind()
> lblTotal.Text = "$" & GetItemTotal()
> End Sub
> </script>
> </head>
> <body>
> <form runat="server">
> Product:<br>
> <asp:DropDownList id="ddlProducts" runat="server">
> <asp:ListItem Value="4.99">Socks</asp:ListItem>
> <asp:ListItem Value="34.99">Pants</asp:ListItem>
> <asp:ListItem Value="14.99">Shirt</asp:ListItem>
> <asp:ListItem Value="12.99">Hat</asp:ListItem>
> </asp:DropDownList><br>
> Quantity:<br>
> <asp:textbox id="txtQuantity" runat="server" /><br/><br/>
> <asp:Button id="btnAdd" runat="server" Text="Add To Cart"
> onClick="AddToCart" /><br/><br/>
> <asp:DataGrid id="dg" runat="server" ondeletecommand="Delete_Item" >
> <columns>
> <asp:buttoncolumn buttontype="PushButton" commandname="Delete" text="Remove
> Item" />
> </columns>
> </asp:DataGrid>
> <br/><br/>
> Total: <asp:Label id="lblTotal" runat="server" />
> </form>
> </body>
> </html>
> "Gonzalo Del Piero" <gonz...@delpiero.biz> escribió en el mensaje de
> noticias:eBTrXjVXKHA.4...@TK2MSFTNGP05.phx.gbl...
> Gracias lo revisare.... y te cuento
> "Samir Guevara" <samtguev...@gmail.com> escribió en el mensaje de
> noticias:655ee57f-e221-46e3-9428-45e3e5787...@d10g2000yqh.googlegroups.com...
> Yo me adapté el siguiente a un proyecto web que tengo, talvez pueda
> servirte
> http://articles.sitepoint.com/article/net-shopping-cart-datatables
> Samir
> On 2 nov, 21:02, "Gonzalo Del Piero" <gonz...@delpiero.biz> wrote:
> > Estoy construyendo un sitio e-comerce y como es lógico estoy tratando de
> > crear un carro de compras basado en variables de sesión pues con SQL
> > todavía
> > no me llevo bien, como para usarlo. tengo un par de problemas
> > 1.- el carro recibe los producto en la url y me dibuja artículos demás
> > 2.- me gustaría que tuviere al lado de cada ítem el clásico botón borrar
> > el
> > cual si bien lo puedo dibujar, lo logro que funcione.
> > Para quien guste revisar el código y explicarme por que no funciona el
> > botón
> > le dejo el código enhttp://www.planetaardiente.com.ar/ayuda/api.zip