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)
{
}
}
}