This is a migrated thread and some comments may be shown as answers.

Radgrid Datatable Column not Updating

2 Answers 40 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Ugan
Top achievements
Rank 1
Ugan asked on 18 Jul 2013, 03:28 PM
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
<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>
 
<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






2 Answers, 1 is accepted

Sort by
0
Ugan
Top achievements
Rank 1
answered on 19 Jul 2013, 11:10 AM
Any ideas? Anyone?

Really need some help on this desperately

Thanks in advance
0
Jayesh Goyani
Top achievements
Rank 2
answered on 19 Jul 2013, 01:16 PM
Hello,

Please try with the below code snippet.

<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>
System.Data.DataTable objDT = default(System.Data.DataTable);
   System.Data.DataRow objDR = default(System.Data.DataRow);
 
   public DataTable GetDataTable()
   {
       if (Session["Cart"] == null)
       {
           objDT = new System.Data.DataTable("Cart");
           objDT.Columns.Add("ID", typeof(int));
           objDT.Columns["ID"].AutoIncrement = true;
           objDT.Columns["ID"].AutoIncrementSeed = 1;
 
           objDT.Columns.Add("Quantity", typeof(int));
           objDT.Columns.Add("Product", typeof(string));
           objDT.Columns.Add("Price", typeof(decimal));
           Session["Cart"] = objDT;
       }
 
       return (DataTable)Session["Cart"];
   }
 
   protected void Page_Load(object sender, System.EventArgs e)
   {
 
       if (!Page.IsPostBack)
       {
           GetDataTable();
           AddToCart();
       }
   }
 
   protected void Page_PreRender(object sender, System.EventArgs e)
   {
       GetItemTotal();
   }
 
   protected void AddToCart()
   {
       objDT = (DataTable)Session["Cart"];
       string Product = Request.Form["product"];
       bool blnMatch = false;
 
       foreach (DataRow objDR1 in objDT.Rows)
       {
           if (Convert.ToString(objDR1["Product"]) == Product)
           {
               objDR1["Quantity"] = Convert.ToInt32(objDR1["Quantity"]) + Convert.ToInt32(Request.Form["qty"]);
               blnMatch = true;
           }
       }
 
       if (blnMatch == false)
       {
           objDR = objDT.NewRow();
           objDR["Quantity"] = Request.Form["qty"];
           objDR["Product"] = Request.Form["product"];
           objDR["Price"] = Decimal.Parse(Request.Form["price"]);
           objDT.Rows.Add(objDR);
       }
 
       Session["Cart"] = objDT;
 
 
   }
 
   protected void GetItemTotal()
   {
       objDT = (DataTable)Session["Cart"];
 
       decimal decRunningTotal = 0;
 
       for (int i = 0; i < objDT.Rows.Count; i++)
       {
           objDR = objDT.Rows[i];
           decRunningTotal += (Convert.ToDecimal(objDR["Price"]) * Convert.ToDecimal(objDR["Quantity"]));
       }
 
       lblTotal.Text = "R" + decRunningTotal;
 
   }
 
 
   protected void RadGrid1_DeleteCommand(object sender, GridCommandEventArgs e)
   {
       GridDataItem item = e.Item as GridDataItem;
       string strID = item.GetDataKeyValue("ID").ToString();
       objDT = (DataTable)Session["Cart"];
       for (int i = 0; i < objDT.Rows.Count; i++)
       {
           objDR = objDT.Rows[i];
           if (objDR["ID"].ToString() == strID)
           {
               objDT.Rows.Remove(objDR);
               break;
           }
       }
   }
   protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
   {
       RadGrid1.DataSource = GetDataTable();
   }
   protected void RadGrid1_UpdateCommand(object sender, GridCommandEventArgs e)
   {
       GridEditableItem item = e.Item as GridEditableItem;
       string strID = item.GetDataKeyValue("ID").ToString();
 
       objDT = (DataTable)Session["Cart"];
 
       foreach (DataRow dr in objDT.Rows)
       {
           if (dr["ID"].ToString() == strID)
           {
               dr["Quantity"] = (item["Quantity"].Controls[0] as TextBox).Text;
           }
       }
   }

Please convert my code C# to VB using below link.

http://converter.telerik.com/

Thanks,
Jayesh Goyani
Tags
Grid
Asked by
Ugan
Top achievements
Rank 1
Answers by
Ugan
Top achievements
Rank 1
Jayesh Goyani
Top achievements
Rank 2
Share this question
or