2016-01-09 8 views
-5

Я пытаюсь заставить этот код работать, чтобы возвращать файл excel, но я получаю исключение из памяти. любая идея, как я могу ее решить. то очевидно, что есть способ много записей в there.It работают в другом местеasp.net mvc out of memory error

  GridView gv = new GridView(); 
      List<ExportReportInvoice> list = _commonSer.ExportReportInvoice(data.OrderByDescending(m=>m.MediaPlanBillingInvoiceId)); 
      gv.DataSource = list; 
      gv.DataBind(); 
      Response.ClearContent(); 
      Response.Buffer = true; 
      Response.AddHeader("content-disposition", "attachment; filename=Sheet.xls"); 
      Response.ContentType = "application/ms-excel"; 
      Response.Charset = ""; 
      StringWriter sw = new StringWriter(); 
      HtmlTextWriter htw = new HtmlTextWriter(sw); 
      gv.RenderControl(htw); 
      Response.Output.Write(sw.ToString()); 
      Response.Flush(); 
      Response.End(); 



     public List<ExportReportInvoice> ExportReportInvoice(IOrderedQueryable<MediaPlanRO> roslist) 
     { 
     if (roslist.Count() > 0) 
     { 
      List<ExportReportInvoice> repo = new List<ExportReportInvoice> { }; 
      foreach (var r in roslist) 
      { 
       ExportReportInvoice rep = new ExportReportInvoice(); 
       rep.RONo = r.RONo; 
       rep.InvStatus = r.IsInvoiceGenerated == true ? "Generated" : "Pending"; 
       rep.CampaignNo = r.MediaPlan.Campaign.CampaignId; 
       rep.InsDate = string.Format("{0:dd MMM yyyy}", r.MediaPlanROPrints.FirstOrDefault().MediaPlanPrint.StartDate); 
       rep.Client = r.MediaPlan.Campaign.Company.Name; 


       rep.Sublient = C_SubClients; 
       rep.Publication = r.MediaPlanROPrints.FirstOrDefault().MediaPlanPrint.Company.Name; 
       rep.Size = Math.Round(r.MediaPlanROPrints.FirstOrDefault().MediaPlanPrint.Width * r.MediaPlanROPrints.FirstOrDefault().MediaPlanPrint.Height, 0) 
              + "(" + Math.Round(r.MediaPlanROPrints.FirstOrDefault().MediaPlanPrint.Width, 0) + "x" + Math.Round(r.MediaPlanROPrints.FirstOrDefault().MediaPlanPrint.Height, 0) + ")"; 


       rep.Rate = r.MediaPlanROPrints.Sum(s => s.MediaPlanPrint.RoRate).ConvertToDecimal(); 
       rep.RoAmount = r.MediaPlanROPrints.Sum(s => s.MediaPlanPrint.Amount).ConvertToDecimal(); 
       rep.EstAmount = r.MediaPlanROPrints.Sum(s => s.MediaPlanPrint.EstimatedAmount).ConvertToDecimal(); 
       repo.Add(rep); 
      } 
      return repo; 
     } 
     else return null; 
    } 
+0

На какой линии? Что такое '_commonSer.ExportReportInvoice'? Почему ваш вопрос помечен как 'asp.net-mvc', если вы используете элемент управления« GridView »? –

+0

Это код mvc application.my. ошибка компиляции отсутствует. _commonSer.ExportReportInvoice - это общий список – maztt

+0

'_commonSer.ExportReportInvoice' не может быть общим списком. Это функция, определенная на экземпляре '_commonSer'. Так вы хотели бы рассказать нам немного больше об этом? Трудно помочь, не зная подробностей. –

ответ

2

Вы можете записать вывод непосредственно в поток ответа вместо загрузки его в памяти (с помощью этого StringWriter):

HtmlTextWriter htw = new HtmlTextWriter(Response.Output); 
gv.RenderControl(htw); 
Response.Flush(); 
Response.End(); 

Также с использованием управления GridView в приложении ASP.NET MVC хорошо, как его назвать, хм, не удается найти правильные слова (18+).