I'm trying to programmatically insert items in radgrid while having all items in edit mode.
The item needs to be inserted and saved immediately so more items can be inserted. Please see below sample project.
I noticed that raising both the InitInsertCommandName and PerformInsertCommandName commands will cause the grid's datasource to fire selecting event again. All changes the user made in the grid will be lost because of this.
Does this mean i have to update the entire grid first, before i insert the item? Is there a better way to achieve described functionality?
The item needs to be inserted and saved immediately so more items can be inserted. Please see below sample project.
I noticed that raising both the InitInsertCommandName and PerformInsertCommandName commands will cause the grid's datasource to fire selecting event again. All changes the user made in the grid will be lost because of this.
Does this mean i have to update the entire grid first, before i insert the item? Is there a better way to achieve described functionality?
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="RadGridAdd._Default" %><%@ Register Assembly="Telerik.Web.UI, Version=2011.1.413.35, Culture=neutral, PublicKeyToken=121fae78165ba3d4" Namespace="Telerik.Web.UI" TagPrefix="telerik" %><%@ Register Assembly="Microsoft.Practices.Web.UI.WebControls, Version=2.0.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="Microsoft.Practices.Web.UI.WebControls" TagPrefix="pp" %><!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></title></head><body> <form id="form1" runat="server"> <telerik:RadScriptManager ID="RadScriptManager1" runat="server"> </telerik:RadScriptManager> <div> <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="False" CellSpacing="0" DataSourceID="ObjectContainerDataSource1" GridLines="None" AllowAutomaticInserts="true" AllowMultiRowEdit="true" OnItemCommand="RadGrid1_ItemCommand" onprerender="RadGrid1_PreRender"> <MasterTableView DataKeyNames="Id" EditMode="InPlace" CommandItemDisplay="Top" > <Columns> <telerik:GridBoundColumn DataField="Id" DataType="System.Int32" FilterControlAltText="Filter Id column" HeaderText="Id" SortExpression="Id" UniqueName="Id"> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="Abc" FilterControlAltText="Filter Abc column" HeaderText="Abc" SortExpression="Abc" UniqueName="Abc"> </telerik:GridBoundColumn> <telerik:GridButtonColumn ButtonType="ImageButton" CommandName="InitInsertAndPerformSave" Text="ADD" UniqueName="AddColumn" ShowInEditForm="true"> <ItemStyle HorizontalAlign="Center" CssClass="MyImageButton" /> </telerik:GridButtonColumn> </Columns> </MasterTableView> </telerik:RadGrid> </div> <pp:ObjectContainerDataSource ID="ObjectContainerDataSource1" runat="server" DataObjectTypeName="RadGridAdd.A" OnSelecting="ObjectContainerDataSource1_Selecting" OnInserted="ObjectContainerDataSource1_Inserted" onupdated="ObjectContainerDataSource1_Updated" /> </form></body></html>using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using Telerik.Web.UI;using Microsoft.Practices.Web.UI.WebControls;namespace RadGridAdd{ [Serializable] public class A { public int Id { get; set; } public string Abc { get; set; } } public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { for (int i = 0; i < RadGrid1.PageSize; i++) { RadGrid1.EditIndexes.Add(i); } } private List<A> Data { get { return ViewState["data"] as List<A>; } set { ViewState["data"] = value; } } protected void ObjectContainerDataSource1_Selecting(object sender, ObjectContainerDataSourceSelectingEventArgs e) { if (Data == null) { List<A> la = new List<A>(); la.Add(new A() { Id = 1, Abc = "123" }); la.Add(new A() { Id = 2, Abc = "456" }); Data = la; } ObjectContainerDataSource1.DataSource = Data; } protected void ObjectContainerDataSource1_Inserted(object sender, ObjectContainerDataSourceStatusEventArgs e) { A new_a = (A)e.Instance; Data.Add(new_a); //RadGrid1.Rebind(); } protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e) { if (e.CommandName == "InitInsertAndPerformSave") { GridCommandItem GCI = (GridCommandItem)RadGrid1.MasterTableView.GetItems(GridItemType.CommandItem)[0]; RadGrid1.MasterTableView.NoMasterRecordsText = string.Empty; GCI.FireCommandEvent(RadGrid.InitInsertCommandName, String.Empty); var gi = RadGrid1.MasterTableView.GetInsertItem(); gi.FireCommandEvent(RadGrid.PerformInsertCommandName, string.Empty); } } protected void RadGrid1_PreRender(object sender, EventArgs e) { GridCommandItem GCI = (GridCommandItem)RadGrid1.MasterTableView.GetItems(GridItemType.CommandItem)[0]; GCI.Visible = false; } protected void ObjectContainerDataSource1_Updated(object sender, ObjectContainerDataSourceStatusEventArgs e) { } }}