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

Only items with ISinEditmode set to true can be updated

1 Answer 267 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Gobi
Top achievements
Rank 1
Gobi asked on 15 Sep 2011, 08:34 PM

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">
  
  
<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);
  
}
  
}

1 Answer, 1 is accepted

Sort by
0
Mira
Telerik team
answered on 21 Sep 2011, 08:22 AM
Hello Gobi,

In order to implement the desired functionality, I recommend that you either bind the grid using Simple data-binding, or use Advanced Data-binding (using NeedDataSource event).
You can see how client edit with batch server update can be implemented here.

I hope this helps.

Greetings,
Mira
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now
Tags
Grid
Asked by
Gobi
Top achievements
Rank 1
Answers by
Mira
Telerik team
Share this question
or