I am currently using a trial version of the Telerik RadControls for ASP.NET AJAX.
I have created a grid and I am using a usercontrol to display my edit form for the grid.
Editing records in the grid works fine, using the following code...
However, I am getting problems when I try to create a new record in the database, using the following code:
In this second case, userControl always evaluates as NULL.
Can anyone see what I'm doing wrong?
Matt.
I have created a grid and I am using a usercontrol to display my edit form for the grid.
Editing records in the grid works fine, using the following code...
protected
void
SectionGrid_UpdateCommand(
object
source, GridCommandEventArgs e)
{
UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
...
...
However, I am getting problems when I try to create a new record in the database, using the following code:
protected
void
SectionGrid_InsertCommand(
object
source, GridCommandEventArgs e)
{
UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
...
...
In this second case, userControl always evaluates as NULL.
Can anyone see what I'm doing wrong?
Matt.
7 Answers, 1 is accepted
0

Elliott
Top achievements
Rank 2
answered on 16 Feb 2011, 10:49 PM
is that the right cast for an insert? perhaps there is a GridInsertFormItem or something of the same sort
when I work with user controls, the code behind of the user control which contains the functionality - it is addressed by properties
I can send you a fairly simple example
when I work with user controls, the code behind of the user control which contains the functionality - it is addressed by properties
I can send you a fairly simple example
0

Matt
Top achievements
Rank 1
answered on 17 Feb 2011, 09:46 AM
Hi Marianne,
Thanks for the reply.
It seems to be the right cast - Telerik's example uses it:
http://demos.telerik.com/aspnet-ajax/grid/examples/dataediting/usercontroleditform/defaultcs.aspx
Thanks for the reply.
It seems to be the right cast - Telerik's example uses it:
http://demos.telerik.com/aspnet-ajax/grid/examples/dataediting/usercontroleditform/defaultcs.aspx
0
Hello Matt,
Could you please confirm that you are using EditForms or Popup edit mode of your table view? Here is a small quote form our documentation:
When the EditMode property of a table view is "EditForms" or "PopUp", the table view's EditFormSettings property lets you configure the edit form. One of the EditFormSettings sub-properties is EditFormType, which lets you specify whether you want to use the built-in edit form or substitute your own custom edit form.
I hope this helps.
Kind regards,
Martin
the Telerik team
Could you please confirm that you are using EditForms or Popup edit mode of your table view? Here is a small quote form our documentation:
When the EditMode property of a table view is "EditForms" or "PopUp", the table view's EditFormSettings property lets you configure the edit form. One of the EditFormSettings sub-properties is EditFormType, which lets you specify whether you want to use the built-in edit form or substitute your own custom edit form.
There are three possible settings for EditFormType:
- AutoGenerated: When EditFormType is "AutoGenerated", the table view uses the built-in edit form.
- WebUserControl: When EditFormType is "WebUserControl", you can supply a UserControl that the table view uses as an edit form.
- Template: When EditFormType is "Template", you can supply a template that the table view uses to generate the edit form.
I hope this helps.
Kind regards,
Martin
the Telerik team
0

Matt
Top achievements
Rank 1
answered on 21 Feb 2011, 09:45 AM
Hi Martin,
I'm using:
Thanks.
Matt.
I'm using:
<
EditFormSettings
UserControlName
=
"MaintainSection.ascx"
EditFormType
=
"WebUserControl"
>
Thanks.
Matt.
0

Matt
Top achievements
Rank 1
answered on 22 Feb 2011, 03:05 PM
Hi Martin,
Can you have a look at this - I assume I'm doing something wrong, but I can't see what:
ModifyModule.aspx
ModifyModule.aspx.cs
MaintainSection.ascx
MaintainSection.ascx.cs
Can you have a look at this - I assume I'm doing something wrong, but I can't see what:
ModifyModule.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ModifyModule.aspx.cs" Inherits="ModifyModule" %>
<!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
id
=
"Head1"
runat
=
"server"
>
<
title
></
title
>
<
telerik:RadStyleSheetManager
id
=
"RadStyleSheetManager1"
runat
=
"server"
/>
</
head
>
<
body
>
<
form
id
=
"form1"
runat
=
"server"
>
<
telerik:RadScriptManager
ID
=
"RadScriptManager1"
runat
=
"server"
>
<
Scripts
>
<%--Needed for JavaScript IntelliSense in VS2010--%>
<%--For VS2008 replace RadScriptManager with ScriptManager--%>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.Core.js"
/>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.jQuery.js"
/>
<
asp:ScriptReference
Assembly
=
"Telerik.Web.UI"
Name
=
"Telerik.Web.UI.Common.jQueryInclude.js"
/>
</
Scripts
>
</
telerik:RadScriptManager
>
<
script
type
=
"text/javascript"
>
//Put your JavaScript code here.
</
script
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"SectionGrid"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"SectionGrid"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadSkinManager
ID
=
"RadSkinManager1"
Runat
=
"server"
Skin
=
"Vista"
>
</
telerik:RadSkinManager
>
<
telerik:RadAjaxPanel
ID
=
"RadAjaxPanel1"
runat
=
"server"
Height
=
"429px"
Width
=
"515px"
>
<
telerik:RadFormDecorator
ID
=
"RadFormDecorator1"
runat
=
"server"
Skin
=
"Vista"
/>
<
br
/>
<
telerik:RadGrid
ID
=
"SectionGrid"
runat
=
"server"
GridLines
=
"Horizontal"
Culture
=
"en-GB"
DataSourceID
=
"ProjectAzureDataSource"
AutoGenerateColumns
=
"False"
Width
=
"897px"
ondeletecommand
=
"SectionGrid_DeleteCommand"
onupdatecommand
=
"SectionGrid_UpdateCommand"
oninsertcommand
=
"SectionGrid_InsertCommand"
onrowdrop
=
"SectionGrid_RowDrop"
EnableViewState
=
"True"
>
<
ClientSettings
AllowRowsDragDrop
=
"true"
>
<
Selecting
AllowRowSelect
=
"True"
EnableDragToSelectRows
=
"false"
/>
</
ClientSettings
>
<
MasterTableView
CommandItemDisplay
=
"Top"
DataSourceID
=
"ProjectAzureDataSource"
DataKeyNames
=
"idSectionList"
EnableViewState
=
"True"
>
<
CommandItemTemplate
>
<
div
style
=
"padding: 5px 5px;"
>
<
asp:LinkButton
ID
=
"btnEditSelected"
runat
=
"server"
CommandName
=
"EditSelected"
Visible='<%# SectionGrid.EditIndexes.Count == 0 %>'><
img
style
=
"border:0px;vertical-align:middle;"
alt
=
""
src
=
"Images/Edit.gif"
/>Edit Selected Section</
asp:LinkButton
>
<
asp:LinkButton
ID
=
"btnUpdateEdited"
runat
=
"server"
CommandName
=
"UpdateEdited"
Visible='<%# SectionGrid.EditIndexes.Count > 0 %>'><
img
style
=
"border:0px;vertical-align:middle;"
alt
=
""
src
=
"Images/Update.gif"
/>Update</
asp:LinkButton
>
<
asp:LinkButton
ID
=
"btnCancel"
runat
=
"server"
CommandName
=
"CancelAll"
Visible='<%# SectionGrid.EditIndexes.Count > 0 || SectionGrid.MasterTableView.IsItemInserted %>'><
img
style
=
"border:0px;vertical-align:middle;"
alt
=
""
src
=
"Images/Cancel.gif"
/>Cancel Editing</
asp:LinkButton
>
<
asp:LinkButton
ID
=
"btnInitInsert"
runat
=
"server"
CommandName
=
"InitInsert"
Visible='<%# !SectionGrid.MasterTableView.IsItemInserted %>'><
img
style
=
"border:0px;vertical-align:middle;"
alt
=
""
src
=
"Images/AddRecord.gif"
/>Add New Section</
asp:LinkButton
>
<
asp:LinkButton
ID
=
"btnPerformInsert"
runat
=
"server"
CommandName
=
"PerformInsert"
Visible='<%# SectionGrid.MasterTableView.IsItemInserted %>'><
img
style
=
"border:0px;vertical-align:middle;"
alt
=
""
src
=
"Images/Insert.gif"
/> Add This Section</
asp:LinkButton
>
<
asp:LinkButton
ID
=
"btnDelete"
OnClientClick
=
"javascript:return confirm('Delete the selected section?')"
runat
=
"server"
CommandName
=
"DeleteSelected"
><
img
style
=
"border:0px;vertical-align:middle;"
alt
=
""
src
=
"Images/Delete.gif"
/>Delete Selected Section</
asp:LinkButton
>
<
asp:LinkButton
ID
=
"btnRebindGrid"
runat
=
"server"
CommandName
=
"RebindGrid"
><
img
style
=
"border:0px;vertical-align:middle;"
alt
=
""
src
=
"Images/Refresh.gif"
/>Refresh Section List</
asp:LinkButton
>
</
div
>
</
CommandItemTemplate
>
<
CommandItemSettings
ExportToPdfText
=
"Export to Pdf"
/>
<
RowIndicatorColumn
FilterControlAltText
=
"Filter RowIndicator column"
>
<
HeaderStyle
Width
=
"20px"
/>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
FilterControlAltText
=
"Filter ExpandColumn column"
>
<
HeaderStyle
Width
=
"20px"
/>
</
ExpandCollapseColumn
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"idSectionList"
DataType
=
"System.Int32"
FilterControlAltText
=
"Filter idSectionList column"
HeaderText
=
"idSectionList"
ReadOnly
=
"True"
SortExpression
=
"idSectionList"
UniqueName
=
"idSectionList"
Visible
=
"False"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"sectionPosition"
DataType
=
"System.Int32"
FilterControlAltText
=
"Filter sectionPosition column"
HeaderText
=
"sectionPosition"
SortExpression
=
"sectionPosition"
UniqueName
=
"sectionPosition"
ReadOnly
=
"True"
Visible
=
"False"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"sectionName"
FilterControlAltText
=
"Filter sectionName column"
HeaderText
=
"Section Name"
SortExpression
=
"sectionName"
UniqueName
=
"sectionName"
MaxLength
=
"100"
>
<
HeaderStyle
Width
=
"100%"
/>
</
telerik:GridBoundColumn
>
</
Columns
>
<
EditFormSettings
UserControlName
=
"MaintainSection.ascx"
EditFormType
=
"WebUserControl"
>
<
EditColumn
UniqueName
=
"SectionEditColumn"
>
</
EditColumn
>
</
EditFormSettings
>
</
MasterTableView
>
<
FilterMenu
EnableImageSprites
=
"False"
></
FilterMenu
>
<
HeaderContextMenu
CssClass
=
"GridContextMenu GridContextMenu_Default"
></
HeaderContextMenu
>
</
telerik:RadGrid
>
<
asp:SqlDataSource
ID
=
"ProjectAzureDataSource"
runat
=
"server"
ConnectionString="<%$ ConnectionStrings:ProjectAzureConnectionString %>"
SelectCommand="SELECT [idSectionList], [sectionPosition], [sectionName] FROM [sectionList] WHERE ([idModuleList] = 1) ORDER BY [sectionPosition]">
</
asp:SqlDataSource
>
</
telerik:RadAjaxPanel
>
</
form
>
</
body
>
</
html
>
ModifyModule.aspx.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Data;
using
System.Data.SqlClient;
using
System.Configuration;
using
Telerik.Web.UI;
public
partial
class
ModifyModule : System.Web.UI.Page
{
//Declare a global DataTable dtTable
public
static
DataTable dtTable;
//Get the connectionstring from the webconfig and declare a global SqlConnection "SqlConnection"
public
static
string
connectionString = ConfigurationManager.ConnectionStrings[
"ProjectAzureConnectionString"
].ConnectionString;
public
SqlConnection SqlConnection =
new
SqlConnection(connectionString);
//Declare a global SqlDataAdapter SqlDataAdapter
public
SqlDataAdapter SqlDataAdapter =
new
SqlDataAdapter();
//Declare a global SqlCommand SqlCommand
public
SqlCommand SqlCommand =
new
SqlCommand();
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
protected
void
SectionGrid_InsertCommand(
object
source, GridCommandEventArgs e)
{
UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
//Get the GridEditFormInsertItem of the RadGrid
//GridEditFormInsertItem insertedItem = e.Item as GridEditFormInsertItem;
string
sectionName = (userControl.FindControl(
"sectionName"
)
as
TextBox).Text.Trim();
sectionName = sectionName.Replace(
"'"
,
"''"
);
//string sectionName = (insertedItem.FindControl("sectionName") as TextBox).Text.Trim();
//string sectionName = (insertedItem["sectionName"].Controls[0] as TextBox).Text.Trim();
try
{
//Open the SqlConnection
SqlConnection.Open();
//Update Query to insert into the database
string
insertQuery =
"INSERT INTO sectionList(idModuleList,sectionPosition,sectionName) VALUES ("
+
"1"
+
","
+
"99"
+
",'"
+ sectionName +
"')"
;
SqlCommand.CommandText = insertQuery;
SqlCommand.Connection = SqlConnection;
SqlCommand.ExecuteNonQuery();
//Close the SqlConnection
SqlConnection.Close();
}
catch
(Exception ex)
{
SectionGrid.Controls.Add(
new
LiteralControl(
"Unable to insert section. Reason: "
+ ex.Message));
e.Canceled =
true
;
}
}
protected
void
SectionGrid_DeleteCommand(
object
source, Telerik.Web.UI.GridCommandEventArgs e)
{
//Get the GridDataItem of the RadGrid
GridDataItem item = (GridDataItem)e.Item;
//Get the primary key value using the DataKeyValue.
string
idSectionList = item.OwnerTableView.DataKeyValues[item.ItemIndex][
"idSectionList"
].ToString();
try
{
//Open the SqlConnection
SqlConnection.Open();
string
deleteQuery =
"DELETE FROM sectionList WHERE idSectionList='"
+ idSectionList +
"'"
;
SqlCommand.CommandText = deleteQuery;
SqlCommand.Connection = SqlConnection;
SqlCommand.ExecuteNonQuery();
//Close the SqlConnection
SqlConnection.Close();
}
catch
(Exception ex)
{
SectionGrid.Controls.Add(
new
LiteralControl(
"Unable to delete section. Reason: "
+ ex.Message));
e.Canceled =
true
;
}
}
protected
void
SectionGrid_UpdateCommand(
object
source, GridCommandEventArgs e)
{
//Get the GridEditableItem of the RadGrid
GridEditableItem editedItem = e.Item
as
GridEditableItem;
//Get the primary key value using the DataKeyValue.
string
idSectionList = editedItem.OwnerTableView.DataKeyValues[editedItem.ItemIndex][
"idSectionList"
].ToString();
UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
string
sectionName = (userControl.FindControl(
"sectionName"
)
as
TextBox).Text.Trim();
sectionName = sectionName.Replace(
"'"
,
"''"
);
try
{
//Open the SqlConnection
SqlConnection.Open();
//Update Query to update the Datatable
string
updateQuery =
"UPDATE sectionList SET sectionName='"
+ sectionName +
"' WHERE idSectionList='"
+ idSectionList +
"'"
;
SqlCommand.CommandText = updateQuery;
SqlCommand.Connection = SqlConnection;
SqlCommand.ExecuteNonQuery();
//Close the SqlConnection
SqlConnection.Close();
}
catch
(Exception ex)
{
SectionGrid.Controls.Add(
new
LiteralControl(
"Unable to update section. Reason: "
+ ex.Message));
}
}
protected
void
SectionGrid_RowDrop(
object
sender, GridDragDropEventArgs e)
{
// Procedure to handle drag and drop re-ordering
if
(e.DestDataItem !=
null
)
{
// Open the SqlConnection
SqlConnection.Open();
// Get the id of the row to move, and its current position
Int32 RowToMoveID = (
int
)e.DraggedItems.FirstOrDefault().GetDataKeyValue(
"idSectionList"
);
string
sqlCurrentPosition =
"SELECT sectionPosition FROM sectionList WHERE idSectionList = "
+ RowToMoveID.ToString().Trim();
SqlCommand.CommandText = sqlCurrentPosition;
SqlCommand.Connection = SqlConnection;
Int32 currentPosition = Convert.ToInt32(SqlCommand.ExecuteScalar());
// Find out the new position
Int32 RowDestinationID = (
int
)e.DestDataItem.GetDataKeyValue(
"idSectionList"
);
string
sqlNewPosition =
"SELECT sectionPosition FROM sectionList WHERE idSectionList = "
+ RowDestinationID.ToString().Trim();
SqlCommand.CommandText = sqlNewPosition;
SqlCommand.Connection = SqlConnection;
Int32 newPosition = Convert.ToInt32(SqlCommand.ExecuteScalar());
if
(currentPosition < newPosition)
{
newPosition -= 1;
}
if
(e.DropPosition == GridItemDropPosition.Above)
{
newPosition -= 1;
}
if
(e.DropPosition == GridItemDropPosition.Below)
{
newPosition += 1;
}
List<Int32> orderedSections =
new
List<Int32>();
// Scan through the grid, picking up the id of each row and adding it to the ordered list
foreach
(GridDataItem dataItem
in
SectionGrid.Items)
{
Int32 idSectionList = (Int32)dataItem.GetDataKeyValue(
"idSectionList"
);
orderedSections.Add(idSectionList);
}
// Remove the dragged section from the ordered List
orderedSections.Remove(RowToMoveID);
// Add the dragged section into its new position
try
{
orderedSections.Insert(newPosition, RowToMoveID);
}
catch
{
orderedSections.Add(RowToMoveID);
}
// Variable to hold section position
Int32 sectionPosition = 1;
foreach
(Int32 idSectionList
in
orderedSections)
{
// Update Query to update the Datatable
string
updateQuery =
"UPDATE sectionList SET sectionPosition="
+ sectionPosition.ToString().Trim() +
" WHERE idSectionList="
+ idSectionList.ToString().Trim();
SqlCommand.CommandText = updateQuery;
SqlCommand.Connection = SqlConnection;
SqlCommand.ExecuteNonQuery();
// Increment the section position
sectionPosition += 1;
}
//Close the SqlConnection
SqlConnection.Close();
SectionGrid.Rebind();
}
}
}
MaintainSection.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MaintainSection.ascx.cs" Inherits="MaintainSection" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<
table
id
=
"Table2"
cellspacing
=
"2"
cellpadding
=
"1"
width
=
"100%"
border
=
"1"
rules
=
"none"
style
=
"border-collapse: collapse"
>
<
tr
class
=
"EditFormHeader"
>
<
td
colspan
=
"2"
>
<
b
>Section Name</
b
>
</
td
>
</
tr
>
<
tr
>
<
td
>
<
asp:TextBox
ID
=
"sectionName"
runat
=
"server"
Text='<%# DataBinder.Eval( Container, "DataItem.sectionName" ) %>'
Width="459px"></
asp:TextBox
>
</
td
>
</
tr
>
</
table
>
MaintainSection.ascx.cs
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
public
partial
class
MaintainSection : System.Web.UI.UserControl
{
private
object
_dataItem =
null
;
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
public
object
DataItem
{
get
{
return
this
._dataItem;
}
set
{
this
._dataItem = value;
}
}
}
0
Accepted

Princy
Top achievements
Rank 2
answered on 23 Feb 2011, 06:51 AM
Hello Matt,
Try the following code snippet inside InsertCommand to locate UserControl.
C#:
Thanks,
Princy.
Try the following code snippet inside InsertCommand to locate UserControl.
C#:
protected
void
SectionGrid_InsertCommand(
object
sender, GridCommandEventArgs e)
{
GridEditFormInsertItem insertItem = (GridEditFormInsertItem)SectionGrid.MasterTableView.GetInsertItem();
UserControl userControl = (UserControl)insertItem.FindControl(GridEditFormItem.EditFormUserControlID);
. . . . . . . .
}
Thanks,
Princy.
0

Matt
Top achievements
Rank 1
answered on 23 Feb 2011, 10:06 AM
Thanks very much Princy - that works great!