2010-10-26 4 views
1

J'ai trouvé du code pour exporter un datatable pour exceler, mais je n'arrive pas à comprendre comment obtenir le contrôleur pour retourner les résultats.Comment faire pour exécuter ce code à partir d'un contrôleur?

des suggestions? voici le code

dt = city.GetAllCity();//your datatable 
    string attachment = "attachment; filename=city.xls"; 
    Response.ClearContent(); 
    Response.AddHeader("content-disposition", attachment); 
    Response.ContentType = "application/vnd.ms-excel"; 
    string tab = ""; 
    foreach (DataColumn dc in dt.Columns) 
    { 
     Response.Write(tab + dc.ColumnName); 
     tab = "\t"; 
    } 
    Response.Write("\n"); 
    int i; 
    foreach (DataRow dr in dt.Rows) 
    { 
     tab = ""; 
     for (i = 0; i < dt.Columns.Count; i++) 
     { 
      Response.Write(tab + dr[i].ToString()); 
      tab = "\t"; 
     } 
     Response.Write("\n"); 
    } 
    Response.End(); 

Répondre

0

Vous pouvez simplement retourner FileStreamResult:

public ActionResult DownloadCities() 
{ 
    dt = city.GetAllCity();//your datatable 
    string attachment = "attachment; filename=city.xls"; 

    var writer = new StreamWriter(new MemoryStream()); 

    string tab = ""; 
    foreach (DataColumn dc in dt.Columns) 
    { 
     writer.Write(tab + dc.ColumnName); 
     tab = "\t"; 
    } 
    writer.Write("\n"); 
    int i; 
    foreach (DataRow dr in dt.Rows) 
    { 
     tab = ""; 
     for (i = 0; i < dt.Columns.Count; i++) 
     { 
      writer.Write(tab + dr[i]); 
      tab = "\t"; 
     } 
     writer.Write("\n"); 
    } 

    return File(writer.BaseStream, "application/vnd.ms-excel", "city.xls"); 
} 
Questions connexes