This is a migrated thread and some comments may be shown as answers.

Radgrid export in Custom Control

1 Answer 186 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Gooya
Top achievements
Rank 2
Gooya asked on 19 Dec 2012, 11:34 AM
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:

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: 

[HttpException (0x80004005): The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).]
   System.Web.UI.ControlCollection.Add(Control child) +9601391
   Telerik.Sitefinity.Web.SitefinityRequiredControls.Page_PreRenderComplete(Object sender, EventArgs e) +521
   System.EventHandler.Invoke(Object sender, EventArgs e) +0
   System.Web.UI.Page.OnPreRenderComplete(EventArgs e) +121
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1155


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.

1 Answer, 1 is accepted

Sort by
0
Kostadin
Telerik team
answered on 21 Dec 2012, 03:34 PM
Hi Mitja,

If you have any code blocks you can enclose them using telerik:RadCodeBlock tag. Additionally I noticed that your grid is ajaxified. Note that the exporting feature works only with regular postbacks. This means, that the asynchronous postback should be canceled when performing an export. All the best,
Kostadin
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
Tags
Grid
Asked by
Gooya
Top achievements
Rank 2
Answers by
Kostadin
Telerik team
Share this question
or