Problem description:
The sample project contains a RadGrid (2 columns, 4 rows) that switches the second column in the second and fourth rows in edit mode. The problem is that the first column does not display its value anymore (the value is "lost") while the second column is in edit mode. When I try to iterate through all the rows in Save_Command handler, I cannot get the value from these columns either.
Default.aspx
<%
@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%
@ Register TagPrefix="tlk" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<%
@ Register TagPrefix="ajax" Namespace="System.Web.UI" Assembly="System.Web.Extensions" %>
<!
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">
<ajax:ScriptManager ID="ScriptManager" runat="server">
</ajax:ScriptManager>
<tlk:RadGrid ID="RadGrid1" Width="100%" AllowMultiRowEdit="true"
OnNeedDataSource="RadGrid_NeedDataSource" runat="server"
OnItemCreated="RadGrid1_ItemCreated" >
<MasterTableView ShowHeadersWhenNoRecords="true" Width="100%" AutoGenerateColumns="false" EditMode="InPlace" >
<Columns>
<tlk:GridBoundColumn UniqueName="Name" HeaderText="Name" DataField="Name" />
<tlk:GridBoundColumn UniqueName="Amount" HeaderText="Amount" DataField="Amount" />
</Columns>
<EditItemStyle BackColor="transparent" />
</MasterTableView>
<ClientSettings>
<Resizing AllowColumnResize="true" AllowRowResize="true" />
<Scrolling AllowScroll="true" UseStaticHeaders="true" />
</ClientSettings>
<HeaderStyle Width="150px" />
</tlk:RadGrid>
<div style="text-align:right; margin-top:5px">
<asp:Button ID="SaveButton" Text="Save" runat="server" OnCommand="Save_Command" />
</div>
</form>
</
body>
</
html>
Default.aspx.cs
using
System;
using
System.Data;
using
System.Configuration;
using
System.Collections;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
using
Telerik.Web.UI;
public
partial class _Default : System.Web.UI.Page
{
protected void RadGrid_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
DataTable table = new DataTable();
table.Columns.Add(
new DataColumn("Name"));
table.Columns.Add(
new DataColumn("Amount"));
table.Rows.Add(
new object[] { "John", "11" });
table.Rows.Add(
new object[] { "David", "22" });
table.Rows.Add(
new object[] { "Elvis", "33" });
table.Rows.Add(
new object[] { "Oliver", "44" });
((
RadGrid)source).DataSource = table;
}
protected void Page_PreRender(object sender, EventArgs e)
{
RadGrid1.Items[1].Edit =
true;
RadGrid1.Items[3].Edit =
true;
RadGrid1.Rebind();
}
protected void RadGrid1_ItemCreated(object sender, GridItemEventArgs e)
{
if (e.Item is GridDataItem && e.Item.IsInEditMode)
{
foreach (GridColumn column in e.Item.OwnerTableView.RenderColumns)
{
if (column is GridBoundColumn)
{
if (string.Compare(column.UniqueName, "Amount", StringComparison.InvariantCultureIgnoreCase) == 0)
{
((
GridBoundColumn)column).ReadOnly = false;
TextBox textBox = null;
if (e.Item is GridDataItem)
{
textBox = ((
TextBox)((GridDataItem)e.Item)[column.UniqueName].Controls[0]);
textBox.Style[
"width"] = "100%";
textBox.Style[
"height"] = "100%";
textBox.Style[
"border"] = "1px";
textBox.Style[
"text-align"] = "right";
}
}
else
{
((
GridBoundColumn)column).ReadOnly = true;
}
}
}
}
}
protected void Save_Command(object source, EventArgs e)
{
string name = "";
foreach (GridDataItem item in RadGrid1.Items)
{
name = item[
"Name"].Text;
}
}
}
I also have a second question: I would like to have an extra row to show the rollup on the editable column. Is it possible to have this total being updated as the user modifies the editable fields ?