Ошибка при нажатии кнопки после реализации PDF Generation на Radgrid - PullRequest
0 голосов
/ 28 июля 2011

Мое требование - генерировать PDF, нажимая кнопку изображения в сетке. На этой же странице у меня есть одна кнопка поиска (btnSearch). Я реализовал событие OnNeedDataSource. Когда я нажимаю на кнопку поиска, я хочу перепривязать радгрид, но получаю сообщение об ошибке «ErrorDetails: System.ArgumentException: Невозможно отменить регистрацию UpdatePanel с идентификатором« upnlPdf », так как он не был зарегистрирован в ScriptManager. Это может произойти, если UpdatePanel был удален из дерева элементов управления, а затем снова добавлен, что не поддерживается. Имя параметра: updatePanel в System.Web.UI.PageRequestManager.UnregisterUpdatePanel (UpdatePanel updatePanel) в System.Web.UI.ScriptManager.System.Web.UI.IScriptManagerInternal.UnregisterUpdatePanel (UpdatePanel updatePanelUan.Panel.Panel. (EventArgs e) в System.Web.UI.Control.UnloadRecursive (логическое удаление) в System.Web.UI.Control.UnloadRecursive (логическое удаление) в System.Web.UI.Control.UnloadRecursive (логическое удаление) в System.Web .UI.Control.UnloadRecursive (логическое удаление) в System.Web.UI.Control.RemovedControl (элемент управления) в System.Web.UI.ControlCollection.RemoveAt (индекс Int32) в System.Web.UI.ControlCollection.Clear () в System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding (IEnumerable data) в System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback (IEnumerable data) в System.Web.UI.DataSbackViewSourceSelectSourceSelectSourceSelectSelectSec. System.Web.UI.WebControls.Dat aBoundControl.PerformSelect () в Telerik.Web.UI.GridTableView.PerformSelect () в System.Web.UI.WebControls.BaseDataBoundControl.DataBind () в Telerik.Web.UI.GridTableView.DataBind () в Telerik.Web.UI. RadGrid.DataBind () в Telerik.Web.UI.RadGrid.AutoDataBind (GridRebindReason rebindReason) в Telerik.Web.UI.RadGrid.Rebind () в btnSearch_Click (Отправитель объекта, EventArgs e) ».

На странице aspx

<%@ 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>

В коде позади

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 Ответ

0 голосов
/ 05 февраля 2012

Не знаю почему, но почему-то UpdatePanel дважды незарегистрирован в ScriptManger (это происходит и в методе RadGrid.Rebind (); ситуация, в которой я застрял), и во второй раз он незарегистрированный в ScriptManger ошибка «Невозможно отменить регистрацию UpdatePanel ...». Обходной путь - зарегистрировать UpdatePanel в ScriptManger где-то между двумя незарегистрированными событиями, используя отражение, например так:

protected void UpdatePanel_Unload(object sender, EventArgs e) { MethodInfo methodInfo = typeof(ScriptManager).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance) .Where(i => i.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel")).First(); methodInfo.Invoke(ScriptManager.GetCurrent(Page), new object[] { sender as UpdatePanel }); }

Вы должны добавить UpdatePanel_Unload к событию OnUnload UpdatePanel:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnUnload="UpdatePanel_Unload">

Это решение решило мою проблему, надеюсь, оно будет эффективным и для вас.

Вы можете найти полную информацию о проблеме здесь .

С уважением, Али

...