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
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.
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.