I modified editondblclick sample to use the custom datatable instead of SQL connection.
Everything worked but while save the edited values we are getting "Only items with ISinEditmode set to true can be updated" error.
asp code: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridEdit.aspx.cs" Inherits="GridEdit" %> <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server" method="post"> <div> <telerik:RadScriptManager ID="RadScriptManager1" runat="server"></telerik:RadScriptManager> <!-- content start --> <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> <script type="text/javascript"> <!-- var hasChanges, inputs, dropdowns, editedRow; function RowClick(sender, eventArgs) { if(editedRow && hasChanges) { hasChanges = false; if(confirm("Update changes?")) { $find("<%= RadGrid1.ClientID %>").get_masterTableView(). $find("<%= RadGrid1.ClientID %>").get_masterTableView().updateItem(editedRow); } } } function RowDblClick(sender, eventArgs) { editedRow = eventArgs.get_itemIndexHierarchical(); $find("<%= RadGrid1.ClientID %>").get_masterTableView().editItem(editedRow); } function GridCommand(sender, args) { if (args.get_commandName() != "Edit") { editedRow = null; } } function GridCreated(sender, eventArgs) { var gridElement = sender.get_element(); var elementsToUse = []; inputs = gridElement.getElementsByTagName("input"); for (var i = 0; i < inputs.length;i++) { var lowerType = inputs[i].type.toLowerCase(); if(lowerType == "hidden" || lowerType == "button") { continue; } Array.add(elementsToUse, inputs[i]); inputs[i].onchange = TrackChanges; } dropdowns = gridElement.getElementsByTagName("select"); for (var i = 0; i < dropdowns.length;i++) { dropdowns[i].onchange = TrackChanges; } setTimeout(function(){if(elementsToUse[0])elementsToUse[0].focus();},100); } function TrackChanges(e) { hasChanges = true; } --> </script> </telerik:RadCodeBlock> <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadGrid1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGrid1" /> <telerik:AjaxUpdatedControl ControlID="Label1" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> </telerik:RadAjaxManager> <telerik:RadGrid ID="RadGrid1" Width="97%" ShowStatusBar="True" AllowSorting="True" PageSize="7" GridLines="None" AllowPaging="True" runat="server" AllowAutomaticUpdates="True" OnItemUpdated="RadGrid1_ItemUpdated" AutoGenerateColumns="False" OnDataBound="RadGrid1_DataBound"> <MasterTableView TableLayout="Fixed" DataKeyNames="ProductID" EditMode="InPlace"> <Columns> <telerik:GridBoundColumn UniqueName="ProductID" DataField="ProductID" HeaderText="ProductID" ReadOnly="True" FilterControlAltText="Filter ProductID column" > <HeaderStyle Width="10%" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn UniqueName="ProductName" DataField="ProductName" HeaderText="Product name" ColumnEditorID="GridTextBoxColumnEditor1" FilterControlAltText="Filter ProductName column" > <HeaderStyle Width="25%" /> </telerik:GridBoundColumn> </Columns> </MasterTableView> <ClientSettings> <ClientEvents OnRowClick="RowClick" OnRowDblClick="RowDblClick" OnGridCreated="GridCreated" OnCommand="GridCommand" /> </ClientSettings> <HeaderContextMenu CssClass="GridContextMenu GridContextMenu_Default"> </HeaderContextMenu> <FilterMenu EnableImageSprites="False"> </FilterMenu> </telerik:RadGrid> <telerik:GridTextBoxColumnEditor ID="GridTextBoxColumnEditor1" runat="server" TextBoxStyle-Width="180px" /> <br /> <asp:Label ID="Label1" runat="server" EnableViewState="false" /> <br /> </div> </form> </body> </html> aspx.cs code: protected void Page_Init(object sender, EventArgs e) { LoadData(); } private void LoadData() { DataTable table = new DataTable(); table.AcceptChanges(); DataColumn col1 = new DataColumn("ProductID"); DataColumn col2 = new DataColumn("ProductName"); col1.DataType = System.Type.GetType("System.String"); col2.DataType = System.Type.GetType("System.String"); table.Columns.Add(col1); table.Columns.Add(col2); for (int i = 0; i < 2; i++) { DataRow row = table.NewRow(); row[col1] = i; row[col2] = "111"; table.Rows.Add(row); } RadGrid1.DataSource = table; RadGrid1.Rebind(); } protected void RadGrid1_ItemUpdated(object source, Telerik.Web.UI.GridUpdatedEventArgs e) { if (e.Exception != null) { e.KeepInEditMode = true; e.ExceptionHandled = true; SetMessage(Server.HtmlEncode("Unable to update Products. Reason: " + e.Exception.Message).Replace("'", "'").Replace("\r\n", "<br />")); } else { GridDataItem dataItem = (GridDataItem)e.Item; SetMessage(" ProductID " + dataItem.GetDataKeyValue("ProductID") + " updated"); } DisplayMessage(gridMessage); } private void DisplayMessage(string text) { Label1.Text = string.Format("<span>{0}</span>", text); } private void SetMessage(string message) { gridMessage = gridMessage + " " + message; } private string gridMessage = "Start "; protected void RadGrid1_DataBound(object sender, EventArgs e) { if (!string.IsNullOrEmpty(gridMessage)) { DisplayMessage(gridMessage); } }