Экспортируйте набор данных в Excel и откройте диалоговое окно загрузки файла из веб-метода asp.net. - PullRequest
2 голосов
/ 06 августа 2010

Я использую следующий код для экспорта набора данных в лист 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();

            }
        }       
    }

Проблема заключается в том, что это не приводит к увеличению загрузки файла и, следовательно, экспорт не выполняется.Тот же код работает нормально в обычном методе.Но с веб-методом это не работает.

Ответы [ 3 ]

2 голосов
/ 06 августа 2010

Я предлагаю сделать HttpHandler, оканчивающийся на ashx, и поместить в него свой код, который создает файл excel.

, а затем вызвать его из своего кода JavaScript следующим образом.

document.location.href = "ExporttoExcel.ashx";
1 голос
/ 06 августа 2010

Проблема в том, что WebMethods не предназначены для того, чтобы позволить вам взаимодействовать с объектом Response (очевидно, что он был недоступен, и вам пришлось использовать HttpContext.Current.Response, чтобы добраться до него). WebMethods предназначены для пользователя как черный ящик. Они будут выполнять и действие и / или возвращать значение.

Возможно, вы сможете дать нам лучшее представление о том, чего вы пытаетесь достичь, и мы можем предложить альтернативное решение.

0 голосов
/ 16 января 2011

вы можете использовать для создания динамического iframe с URL-адресом, установленным в веб-обработчике, для генерации Excel, что приведет к загрузке файла без публикации текущей страницы.

...