I have a RadGrid and when I try to insert, update, or delete, the event fires and it moves into the code behind, but it stops executing the code before actually performing the action and reloads the page. My code behind is below. _config.Values is a DataTable. Filtering and sorting work fine.
using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Linq.Dynamic;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;using Telerik.Web.UI;namespace WeightWatchers.EnvironmentConfig{ public partial class _Default : System.Web.UI.Page { private WeightWatchers.EnvironmentConfig.EnvironmentConfig _config; protected void Page_Load(object sender, EventArgs e) { } protected override void OnInit(EventArgs e) { base.OnInit(e); RadGrid1.NeedDataSource += (s, a) => { _config = new EnvironmentConfig.EnvironmentConfig(MapPath(@".\App_Data\environment.config.csv")); if (RadGrid1.MasterTableView.SortExpressions.Count > 0) RadGrid1.DataSource = GetEntities(RadGrid1.MasterTableView.FilterExpression, RadGrid1.MasterTableView.SortExpressions[0].FieldName + " " + RadGrid1.MasterTableView.SortExpressions[0].SortOrderAsString()); else RadGrid1.DataSource = GetEntities(RadGrid1.MasterTableView.FilterExpression, ""); }; RadGrid1.UpdateCommand += (s, a) => { //Get the GridEditableItem of the RadGrid GridEditableItem editedItem = a.Item as GridEditableItem; string Name = editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["Name"].ToString(); try { if (this.Validate(Name, true, editedItem)) { this.UpdateAddRow(editedItem, true); RadGrid1.DataSource = null; } } catch (Exception ex) { RadGrid1.Controls.Add(new LiteralControl("Unable to update Shippers. Reason: " + ex.Message)); a.Canceled = true; } }; RadGrid1.InsertCommand += (s, a) => { //Get the GridEditableItem of the RadGrid GridEditableItem newItem = a.Item as GridEditableItem; string Name = (newItem["Name"].Controls[0] as TextBox).Text; try { if (this.Validate(Name, false, newItem)) { if (this.Validate(Name, true, newItem)) { this.UpdateAddRow(newItem, false); RadGrid1.DataSource = null; } } } catch (Exception ex) { RadGrid1.Controls.Add(new LiteralControl("Unable to insert Shipper. Reason: " + ex.Message)); a.Canceled = true; } }; RadGrid1.DeleteCommand += (s, a) => { //Get the GridDataItem of the RadGrid GridDataItem item = (GridDataItem)a.Item; //Get the primary key value using the DataKeyValue. string name = item.OwnerTableView.DataKeyValues[item.ItemIndex]["Name"].ToString(); try { _config.Values.Rows.Remove(_config.Values.AsEnumerable() .AsQueryable() .Where(String.Format("(it[\"Name\"].ToString().ToUpper().Contains(\"{0}\".ToUpper()))", name)) .CopyToDataTable().Rows[0]); RadGrid1.DataSource = null; } catch (Exception ex) { RadGrid1.Controls.Add(new LiteralControl("Unable to delete Entry. Reason: " + ex.Message)); a.Canceled = true; } }; } protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e) { if (e.CommandName == "Filter" || e.CommandName == "Sort") { RadGrid1.DataSource = null; } } private DataTable GetEntities(string filterExpression, string sortExpression) { foreach (GridColumn col in RadGrid1.Columns) { col.AutoPostBackOnFilter = true; } var dt = _config.Values; if (!String.IsNullOrEmpty(filterExpression)) { IQueryable<DataRow> rows = dt.AsEnumerable() .AsQueryable() .Where(filterExpression); if (rows.Count<DataRow>() > 0) { dt = rows.CopyToDataTable(); } else { dt.Clear(); } } if (!String.IsNullOrEmpty(sortExpression)) { IQueryable<DataRow> rows = dt.AsEnumerable() .AsQueryable() .Where(sortExpression); if (rows.Count<DataRow>() > 0) { dt = rows.CopyToDataTable(); } else { dt.Clear(); } } return dt; } public void UpdateAddRow(GridEditableItem editedItem, bool update) { String[] cells = new String[_config.Values.Columns.Count]; for (int i = 1; i < _config.Values.Columns.Count; i++) { cells[i]= (editedItem[_config.Values.Columns[i].ColumnName].Controls[0] as TextBox).Text; } if (update) { string Name = editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex]["Name"].ToString(); DataRow[] rows = _config.Values.Select(String.Format("Name = '{0}'", Name)); var row = rows[0]; for (int i = 1; i < _config.Values.Columns.Count; i++) { row[_config.Values.Columns[i].ColumnName] = cells[i]; } } else { cells[0] = (editedItem["Name"].Controls[0] as TextBox).Text; var row = _config.Values.NewRow(); for (int i = 1; i < _config.Values.Columns.Count; i++) { row[_config.Values.Columns[i].ColumnName] = cells[i]; } _config.Values.Rows.Add(row); } RadGrid1.DataSource = null; } public bool Validate(string name, bool placeholder, GridEditableItem editedItem) { bool valid = true; //if (placeholder) //{ // string pattern = ""; // foreach (TableCell item in editedItem.Cells) // { // if (System.Text.RegularExpressions.Regex.IsMatch(item.Text, pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase)) // { // if (!item.ID.Equals("Name")) // { // valid = _config.Validate(item.Text, placeholder); // } // } // } //} //else //{ // valid = _config.Validate(name, placeholder); //} return valid; } }}