Hi
I am building a shopping cart using datatables and then binding it to radgrid. I have a problem with the updating of the quantity column
please have a look at the code
First run the products.htm then click on any Add to cart buttons to add to Trolley.aspx page
You can add and delete items from the cart but cannot update them comes up with exception error
Please could anyone assist
Thanks
products.htm
Trolley.aspx
Trolley.aspx.vb
I am building a shopping cart using datatables and then binding it to radgrid. I have a problem with the updating of the quantity column
please have a look at the code
First run the products.htm then click on any Add to cart buttons to add to Trolley.aspx page
You can add and delete items from the cart but cannot update them comes up with exception error
Please could anyone assist
Thanks
products.htm
<html><head><title></title></head><body> <div align="center"> <form action="trolley.aspx" method="post"><input type="hidden" name="qty" value="1"><input type="hidden" name="product" value="Suisse-pure"><input type="hidden" name="price" value="899.00"><input type="Submit" value="Add to Cart"></form> <tr> <td width="330" height="25" align="left" valign="middle"><span class="style88">Suisse-pure</span></td> </tr> <form action="trolley.aspx" method="post"> <input type="Submit" value="Add to Cart"> <input type="hidden" name="qty" value="1"><input type="hidden" name="product" value="Suisse-pure with multipurpose tap"><input type="hidden" name="price" value="1399.00"> </form> <tr> <td width="330" height="25" align="left" valign="middle"><span class="style88">Suisse-pure with multipurpose tap </span></td> </tr> <form action="trolley.aspx" method="post"> <input type="hidden" name="qty" value="1"> <input type="hidden" name="product" value="More-flow 3000"> <input type="hidden" name="price" value="2999.00"> <input type="Submit" value="Add to Cart"> </form> <tr> <td width="330" height="25" align="left" valign="middle"><span class="style88">More-flow 3000 </span></td> </tr> <form action="trolley.aspx" method="post"> <input type="hidden" name="qty" value="1"> <input type="hidden" name="product" value="More-flow 6000"> <input type="hidden" name="price" value="5999.00"> <input type="Submit" value="Add to Cart"> </form> <tr> <td width="330" height="25" align="left" valign="middle"><span class="style88">More-flow 6000 </span></td> </tr> <form action="trolley.aspx" method="post"><input type="hidden" name="qty" value="1"><input type="hidden" name="product" value="Pure-duo"><input type="hidden" name="price" value="1199.00"><input type="Submit" value="Add to Cart"></form> <tr> <td width="330" height="25" align="left" valign="middle"><span class="style88">Pure-duo </span></td> </tr> <form action="trolley.aspx" method="post"><input type="hidden" name="qty" value="1"><input type="hidden" name="product" value="Pure-duo with multipurpose tap"><input type="hidden" name="price" value="1699.00"><input type="Submit" value="Add to Cart"></form><tr> <td width="330" height="25" align="left" valign="middle"><span class="style88">Pure-duo with Multipurpose Tap </span></td> </tr> <form action="trolley.aspx" method="post"><input type="hidden" name="qty" value="1"><input type="hidden" name="product" value="Quantum4"><input type="hidden" name="price" value="2990.00"><input type="Submit" value="Add to Cart"></form><tr> <td width="330" height="25" align="left" valign="middle"><span class="style88">Quantum 4</span></td> </tr> <form action="trolley.aspx" method="post"><input type="hidden" name="qty" value="1"><input type="hidden" name="product" value="Quantum4 with multipurpose tap"><input type="hidden" name="price" value="3490.00"><input type="Submit" value="Add to Cart"></form><tr> <td width="330" height="25" align="left" valign="middle"><span class="style88">Quantum 4 with multi-purpose tap </span></td> </tr> <form action="trolley.aspx" method="post"><input type="hidden" name="qty" value="1"><input type="hidden" name="product" value="Multipurpose tap"><input type="hidden" name="price" value="650.00"><input type="Submit" value="Add to Cart"></form><tr> <td width="330" height="25" align="left" valign="middle"><span class="style88">Multi Purpurpose Purification Tap </span></td> </tr> </div></body></html>Trolley.aspx
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Trolley.aspx.vb" Inherits="Engine_Trolley" %><%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <fieldset> <legend>My Trolley</legend> <form id="form1" runat="server"> <telerik:RadFormDecorator ID="RadFormDecorator1" runat="server" DecoratedControls="All" Skin='<%$ AppSettings:Telerik.Skin %>' /> <telerik:RadScriptManager ID="RadScriptManager1" runat="server" /> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadGrid1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" /> <telerik:AjaxUpdatedControl ControlID="lblTotal" LoadingPanelID="RadAjaxLoadingPanel1" /> <telerik:AjaxUpdatedControl ControlID="lblTotal" LoadingPanelID="RadAjaxLoadingPanel1" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" /> <telerik:RadWindowManager ID="RadWindowManager1" runat="server"/> <div> <telerik:RadGrid ID="RadGrid1" runat="server" AllowPaging="True" CellSpacing="0" GridLines="None" PageSize="10" OnNeedDataSource="RadGrid1_NeedDataSource" OnDeleteCommand="RadGrid1_DeleteCommand" OnUpdateCommand="RadGrid1_UpdateCommand"> <MasterTableView AutoGenerateColumns="false" DataKeyNames="ID" EditMode="InPlace"> <Columns> <telerik:GridButtonColumn ConfirmText="Remove Product?" ConfirmDialogType="RadWindow" ConfirmTitle="Remove Product?" ButtonType="PushButton" CommandName="Delete" Text="Delete" UniqueName="DeleteColumn" /> <telerik:GridBoundColumn HeaderText="ID" SortExpression="ID" UniqueName="ID" DataField="ID" ReadOnly="true"/> <telerik:GridBoundColumn UniqueName="Product" SortExpression="Product" HeaderText="Product" DataField="Product" ReadOnly="true"/> <telerik:GridBoundColumn UniqueName="Quantity" SortExpression="Quantity" HeaderText="Quantity" DataField="Quantity"/> <telerik:GridEditCommandColumn ButtonType="PushButton" UniqueName="EditCommandColumn"/> <telerik:GridBoundColumn UniqueName="Price" SortExpression="Price" HeaderText="Price" DataField="Price" ReadOnly="true"/> <telerik:GridCalculatedColumn HeaderText="Total Price" UniqueName="TotalPrice" DataType="System.Double" DataFields="Quantity, Price" Expression="{0}*{1}" FooterText="Total Price: " Aggregate="Sum"/> </Columns> <EditFormSettings CaptionFormatString="Update quantity for product Number {0}" CaptionDataField="ID"> <FormTableItemStyle Width="100%" Height="29px"></FormTableItemStyle> <FormTableStyle GridLines="None" CellSpacing="0" CellPadding="2"></FormTableStyle> <FormStyle Width="100%"></FormStyle> <EditColumn ButtonType="ImageButton"> </EditColumn> </EditFormSettings> </MasterTableView> </telerik:RadGrid> <br /> <asp:Label ID="lblTotal" runat="server"></asp:Label> </div> </form> </fieldset></body></html>Trolley.aspx.vb
Imports Telerik.Web.UIImports System.DrawingImports SystemImports System.Data.SqlClientImports System.DataImports System.Collections.GenericImports System.ConfigurationImports TelerikImports Telerik.WebPartial Class Engine_Trolley Inherits System.Web.UI.Page Dim objDT As System.Data.DataTable Dim objDR As System.Data.DataRow Function GetDataTable() As DataTable If Session("Cart") Is Nothing Then 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("Quantity", GetType(Integer)) objDT.Columns.Add("Product", GetType(String)) objDT.Columns.Add("Price", GetType(Decimal)) Session("Cart") = objDT End If Return Session("Cart") End Function Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If Not Page.IsPostBack Then GetDataTable() AddToCart() End If End Sub Sub AddToCart() objDT = Session("Cart") Dim Product = Request.Form("product") Dim blnMatch As Boolean = False For Each Me.objDR In objDT.Rows If objDR("Product") = Product Then objDR("Quantity") += Request.Form("qty") blnMatch = True Exit For End If Next If Not blnMatch Then objDR = objDT.NewRow objDR("Quantity") = Request.Form("qty") objDR("Product") = Request.Form("product") objDR("Price") = Decimal.Parse(Request.Form("price")) objDT.Rows.Add(objDR) End If Session("Cart") = objDT RadGrid1.DataSource = objDT RadGrid1.DataBind() lblTotal.Text = "R" & 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("Price") * objDR("Quantity")) Next Return decRunningTotal End Function Protected Sub RadGrid1_DeleteCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Dim item As GridDataItem = DirectCast(e.Item, GridDataItem) 'Get the primary key value using the DataKeyValue. Dim ID As String = item.OwnerTableView.DataKeyValues(item.ItemIndex)("ID").ToString() Try objDT = Session("Cart") objDT.Rows(e.Item.ItemIndex).Delete() Session("Cart") = objDT RadGrid1.DataSource = objDT RadGrid1.DataBind() lblTotal.Text = "R" & GetItemTotal() Catch ex As Exception RadGrid1.Controls.Add(New LiteralControl("Unable to delete Product. Reason: " + ex.Message)) e.Canceled = True End Try End Sub Protected Sub RadGrid1_UpdateCommand(ByVal source As Object, ByVal e As Telerik.Web.UI.GridCommandEventArgs) Dim editedItem As GridEditableItem = CType(e.Item, GridEditableItem) Dim editMan As GridEditManager = editedItem.EditManager Dim column As GridColumn For Each column In e.Item.OwnerTableView.Columns If TypeOf column Is IGridEditableColumn Then Dim editableCol As IGridEditableColumn = CType(column, IGridEditableColumn) If (editableCol.IsEditable) Then Dim editor As IGridColumnEditor = editMan.GetColumnEditor(editableCol) Dim editorValue As Object = Nothing If (TypeOf editor Is GridTextColumnEditor) Then editorValue = CType(editor, GridTextColumnEditor).Text End If If (TypeOf editor Is GridBoolColumnEditor) Then editorValue = CType(editor, GridBoolColumnEditor).Value End If If (TypeOf editor Is GridDropDownColumnEditor) Then editorValue = CType(editor, GridDropDownColumnEditor).SelectedValue End If If (TypeOf editor Is GridDateTimeColumnEditor) Then editorValue = CType(editor, GridDateTimeColumnEditor).Text End If Try Dim changedRows As DataRow() = objDT.Select("ID = " & editedItem.OwnerTableView.DataKeyValues(editedItem.ItemIndex)("ID")) changedRows(0)(column.UniqueName) = editorValue objDT.AcceptChanges() Session("Cart") = objDT RadGrid1.DataSource = Session("Cart") RadGrid1.DataBind() lblTotal.Text = "R" & GetItemTotal() Catch ex As Exception RadGrid1.Controls.Add(New LiteralControl("<strong>Unable to set value of column '" & column.UniqueName & "'</strong> - " + ex.Message)) e.Canceled = True End Try End If End If Next End Sub Protected Sub RadGrid1_NeedDataSource(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs) Handles RadGrid1.NeedDataSource RadGrid1.DataSource = GetDataTable() End SubEnd Class