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

Issue while clicking on button.(PDF Generation implemented in the grid)

1 Answer 105 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Joby
Top achievements
Rank 1
Joby asked on 28 Jul 2011, 06:10 AM

Hi,

      My requirement is to generate PDF while clicking on image button in the grid.In the same page I have one search button(btnSearch). I have implemented OnNeedDataSource event.While clicking on search button I want to rebind the radgrid but I am getting this error “ErrorDetails : System.ArgumentException: Cannot unregister UpdatePanel with ID 'upnlPdf' since it was not registered with the ScriptManager. This might occur if the UpdatePanel was removed from the control tree and later added again, which is not supported. Parameter name: updatePanel at System.Web.UI.PageRequestManager.UnregisterUpdatePanel(UpdatePanel updatePanel) at System.Web.UI.ScriptManager.System.Web.UI.IScriptManagerInternal.UnregisterUpdatePanel(UpdatePanel updatePanel) at System.Web.UI.UpdatePanel.OnUnload(EventArgs e) at System.Web.UI.Control.UnloadRecursive(Boolean dispose) at System.Web.UI.Control.UnloadRecursive(Boolean dispose) at System.Web.UI.Control.UnloadRecursive(Boolean dispose) at System.Web.UI.Control.UnloadRecursive(Boolean dispose) at System.Web.UI.Control.RemovedControl(Control control) at System.Web.UI.ControlCollection.RemoveAt(Int32 index) at System.Web.UI.ControlCollection.Clear() at System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) at System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) at System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) at System.Web.UI.WebControls.DataBoundControl.PerformSelect() at Telerik.Web.UI.GridTableView.PerformSelect() at System.Web.UI.WebControls.BaseDataBoundControl.DataBind() at Telerik.Web.UI.GridTableView.DataBind() at Telerik.Web.UI.RadGrid.DataBind() at Telerik.Web.UI.RadGrid.AutoDataBind(GridRebindReason rebindReason) at Telerik.Web.UI.RadGrid.Rebind() at btnSearch_Click(Object sender, EventArgs e)”.

In aspx Page

===================================================================

<%@ Page Language="C#" MasterPageFile="~/ATMaster.Master" AutoEventWireup="true">

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

    <asp:UpdatePanel runat="server" ID="upnlSecurityDoc" UpdateMode="Conditional">

        <ContentTemplate>

<telerik:RadGrid ID="RadGrid1" runat="server" Width="1050px" TabIndex="5" Height="350px"

                                        AutoGenerateColumns="False" ForeColor="#333333" PageSize="10" AllowFilteringByColumn="false"

                                        Skin="Outlook" AllowPaging="true" OnNeedDataSource=" RadGrid1_NeedDataSource"

                                        BorderWidth="1px" BorderColor="#cccccc" OnItemCommand=" RadGrid1_ItemCommand"

                                        >

                                        <HeaderContextMenu EnableAutoScroll="True">

                                        </HeaderContextMenu>

                                        <GroupingSettings CaseSensitive="false" />

                                        <MasterTableView PagerStyle-AlwaysVisible="true">

                                            <CommandItemSettings ExportToPdfText="Export to Pdf" />

                                            <Columns>

                                                <telerik:GridTemplateColumn HeaderText="SlNo" AllowFiltering="false">

                                                    <HeaderStyle HorizontalAlign="Left" Font-Bold="true" Width="50px" />

                                                    <ItemStyle HorizontalAlign="Left" Width="50px"></ItemStyle>

                                                    <ItemTemplate>

                                                        <%# this.gvPendingOrder.CurrentPageIndex * this.gvPendingOrder.PageSize + Container.ItemIndex + 1%>

                                                    </ItemTemplate>

                                                </telerik:GridTemplateColumn>

                                               

<telerik:GridTemplateColumn HeaderText="PDF">

                                                    <HeaderStyle Width="50px" />

                                                    <ItemStyle Width="50px" />

                                                    <ItemTemplate>

                                                        <asp:UpdatePanel runat="server" ID="upnlPdf">

                                                            <ContentTemplate>

                                                                <asp:ImageButton runat="server" ID="imgbtnPdf" AlternateText="Security Document Print"

                                                                    CommandArgument='<%# Eval("OrderId") %>' ImageUrl="../Images/pdf_icon.gif" ImageAlign="Middle"

                                                                    CommandName="Generate" ToolTip='<%# "Document" + Eval("OrderNo") + "." %>' />

                                                            </ContentTemplate>

                                                            <Triggers>

                                                                <asp:PostBackTrigger ControlID="imgbtnPdf" />                                                            </Triggers>

                                                        </asp:UpdatePanel>

                                                    </ItemTemplate>

                                                </telerik:GridTemplateColumn>

                                            </Columns>

                                        </MasterTableView>

                                        <ClientSettings EnableRowHoverStyle="true">

                                            <Scrolling AllowScroll="True" UseStaticHeaders="True" SaveScrollPosition="True">

                                            </Scrolling>

                                        </ClientSettings>

                                    </telerik:RadGrid>

</ContentTemplate>

    </asp:UpdatePanel>

</asp:Content>

In code behind

protected void RadGrid1_ItemCommand(object source, GridCommandEventArgs e)

        {

            try

            {

                if (e.CommandName == "Generate")

                {

                    string strOrderId = string.Empty;

                    strOrderId = e.CommandArgument.ToString();

                    LocalReport localReport = new LocalReport();

                localReport.ReportPath = Server.MapPath("~/Reports/report1.rdlc");

                localReport.EnableHyperlinks = true;

                localReport.EnableExternalImages = true;

                DataSet dataset1 = new DataSet();

                DataTable datatable1 =GetDetails(strOrderId);

                datatable1.TableName = "Document";

                dataset1.Tables.Add(datatable1.Copy());

                ReportParameter[] @params = new ReportParameter[4];

                localReport.SetParameters(@params);

                //A method that returns a collection for our report Note: A report can have multiple data sources

                localReport.DataSources.Add(new ReportDataSource("dataset", dataset1.Tables[0]));

                string reportType = "pdf";

                string mimeType = string.Empty;

                string encoding = string.Empty;

                string fileNameExtension = string.Empty;

                string deviceInfo = "<DeviceInfo>" + " <OutputFormat>pdf</OutputFormat>" + "</DeviceInfo>";

                Warning[] warnings = null;

                string[] streams = null;

                byte[] renderedBytes = null;

                //Render the report

                renderedBytes = localReport.Render(reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);

                //Clear the response stream and write the bytes to the outputstream

                //Set content-disposition to "attachment" so that user is prompted to take an action on the file (open or save)

                Response.Clear();

                Response.ContentType = mimeType;

                strOrderId = "Doc" + strOrderId;

                Response.AddHeader("content-disposition", ("attachment; filename=" + strOrderId + ".pdf"));

                Response.BinaryWrite(renderedBytes);

                Response.End();                }

            }

            catch (Exception ex)

            {

                lblMessage.Text = objUtl.GetErrorMessage(ex, this);

                lblMessage.Visible = true;

            }

        }

1 Answer, 1 is accepted

Sort by
0
Daniel
Telerik team
answered on 02 Aug 2011, 12:06 PM
Hello Joby,

I recommend that you remove the nested Update panels as you already have another one that wraps the whole content.
Another option would be to use our ajax controls - RadAjaxPanel or RadAjaxManager.

Here is a live demo that shows how to ajaxify RadGrid with RadAjaxManager when exporting: Export to PDF

Regards,
Daniel
the Telerik team

Browse the vast support resources we have to jump start your development with RadControls for ASP.NET AJAX. See how to integrate our AJAX controls seamlessly in SharePoint 2007/2010 visiting our common SharePoint portal.

Tags
Grid
Asked by
Joby
Top achievements
Rank 1
Answers by
Daniel
Telerik team
Share this question
or