Export a data set to Excel and raise a file download dialog from an asp.net web method

与世无争的帅哥 提交于 2019-12-22 15:53:08

问题


I am using the following code to export a data set to an Excel sheet.

[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();

            }
        }       
    }

The problem is that it's not raising file download and hence no export is taking place. The same code works fine in a normal method. But with the web method it's not working.


回答1:


I suggest to make an HttpHandler ending in ashx, and place inside him your code that create the excel file.

then call it from your javascript code like that.

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



回答2:


The problem is that WebMethods are not designed to allow you to interact with the Response object (evident in that it wasn't available and you had to use HttpContext.Current.Response to get to it). WebMethods are designed to be blackbox to the user. They will perform and action and/or return a value.

Perhaps you can give us a better idea of what you are trying to accomplish and we can suggest an alternate solution.




回答3:


u can use to create a dynamic iframe with URL set to the Web Handler to generate the Excel this will raise the file download with out posting the current page.



来源:https://stackoverflow.com/questions/3425840/export-a-data-set-to-excel-and-raise-a-file-download-dialog-from-an-asp-net-web

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!