I'm following the demo/example here and finding that several things aren't working for me. Hopefully I'm just doing it wrong and my newbie errors can be quickly pointed out.
http://demos.telerik.com/aspnet-ajax/grid/examples/data-editing/edit-form-types/defaultcs.aspx
I want a modal popup for editing, using a UserControl, and to use the same control at the top of the page for adding new records. I'm using VS2012, asp.net webforms 4.5, RadControls Q3 2013, and a very basic n-tier approach using EF in a separate assembly, for data access.
Here's my aspx:
...the code-behind:
...the UserControl:
...control code-behind:
So, there are a few issues.
Firstly, clicking "edit" in a row doesn't yield a modal popup, it's inline with the record. I can live without that and it's the least of my problems, but it'd be nice to have since I was doing it that way prior to switching the project from stock to the RadControls.
The biggest issue is that while the Insert, Update, and Delete commands are firing, the GridEditableItem is always null. Since I'm never able to access it, none of the commands actually work. The only difference from the example is that I'm binding entities, not a DataTable...which I figured I could safely assume works the same? The entities are "self-tracking" and the initial RadGrid binding is working as expected. I'm able to bind, page, and sort in other RadGrids in the project which don't require editing.
Any ideas? Thanks!
http://demos.telerik.com/aspnet-ajax/grid/examples/data-editing/edit-form-types/defaultcs.aspx
I want a modal popup for editing, using a UserControl, and to use the same control at the top of the page for adding new records. I'm using VS2012, asp.net webforms 4.5, RadControls Q3 2013, and a very basic n-tier approach using EF in a separate assembly, for data access.
Here's my aspx:
<%@ Page Title="" Language="C#" MasterPageFile="~/ControlCenter/MasterAdmin.master" AutoEventWireup="true" CodeFile="ConfigSMTP.aspx.cs" Inherits="ControlCenter_ConfigSMTP" %>
<%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %>
<%@ register src="~/Controls/EditConfigSMTP.ascx" tagprefix="My" tagname="EditConfigSMTP" %>
<
asp:content
ID
=
"ConfigSMTPHead"
ContentPlaceHolderID
=
"head"
Runat
=
"Server"
>
</
asp:content
>
<
asp:content
ID
=
"ConfigSMTPContent"
ContentPlaceHolderID
=
"BodyContent"
Runat
=
"Server"
>
<
table
style
=
"width:100%;"
>
<
tr
>
<
td
style
=
"width:20%;"
>Edit SMTP Address List</
td
>
<
td
style
=
"width:80%;"
> </
td
>
</
tr
>
<
tr
>
<
td
colspan
=
"2"
>
<
telerik:radajaxmanager
id
=
"ConfigSMTPAjaxManager"
runat
=
"server"
>
<
ajaxsettings
>
<
telerik:ajaxsetting
ajaxcontrolid
=
"ConfigSMTPGrid"
>
<
updatedcontrols
>
<
telerik:ajaxupdatedcontrol
controlid
=
"ConfigSMTPGrid"
loadingpanelid
=
"ConfigSMTPLoadingPanel"
/>
</
updatedcontrols
>
</
telerik:ajaxsetting
>
</
ajaxsettings
>
</
telerik:radajaxmanager
>
</
td
>
</
tr
>
<
tr
>
<
td
colspan
=
"2"
>Use the form below to configure the outgoing SMTP address for email.</
td
>
</
tr
>
<
tr
>
<
td
colspan
=
"2"
>
<
My:editconfigsmtp
runat
=
"server"
id
=
"EditConfigSMTP"
/>
</
td
>
</
tr
>
<
tr
>
<
td
colspan
=
"2"
style
=
"text-align: center"
>
<
telerik:radajaxloadingpanel
id
=
"ConfigSMTPLoadingPanel"
runat
=
"server"
skin
=
"Default"
>
</
telerik:radajaxloadingpanel
>
</
td
>
</
tr
>
<
tr
>
<
td
colspan
=
"2"
>
<!-- SEARCH RESULTS -->
<
telerik:radgrid
id
=
"ConfigSMTPGrid"
runat
=
"server"
allowsorting
=
"True"
autogeneratecolumns
=
"False"
cellpadding
=
"5"
cellspacing
=
"5"
datasourceid
=
"ConfigSMTPDataSource"
gridlines
=
"None"
width
=
"100%"
onitemdatabound
=
"ConfigSMTPGrid_ItemDataBound"
skin
=
"Metro"
ondeletecommand
=
"ConfigSMTPGrid_DeleteCommand"
oninsertcommand
=
"ConfigSMTPGrid_InsertCommand"
onupdatecommand
=
"ConfigSMTPGrid_UpdateCommand"
onprerender
=
"ConfigSMTPGrid_PreRender"
>
<
mastertableview
datakeynames
=
"ID"
datasourceid
=
"ConfigSMTPDataSource"
>
<
editformsettings
>
<
popupsettings
width
=
"700px"
height
=
"500px"
modal
=
"true"
/>
</
editformsettings
>
<
columns
>
<
telerik:grideditcommandcolumn
uniquename
=
"ConfigSMTPEditCommandColumn"
editimageurl
=
"../Images/edit_icon.gif"
cancelimageurl
=
"../Images/close_delete.gif"
>
</
telerik:grideditcommandcolumn
>
<
telerik:gridboundcolumn
datafield
=
"ID"
datatype
=
"System.Int32"
filtercontrolalttext
=
"Filter ID column"
headertext
=
"ID"
readonly
=
"True"
sortexpression
=
"ID"
uniquename
=
"ID"
visible
=
"False"
>
</
telerik:gridboundcolumn
>
<
telerik:gridboundcolumn
datafield
=
"SMTPServer"
filtercontrolalttext
=
"Filter SMTPServer column"
headertext
=
"SMTP Server"
sortexpression
=
"SMTPServer"
uniquename
=
"SMTPServer"
>
</
telerik:gridboundcolumn
>
<
telerik:gridboundcolumn
datafield
=
"Description"
filtercontrolalttext
=
"Filter Description column"
headertext
=
"Description"
sortexpression
=
"Description"
uniquename
=
"Description"
>
</
telerik:gridboundcolumn
>
<
telerik:gridboundcolumn
datafield
=
"CreateDate"
datatype
=
"System.DateTime"
filtercontrolalttext
=
"Filter CreateDate column"
headertext
=
"Created"
sortexpression
=
"CreateDate"
uniquename
=
"CreateDate"
>
</
telerik:gridboundcolumn
>
<
telerik:gridboundcolumn
datafield
=
"IsDefault"
datatype
=
"System.Byte"
filtercontrolalttext
=
"Filter IsDefault column"
headertext
=
"Default"
sortexpression
=
"IsDefault"
uniquename
=
"IsDefault"
>
<
itemstyle
horizontalalign
=
"Center"
/>
</
telerik:gridboundcolumn
>
</
columns
>
<
editformsettings
usercontrolname
=
"~/Controls/EditConfigSMTP.ascx"
editformtype
=
"WebUserControl"
>
<
editcolumn
uniquename
=
"ConfigSMTPEditCommandColumn"
></
editcolumn
>
</
editformsettings
>
</
mastertableview
>
</
telerik:radgrid
>
<
asp:entitydatasource
id
=
"ConfigSMTPDataSource"
runat
=
"server"
connectionstring
=
"name=MyEntities"
defaultcontainername
=
"MyEntities"
enabledelete
=
"True"
enableflattening
=
"False"
enableinsert
=
"True"
enableupdate
=
"True"
entitysetname
=
"ConfigSMTP"
entitytypefilter
=
"ConfigSMTP"
>
</
asp:entitydatasource
>
</
td
>
</
tr
>
</
table
>
</
asp:content
>
...the code-behind:
using
System;
using
System.Collections.Generic;
using
System.ComponentModel.DataAnnotations;
using
System.Linq;
using
System.Threading;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
DataAccess.Model;
using
DataAccess.Validation;
using
Proxy.Data;
using
Telerik.Web.UI;
public
partial
class
ControlCenter_ConfigSMTP : System.Web.UI.Page
{
private
int
_currentDefault;
private
readonly
string
_redirect =
"ConfigSMTP.aspx"
;
public
int
CurrentDefault
{
get
{
return
_currentDefault; }
set
{ _currentDefault = value; }
}
protected
void
Page_Load(
object
sender, EventArgs e)
{
}
protected
void
ConfigSMTPGrid_PreRender(
object
sender, EventArgs e)
{
}
protected
void
ConfigSMTPGrid_ItemDataBound(
object
sender, Telerik.Web.UI.GridItemEventArgs e)
{
//alternative to binding in aspx file
if
(e.Item
is
GridEditFormItem && e.Item.IsInEditMode)
{
//UserControl control = e.Item.FindControl(GridEditFormItem.EditFormUserControlID) as UserControl;
//GridDataItem parentItem = (e.Item as GridEditFormItem).ParentItem;
//TextBox box = (TextBox)control.FindControl("TextBox1");
//box.Text = parentItem["Country"].Text;
}
}
protected
void
ConfigSMTPGrid_InsertCommand(
object
sender, GridCommandEventArgs e)
{
//get entity from grid
GridEditableItem editedItem = e.Item
as
GridEditableItem;
ConfigSMTP smtpEdit = editedItem.DataItem
as
ConfigSMTP;
//get edit form control
UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
}
protected
void
ConfigSMTPGrid_UpdateCommand(
object
sender, GridCommandEventArgs e)
{
//get entity from grid
GridEditableItem editedItem = e.Item
as
GridEditableItem; //e.Item is ALWAYS NULL.
ConfigSMTP smtpEdit = editedItem.DataItem
as
ConfigSMTP;
//get edit form control
UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
//update values
smtpEdit.SMTPServer = (userControl.FindControl(
"SMTPServer"
)
as
TextBox).Text;
smtpEdit.Description = (userControl.FindControl(
"Description"
)
as
TextBox).Text;
smtpEdit.IsDefault = Byte.Parse((userControl.FindControl(
"IsDefault"
)
as
TextBox).Text);
//commit
ConfigSMTPProxy px =
new
ConfigSMTPProxy();
px.Save(smtpEdit);
}
protected
void
ConfigSMTPGrid_DeleteCommand(
object
sender, GridCommandEventArgs e)
{
//get entity from grid
GridEditableItem editedItem = e.Item
as
GridEditableItem;
ConfigSMTP smtpEdit = editedItem.DataItem
as
ConfigSMTP;
//get edit form control
UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
}
}
...the UserControl:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="EditConfigSMTP.ascx.cs" Inherits="Controls_EditConfigSMTP" %>
<
table
style
=
"width:100%;"
>
<
tr
>
<
td
colspan
=
"2"
>
<
asp:validationsummary
ID
=
"ConfigSMTPValidationSummary"
runat
=
"server"
cssclass
=
"validation"
ShowModelStateErrors
=
"true"
/>
</
td
>
</
tr
>
<!-- SEARCH FORM -->
<
tr
>
<
td
class
=
"fieldLabel"
>SMTP Address<
span
class
=
"required"
>*</
span
></
td
>
<
td
>
<
asp:textbox
id
=
"SMTPServer"
cssclass
=
"input"
clientidmode
=
"Static"
runat
=
"server"
width
=
"400px"
text='<%# DataBinder.Eval(Container, "DataItem.SMTPServer") %>'></
asp:textbox
>
</
td
>
</
tr
>
<
tr
>
<
td
class
=
"fieldLabel"
>Description</
td
>
<
td
>
<
asp:textbox
id
=
"Description"
cssclass
=
"input"
clientidmode
=
"Static"
runat
=
"server"
textmode
=
"MultiLine"
columns
=
"55"
rows
=
"5"
text='<%# DataBinder.Eval(Container, "DataItem.Description") %>'>
</
asp:textbox
>
</
td
>
</
tr
>
<
tr
>
<
td
> </
td
>
<
td
>
<
asp:checkbox
id
=
"IsDefault"
cssclass
=
"input"
text
=
"Set As Default"
runat
=
"server"
/>
</
td
>
</
tr
>
<
tr
>
<
td
colspan
=
"2"
> </
td
>
</
tr
>
<
tr
>
<
td
colspan
=
"2"
class
=
"submit"
>
<
asp:Button
ID
=
"UpdateButton"
Text
=
"Update Record"
runat
=
"server"
CommandName
=
"Update"
Visible='<%# !(DataItem is Telerik.Web.UI.GridInsertionObject) %>'></
asp:Button
>
<
asp:Button
ID
=
"InsertButton"
Text
=
"Add Record"
runat
=
"server"
CommandName
=
"PerformInsert"
Visible='<%# DataItem is Telerik.Web.UI.GridInsertionObject %>'></
asp:Button
>
<
asp:Button
ID
=
"btnCancel"
Text
=
"Cancel"
runat
=
"server"
CausesValidation
=
"False"
CommandName
=
"Cancel"
></
asp:Button
>
</
td
>
</
tr
>
</
table
>
...control code-behind:
using
System;
using
System.Collections.Generic;
using
System.ComponentModel.DataAnnotations;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
DataAccess.Model;
using
DataAccess.Validation;
using
Proxy.Data;
using
Telerik.Web.UI;
public
partial
class
Controls_EditConfigSMTP : System.Web.UI.UserControl
{
private
object
_dataItem =
null
;
public
object
DataItem
{
get
{
return
this
._dataItem; }
set
{
this
._dataItem = value; }
}
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!Page.IsPostBack)
{
if
(
this
.DataItem !=
null
)
{
ConfigSMTP entity = (ConfigSMTP)
this
.DataItem;
if
(entity.IsDefault == 1)
this
.IsDefault.Checked =
true
;
}
}
}
}
So, there are a few issues.
Firstly, clicking "edit" in a row doesn't yield a modal popup, it's inline with the record. I can live without that and it's the least of my problems, but it'd be nice to have since I was doing it that way prior to switching the project from stock to the RadControls.
The biggest issue is that while the Insert, Update, and Delete commands are firing, the GridEditableItem is always null. Since I'm never able to access it, none of the commands actually work. The only difference from the example is that I'm binding entities, not a DataTable...which I figured I could safely assume works the same? The entities are "self-tracking" and the initial RadGrid binding is working as expected. I'm able to bind, page, and sort in other RadGrids in the project which don't require editing.
Any ideas? Thanks!