2010-08-06 5 views
0

J'essaye d'exporter un ensemble de données pour exceler la méthode page asp.net (webmethod) en utilisant le code suivant.Problème lors de l'exportation d'un ensemble de données pour exceller à partir d'une méthode web utilisant asp.net

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

      } 
     }  
    } 

code ci-dessus semble fonctionner ok sauf pour la chose que la boîte de dialogue de fichier de téléchargement ne s'ouvre pas à demander à l'utilisateur si « Enregistrer »/« Ouvrir » la boîte de dialogue et donc je ne vois pas la réponse en cours d'écriture dans un fichier. Au lieu de cela, je récupère les données dans une structure tabulaire HTML, lorsque j'ai vérifié la réponse dans Firebug.

S'il vous plaît quelqu'un pourrait-il m'aider avec?

Merci.

Répondre

0

Si vous pouvez obtenir vos données produit dans un DataTable, essayez ce qui suit à la place:

protected void ExportToExcel(DataTable myTable, string name) 
    { 
     //Set Response 
     Response.Clear(); 
     Response.AddHeader("content-disposition", "attachment; filename="+name+".xls"); 
     Response.Charset = ""; 
     Response.ContentType = "application/vnd.ms-excel"; 

     //Print columns headers 
     //manually create column headers 
     Response.Write("Column1" + "\t"); 
     Response.Write("Column2" + "\t"); 
     Response.Write("\n"); 

     foreach (DataRow row in myTable.Rows) // Loop over the rows. 
     { 
      Response.Write(row["column1_database_name"].ToString() + "\t"); 
      Response.Write(row["column2_database_name"].ToString() + "\t"); 
      Response.Write("\n"); 
     } 

     //End Response 
     Response.End(); 
    }