Accessing an Embedded Resource UserControl from a Embedded Resource Usercontrol??
I have a Usercontrol that inherits from SimpleView that has a RadGrid control in it. The RadGrid uses a UserControl as an edit Form. How can I load the control into the RadGrid EditFormSettings?
I also am trying to use embedded user controls with other controls such as RadWindow. Below is the LocationManager class that manages the Primary page as a user control.
[RequireScriptManager]
public
class
LocationManager : SimpleView
protected
override
void
InitializeControls(GenericContainer container)
LocationsGrid.NeedDataSource += LocationsGrid_NeedDataSource;
LocationsGrid.InsertCommand += LocationsGrid_InsertCommand;
LocationsGrid.UpdateCommand += LocationsGrid_UpdateCommand;
//LocationsGrid.MasterTableView.EditFormSettings.EditFormType = GridEditFormType.WebUserControl;
////LocationsGrid.MasterTableView.EditFormSettings.UserControlName = "BranchManagementModule.Resources.EditLocation.ascx";
//LocationsGrid.MasterTableView.EditFormSettings.EditColumn.ButtonType = GridButtonColumnType.LinkButton;
//LocationsGrid.MasterTableView.EditFormSettings.EditColumn.UniqueName = "editColumn1";
//LocationsGrid.MasterTableView.EditFormSettings.EditColumn.InsertText = "Add a new location";
void
LocationsGrid_UpdateCommand(
object
sender, GridCommandEventArgs e)
void
LocationsGrid_InsertCommand(
object
sender, GridCommandEventArgs e)
var item = (GridEditableItem)e.Item;
var userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID);
var db =
new
RegionalDataContext();
var location =
new
BranchLocation
BranchLocationId = Guid.NewGuid(),
BranchLocationName = (userControl.FindControl(
"txtLocationName"
)
as
TextBox).Text,
AddressInfo = (userControl.FindControl(
"txtAddressInfo"
)
as
TextBox).Text
;
if
(
new
Guid((userControl.FindControl(
"ddlRegionalOffice"
)
as
RadComboBox).SelectedValue) == Guid.Empty)
var region =
new
Region RegionId = Guid.NewGuid(), RegionName = location.BranchLocationName ;
location.RegionId = region.RegionId;
db.Regions.InsertOnSubmit(region);
else
location.RegionId =
new
Guid((userControl.FindControl(
"ddlRegionalOffice"
)
as
RadComboBox).SelectedValue);
db.BranchLocations.InsertOnSubmit(location);
db.SubmitChanges();
e.Canceled =
false
;
void
LocationsGrid_NeedDataSource(
object
sender, GridNeedDataSourceEventArgs e)
var module =
new
BranchManagementModule();
LocationsGrid.DataSource = module.GetLocationsAsQueryable();
protected
override
string
LayoutTemplateName
get
return
"BranchManagementModule.Resources.LocationManagerView.ascx"
;
protected
virtual
RadGrid LocationsGrid
get
return
Container.GetControl<RadGrid>(
"RadGrid1"
,
true
);
<%@ Control Language="C#" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI"
TagPrefix="sf" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.Backend"
TagPrefix="sf" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI"
TagPrefix="sitefinity" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.ControlDesign" %>
<
div
class
=
"sfWrapper"
>
<
h1
class
=
"sfBreadCrumb"
>
Regional Offices Manager</
h1
>
<
span
class
=
"sfBreadCrumbForward"
><
a
href
=
"Regions"
>Manage Regions</
a
></
span
>
<
span
class
=
"sfBreadCrumbForward"
><
a
href
=
"Managers"
>Manage Regional Managers</
a
></
span
>
<
div
class
=
"sfMain sfClearfix"
>
<
div
class
=
"sfContent"
>
<
telerik:RadAjaxLoadingPanel
ID
=
"RadAjaxLoadingPanel1"
runat
=
"server"
Skin
=
"Sitefinity"
/>
<
telerik:RadAjaxPanel
ID
=
"radAjaxPanel1"
Width
=
"100%"
Height
=
"100%"
runat
=
"server"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
HorizontalAlign
=
"NotSet"
>
<
telerik:RadGrid
ID
=
"RadGrid1"
runat
=
"server"
GridLines
=
"None"
AutoGenerateColumns
=
"false"
ShowStatusBar
=
"True"
Skin
=
"Sitefinity"
ShowFooter
=
"True"
>
<
MasterTableView
commanditemdisplay
=
"Top"
datakeynames
=
"BranchLocationId"
>
<
CommandItemSettings
ExportToPdfText
=
"Export to Pdf"
AddNewRecordText
=
"Add Prinipal Profile"
>
</
CommandItemSettings
>
<
CommandItemTemplate
>
<
asp:LinkButton
ID
=
"lnkAddNewProfile"
runat
=
"server"
Font-Bold
=
"true"
CausesValidation
=
"false"
CommandName
=
"InitInsert"
Text
=
"Add a new location"
/>
</
CommandItemTemplate
>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"BranchLocationId"
HeaderText
=
"Location Id"
ReadOnly
=
"True"
SortExpression
=
"BranchLocationId"
UniqueName
=
"BranchLocationId"
DataType
=
"System.Guid"
Visible
=
"False"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"Region.RegionId"
HeaderText
=
"Region Id"
ReadOnly
=
"True"
SortExpression
=
"Region.RegionId"
UniqueName
=
"RegionId"
DataType
=
"System.Guid"
Visible
=
"False"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"BranchLocationName"
HeaderText
=
"Location Name"
ReadOnly
=
"True"
SortExpression
=
"Location Name"
UniqueName
=
"BranchLocationName"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
DataField
=
"AddressInfo"
HeaderText
=
"Location Address"
ReadOnly
=
"True"
SortExpression
=
"Office Location"
UniqueName
=
"AddressInfo"
>
</
telerik:GridBoundColumn
>
<
telerik:GridEditCommandColumn
HeaderText
=
"Edit Location"
EditText
=
"Edit this Location"
>
</
telerik:GridEditCommandColumn
>
</
Columns
>
<
EditFormSettings
UserControlName
=
"BranchManagementModule.Resources.EditLocation.ascx"
EditFormType
=
"WebUserControl"
>
<
EditColumn
UniqueName
=
"editCommandColumn1"
InsertText
=
"Add a new Location"
/>
</
EditFormSettings
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
telerik:RadAjaxPanel
>
</
div
>
</
div
>
</
div
>
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Sitefinity.Services;
using
Telerik.Sitefinity.Web.UI;
using
Telerik.Web.UI;
namespace
BranchManagementModule.Modules
public
class
EditLocationControl: SimpleView
private
object
_dataItem =
null
;
protected
object
DataItem
get
return
this
._dataItem;
set
this
._dataItem = value;
protected
override
void
InitializeControls(GenericContainer container)
DataBinding +=
new
EventHandler(EditLocationControlModule_DataBinding);
void
EditLocationControlModule_DataBinding(
object
sender, EventArgs e)
var db =
new
RegionalDataContext();
var noRegion =
new
RadComboBoxItem(
"None - [Creates new Region]"
, Guid.Empty.ToString());
DdlRegionalOffice.Items.Add(noRegion);
foreach
(Region region
in
db.Regions.OrderBy(s => s.RegionName))
var regionItem =
new
RadComboBoxItem(region.RegionName,
region.RegionId.ToString());
try
if
(DataBinder.Eval(DataItem,
"Region.RegionId"
) !=
null
&&
new
Guid(DataBinder.Eval(DataItem,
"Region.RegionId"
).ToString()) == region.RegionId)
regionItem.Selected =
true
;
catch
(Exception ex)
DdlRegionalOffice.Items.Add(regionItem);
protected
override
string
LayoutTemplateName
get
return
"BranchManagementModule.Resources.EditLocationControlView.ascx"
;
protected
virtual
TextBox TxtLocationName
get
return
Container.GetControl<TextBox>(
"txtLocationName"
,
true
);
protected
virtual
TextBox TxtAddressInfo
get
return
Container.GetControl<TextBox>(
"txtAddressInfo"
,
true
);
protected
virtual
RadComboBox DdlRegionalOffice
get
return
Container.GetControl<RadComboBox>(
"ddlRegionalOffice"
,
true
);
<%@ Control Language=
"C#"
%>
<%@ Register TagPrefix=
"telerik"
Namespace=
"Telerik.Web.UI"
%>
<%@ Import Namespace=
"Telerik.Web.UI"
%>
<style type=
"text/css"
>
.style1
width: 100%;
.style2
color: #800000;
font-family: Arial, Helvetica, sans-serif;
font-size: xx-small;
.style3
font-family: Arial, Helvetica, sans-serif;
font-size: small;
color: #800000;
</style>
<table
class
=
"style1"
>
<tr>
<td colspan=
"3"
align=
"left"
>
<span
class
=
"style3"
><strong>If
this
is
a stand alone location, Choose None from the Region drop-down. This will create a blank region
using
this
locations name. A office must belong to a region,
as
the region contains the information that
is
displayed
in
the
public
site.</strong></span>
</td>
</tr>
<tr>
<td>
<strong>Office Location:<br />
<asp:TextBox ID=
"txtLocationName"
Text=
'<%# DataBinder.Eval(DataItem, "BranchLocationName") %>'
Width=
"250px"
MaxLength=
"100"
runat=
"server"
></asp:TextBox>
</strong>
</td>
<td>
<strong>Office Address: <span
class
=
"style2"
>(
for
locations map)</span><br />
</strong>
<asp:TextBox ID=
"txtAddressInfo"
Text=
'<%# DataBinder.Eval(DataItem, "AddressInfo") %>'
Width=
"250px"
MaxLength=
"100"
runat=
"server"
></asp:TextBox>
</td>
<td>
<strong>Belongs to Region: <span
class
=
"style2"
>(Region
is
required.)</span><br />
<telerik:RadComboBox ID=
"ddlRegionalOffice"
runat=
"server"
>
</telerik:RadComboBox>
</strong>
</td>
</tr>
<tr>
<td colspan=
"3"
align=
"right"
>
<asp:Button ID=
"btnUpdate"
Text=
"Update"
runat=
"server"
CommandName=
"Update"
Visible=
'<%# !(DataItem is GridInsertionObject) %>'
>
</asp:Button>
<asp:Button ID=
"btnInsert"
Text=
"Insert"
runat=
"server"
CommandName=
"PerformInsert"
Visible=
'<%# DataItem is GridInsertionObject %>'
></asp:Button>
<asp:Button ID=
"btnCancel"
Text=
"Cancel"
runat=
"server"
CausesValidation=
"False"
CommandName=
"Cancel"
></asp:Button>
</td>
</tr>
</table>
Digging Further I have found EmbeddedTemplateAttribute but I am not sure how it works as it doesn't do anything when used as an attribute on the LayoutTemplatePath override
any help??
Hi John Tolar,
First, I want to apologise for the delay.
There is a difference between user controls and custom controls, and you could not have possibly created a user control that inherits from SimpleView, because it doesn't inherit UserControl. It is very important to understand the difference.
The RadGrid documentation states that you cannot load an edit form from an embedded template; it can be loaded as inner template (declaratively) or as user control.
RadWindow can be used as a controls container. It is an iframe, and as such, can open urls and embed them within your page. The effect you are referring to can be achieved if you had a page and pass it as the NavigateUrl of your dialog. The behaviour could be controlled with querystring parameters.