Exportar um conjunto de dados para se destacar e aumentar uma caixa de diálogo de download de arquivos de um método da web ASP.NET

StackOverflow https://stackoverflow.com/questions/3425840

Pergunta

Estou usando o seguinte código para exportar um conjunto de dados para uma planilha do Excel.

[WebMethod]
    public static void ExporttoExcel()
    {
        DataSet ds;
       productfactory pf=new productfactory();
        ds = pf.getproducts();
        HttpResponse response = HttpContext.Current.Response;

        // first let's clean up the response.object
        response.Clear();
        response.Charset = "";
        response.ContentEncoding = System.Text.Encoding.Default;

        // set the response mime type for excel
        response.ContentType = "application/vnd.ms-excel";
        response.AddHeader("Content-Disposition", "attachment;filename=\"products.xls\"");

        // create a string writer
        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
                // instantiate a datagrid
                DataGrid dg = new DataGrid();                    
                dg.DataSource = ds.Tables[0];
                dg.DataBind();
                dg.RenderControl(htw);
                string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\products.xls";                    
                response.Write(sw.ToString());
               // response.End();

            }
        }       
    }

O problema é que ele não está aumentando o download de arquivos e, portanto, nenhuma exportação está ocorrendo. O mesmo código funciona bem em um método normal. Mas com o método da web, ele não está funcionando.

Foi útil?

Solução

Sugiro fazer um httphandler terminando em Ashx e colocar dentro dele seu código que crie o arquivo do Excel.

Em seguida, chame -o do seu código JavaScript como esse.

document.location.href = "ExporttoExcel.ashx";

Outras dicas

O problema é que os webMethods não foram projetados para permitir que você interaja com o objeto de resposta (evidente, pois não estava disponível e você teve que usar httpcontext.current.pronse para alcançá -lo). Os webMethods são projetados para serem BlackBox para o usuário. Eles executarão e acionarão e/ou retornarão um valor.

Talvez você possa nos dar uma idéia melhor do que você está tentando realizar e podemos sugerir uma solução alternativa.

você pode usar para criar um iframe dinâmico com o URL definido para o manipulador da web para gerar o Excel, isso aumentará o download do arquivo sem postar a página atual.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top