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.UI
Imports
System.Drawing
Imports
System
Imports
System.Data.SqlClient
Imports
System.Data
Imports
System.Collections.Generic
Imports
System.Configuration
Imports
Telerik
Imports
Telerik.Web
Partial
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
Sub
End
Class