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.