I need to create Excel like control using Telerik RadGrid – dynamic size of columns and rows, in line editing. My problem is that, when I try to call update command on edited row in return it has old values only.
My RadGrid control:
<telerik:RadGrid runat="server" ID="rgDataSheet" AutoGenerateColumns="true" AllowSorting="false" AllowAutomaticDeletes="false" AllowAutomaticInserts="false" AllowAutomaticUpdates="false"
AllowMultiRowEdit="true" AllowPaging="false" EnableViewState="false" OnNeedDataSource="HandlerGridOnNeedDataSource"
OnItemUpdated="GridItemUpdated" OnInsertCommand="GridInsertCommand" OnUpdateCommand="GridUpdateCommand"
OnCancelCommand="GridCancelCommand">
<MasterTableView runat="server" EditMode="InPlace" NoMasterRecordsText="brak rekordów"
ShowHeadersWhenNoRecords="true" AllowCustomSorting="false" EnableColumnsViewState="false"
AllowSorting="false" AllowFilteringByColumn="false" TableLayout="Fixed">
<Columns>
<telerik:GridEditCommandColumn UpdateText="Update" EditText="Edit" CancelText="Cancel" />
</Columns>
</MasterTableView>
<ClientSettings>
<ClientEvents OnRowClick="RowClick" />
</ClientSettings>
</telerik:RadGrid>
My events:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<string> datakeynames = new List<string>();
dataSet = new DataSet();
dataSet.Tables.Add(new DataTable());
dataSet.Tables[0].Columns.Add("col0");
dataSet.Tables[0].Columns.Add("col1");
dataSet.Tables[0].Columns.Add("col2");
dataSet.Tables[0].Columns.Add("col3");
dataSet.Tables[0].Columns.Add("col4");
dataSet.Tables[0].Columns.Add("col5");
dataSet.Tables[0].Rows.Add(new object[] { "1", "11", "a", "q", "z", "n" });
dataSet.Tables[0].Rows.Add(new object[] { "2", "12", "s", "w", "x", "m" });
dataSet.Tables[0].Rows.Add(new object[] { "3", "13", "d", "e", "c", "," });
dataSet.Tables[0].Rows.Add(new object[] { "4", "14", "f", "r", "v", "h" });
dataSet.Tables[0].Rows.Add(new object[] { "5", "15", "g", "t", "b", "y" });
ViewState["dataSet"] = dataSet;
rgDataSheet.MasterTableView.DataKeyNames = new string[] { "col0", "col1", "col2", "col3", "col4", "col5" };
}
else
{
rgDataSheet.Rebind();
}
}
protected void HandlerGridOnNeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
dataSet = (DataSet)ViewState["dataSet"];
((RadGrid)sender).DataSource = dataSet;
}
protected void GridUpdateCommand(object source, GridCommandEventArgs e)
{
//here I try access changed values, in example -
//GridEditableItem editedItem = e.Item as GridEditableItem;
//editedItem.OwnerTableView.DataKeyValues -> it contains always old values
}
Best Solution
Please remove below code from your page_load event.It is not needed Radgrid Automatically manage this thing. for more info. please check below link. http://www.telerik.com/help/aspnet-ajax/grid-advanced-data-binding.html