调用 DevExpress ASPxGridViewExporter.WriteXlsxToResponse 方法时出现错误"The thread was being aborted."



我正在使用带有 ASP.NET GridView 和 C# 的 DevExpress 2015。我需要将数据从 GridView 导出为 .xls 或 .xlsx 格式。执行 DevExpress ASPxGridViewExporter.WriteXlsxToResponse 方法时,将引发异常,并显示消息:"线程正在中止"。我已经研究过了,这似乎是响应重定向方法的问题;解决方案是将false作为 bool 参数值的值传递。

但是,我需要帮助来解决 DevExpress ASPxGridViewExporter.WriteXlsxToResponse 方法的此错误。

.ASPX

<div class="form-group">    
    <dx:ASPxGridView ID="Grid"  ClientInstanceName="Grid" runat="server" Theme="Office2010Silver" EnableTheming="True" style="width: calc(100% - 70px); border-radius:4px; -o-border-radius:4px; -moz-border-radius:4px; -webkit-border-radius:4px;" AutoGenerateColumns="False" KeyFieldName="Codigo" OnSelectionChanged="gdvVale_SelectionChanged" EnableCallBacks="false" OnHtmlDataCellPrepared="gdvVale_HtmlDataCellPrepared">
    <SettingsPager PageSize="100" >
        <Summary AllPagesText="Páginas: {0} - {1} ({2} itens)" EmptyText="Sem dados para paginar" Text="Página {0} de {1} ({2} itens)" />
    </SettingsPager>
    <Settings ShowFilterRow="True" ShowGroupPanel="True" VerticalScrollableHeight="200" VerticalScrollBarMode="Auto" VerticalScrollBarStyle="Standard" ShowHeaderFilterButton="true" />
    <SettingsBehavior AllowSelectByRowClick="True" AllowSelectSingleRowOnly="True" ColumnResizeMode="NextColumn" AutoExpandAllGroups="true" ProcessSelectionChangedOnServer="true" />
    <SettingsDataSecurity AllowDelete="False" AllowEdit="False" AllowInsert="False" />
    <SettingsText GroupPanel="Arraste a coluna para agrupar os dados" />
    <Columns>            
            <dx:GridViewDataTextColumn FieldName="Codigo" Caption="Codigo" VisibleIndex="0" Visible="false" Width="10%">
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn FieldName="Pedido" Caption="Pedido" VisibleIndex="0" Width="5%">
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn FieldName="DataLancamento" Caption="Data Lançamento" VisibleIndex="1" Width="10%" PropertiesTextEdit-DisplayFormatString="dd/MM/yyyy HH:mm">
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn FieldName="Cliente.Razao_social" Caption="Cliente" VisibleIndex="2" Width="35%">
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn FieldName="Representante" Caption="Representante" VisibleIndex="2" Width="25%">
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn FieldName="DataBaixa" Caption="Data Baixa" VisibleIndex="3" Width="10%" PropertiesTextEdit-DisplayFormatString="dd/MM/yyyy HH:mm">
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn FieldName="Status" Caption="Status" VisibleIndex="4" Width="10%">
            </dx:GridViewDataTextColumn>
            <dx:GridViewDataTextColumn FieldName="ValorPedido" Caption="Valor" VisibleIndex="5" Width="10%">
            </dx:GridViewDataTextColumn>
        </Columns> 
        <Settings ShowGroupPanel="False" ShowFooter="True" ShowGroupFooter="VisibleIfExpanded" />
        <TotalSummary>                                    
            <dx:ASPxSummaryItem FieldName="Pedido" SummaryType="Count" DisplayFormat="n0" ShowInColumn="Pedido" />
            <dx:ASPxSummaryItem FieldName="ValorPedido" SummaryType="Sum" DisplayFormat="c2"/> 
        </TotalSummary>
    </dx:ASPxGridView>
    <dx:ASPxGridViewExporter ID="ASPxGridViewExporter1" runat="server" GridViewID="Grid" Landscape="false" ExportEmptyDetailGrid="true" > 
        <Styles>
            <Header Font-Size="X-Small" Font-Names="Calibri (Corpo)"></Header>
            <Cell Font-Size="X-Small" Font-Names="Calibri (Corpo)" ></Cell>
            <GroupRow Font-Size="X-Small" Font-Names="Calibri (Corpo)"></GroupRow>
        </Styles>
    </dx:ASPxGridViewExporter>
</div>
<asp:LinkButton ID="btn_excel_xlsx" CssClass="btn btn-app" runat="server" OnClick="btn_excel_xlsx_Click" TabIndex="103" ToolTip="Exportar Arquivo em Excel XLSX">
    <i class="fa fa-file-excel-o"></i> Exportar XLSX
</asp:LinkButton>

C#

protected void btn_excel_xlsx_Click(object sender, EventArgs e)
{
    try
    {         
            ASPxGridViewExporter1.WriteXlsxToResponse();
    }
    catch (Exception err)
    {
        this.EscreverMensagemErrorAjax(err.Message);
        UpdatePanelGrid.Update();
    }
}

大概ASPxGridViewExporter.WriteXlsxToResponse方法调用HttpResponse.End方法。 HttpResponse.End方法抛出ThreadAbortException。 这是设计使然,您无法抓住ThreadAbortException. 相反,应用程序应该在调用 HttpResponse.End 之前执行所需的任何操作,并让ThreadAbortException终止当前请求。

相关内容

最新更新