Hello
I created custom control to list some data from database. I used radgrid for this. Now everything works fine, except exporting.
When I click export button GvExpertise_ItemCommand is triggered and columns are set hidden. But after that exception is triggered:
Exception Details: System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
Source Error:
Stack Trace:
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929
Codefile:
Template:
ViewState is on, and radscriptmanager exists on page.
I created custom control to list some data from database. I used radgrid for this. Now everything works fine, except exporting.
When I click export button GvExpertise_ItemCommand is triggered and columns are set hidden. But after that exception is triggered:
The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.Exception Details: System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. |
Stack Trace:
|
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929
Codefile:
public
class
ExpertiseListView : SimpleView
{
#region control info
public
static
Guid GroupPageGuid =
new
Guid(
"6743bffb-7cce-4e5c-9d9e-fc7ff1fa5e73"
);
public
static
Guid PageGuid =
new
Guid(
"f0608080-5054-48b7-8218-a72ac6842e40"
);
public
static
string
TemplateName =
"ContactsFormModule.Resources.Backend.ExpertiseListView.ascx"
;
protected
override
string
LayoutTemplateName {
get
{
return
TemplateName; } }
#endregion
#region controls
protected
virtual
ITextControl LblTitle {
get
{
return
base
.Container.GetControl<ITextControl>(
"LblTitle"
,
true
); } }
protected
virtual
HyperLink BtnAdd {
get
{
return
base
.Container.GetControl<HyperLink>(
"BtnAdd"
,
true
); } }
protected
virtual
RadGrid GvExpertise {
get
{
return
base
.Container.GetControl<RadGrid>(
"GvExpertise"
,
true
); } }
#endregion
public
static
string
FieldName(
bool
isGeneral,
bool
isCompany)
{
if
(isGeneral && isCompany)
return
"..."
;
else
if
(isGeneral)
return
".."
;
else
if
(isCompany)
return
"."
;
else
return
string
.Empty;
}
protected
override
void
InitializeControls(GenericContainer container)
{
LblTitle.Text =
"Expertise"
;
LblAdd.Text =
"Dodaj"
;
//BtnAdd.NavigateUrl = App.WorkWith().Page(ExpertiseEditView.PageGuid).Get().GetFullUrl();
GvExpertise.NeedDataSource += GvExpertise_NeedDataSource;
GvExpertise.ItemCommand += GvExpertise_ItemCommand;
GvExpertise.ItemDataBound += GvExpertise_ItemDataBound;
}
void
GvExpertise_NeedDataSource(
object
sender, GridNeedDataSourceEventArgs e)
{
GvExpertise.DataSource =
new
ContactsManager().Expertises;
}
void
GvExpertise_ItemDataBound(
object
sender, GridItemEventArgs e)
{
if
(e.Item
is
GridDataItem)
{
((LinkButton)((GridDataItem)e.Item)[
"DeleteColumn2"
].Controls[0]).Text = ((Expertise)e.Item.DataItem).IsVisible ?
"skrij"
:
"prikaži"
;
((Literal)((GridDataItem)e.Item)[
"Field"
].Controls[0]).Text = FieldName(((Expertise)e.Item.DataItem).General,((Expertise)e.Item.DataItem).Company);
}
}
void
GvExpertise_ItemCommand(
object
sender, GridCommandEventArgs e)
{
if
(e.CommandName ==
"hide"
)
{
int
iId = (
int
)((GridDataItem)e.Item).GetDataKeyValue(
"Id"
);
ContactsManager dataContext =
new
ContactsManager();
Expertise expertise = dataContext.Expertises.FirstOrDefault(x => x.Id == iId);
expertise.IsVisible = !expertise.IsVisible;
dataContext.SaveChanges();
GvExpertise.DataSource =
new
ContactsManager().Expertises;
this
.GvExpertise.DataBind();
}
else
if
(e.CommandName == RadGrid.ExportToCsvCommandName || e.CommandName == RadGrid.ExportToExcelCommandName || e.CommandName == RadGrid.ExportToPdfCommandName)
{
GvExpertise.MasterTableView.Columns[3].Visible =
false
;
GvExpertise.MasterTableView.Columns[4].Visible =
false
;
}
}
}
Template:
<
div
class
=
"sfWorkArea"
>
<
div
class
=
"sfMessage sfGridViewMessage"
><
asp:Literal
id
=
"LblMessage"
runat
=
"server"
></
asp:Literal
></
div
>
<
div
>
<
div
class
=
"RadGrid RadGrid_Sitefinity rgTopOffset"
tabindex
=
"0"
>
<
telerik:RadAjaxManager
ID
=
"RadAjaxManager1"
runat
=
"server"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"RadGrid1"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"GvExpertise"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
</
telerik:RadAjaxManager
>
<
telerik:RadGrid
ID
=
"GvExpertise"
runat
=
"server"
AllowPaging
=
"True"
AllowSorting
=
"True"
AutoGenerateColumns
=
"False"
CellPadding
=
"0"
Width
=
"100%"
DataKeyNames
=
"Id"
GridLines
=
"None"
PageSize
=
"30"
EnableModelValidation
=
"True"
Skin
=
"Sitefinity"
>
<
ExportSettings
ExportOnlyData
=
"True"
IgnorePaging
=
"True"
OpenInNewWindow
=
"True"
HideStructureColumns
=
"true"
>
<
Excel
Format
=
"Biff"
></
Excel
>
<
Csv
ColumnDelimiter
=
"Semicolon"
RowDelimiter
=
"NewLine"
EncloseDataWithQuotes
=
"true"
FileExtension
=
".csv"
/>
</
ExportSettings
>
<
MasterTableView
DataKeyNames
=
"Id"
CommandItemDisplay
=
"Top"
>
<
CommandItemSettings
ShowAddNewRecordButton
=
"false"
ShowExportToExcelButton
=
"true"
ShowExportToCsvButton
=
"true"
/>
<
Columns
>
<
telerik:GridBoundColumn
DataField
=
"Id"
HeaderText
=
"Id"
SortExpression
=
"Id"
/>
<
telerik:GridBoundColumn
DataField
=
"Description"
HeaderText
=
"Strokovno znanje"
SortExpression
=
"Description"
/>
<
telerik:GridTemplateColumn
DataField
=
"Company,General"
SortExpression
=
"Company,General"
UniqueName
=
"Field"
><
ItemTemplate
><
asp:Literal
runat
=
"server"
ID
=
"LblField"
/></
ItemTemplate
></
telerik:GridTemplateColumn
>
<
telerik:GridHyperLinkColumn
DataNavigateUrlFields
=
"Id"
/>
<
telerik:GridButtonColumn
Text
=
''
ButtonType
=
"LinkButton"
CommandName
=
"hide"
UniqueName
=
"DeleteColumn2"
><
HeaderStyle
Width
=
"20px"
></
HeaderStyle
></
telerik:GridButtonColumn
>
</
Columns
>
</
MasterTableView
>
</
telerik:RadGrid
>
</
div
>
</
div
>
</
div
>
ViewState is on, and radscriptmanager exists on page.