2015-07-01 15 views
8

kullanarak excel'e ücretsiz form yerel sorgu çıktısı göndermek istiyorum İlk önce sorunumu açıklamam gerekiyor, Birisi "Bu .... ve bunu seç" türünde bir yerel sorgu uygulamasına sahibim ve çıktı şu anda paginated olan bir ızgarada görüntülendim ve veriyi doğrudan yazılmamış bir veri akışından excel'e gönderecek bir düğme eklemem istendi. Benim bulunduğum geçerli kod bir ızgara kullanır ve hala bir sebepten dolayı bir .xls dosyasını indirmemi istemez.Bir WebGrid

 [Authorize(Roles = "Portal administrator")] 
    public void ExportExcel(NativeQueryVM model, int? page, string sort) 
    { 
     List<Dictionary<string, object>> result = null; 
     String vartimedate = DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss"); 
     try 
     { 
      var user = Membership.GetUser(); 
      var grid = new System.Web.UI.WebControls.GridView(); 
      if (page == null && sort == null) 
      { 
       if (model.QueryText.ToUpper().StartsWith("SELECT")) 
       { 
        UserQueryInput queryinput = new UserQueryInput(); 
        queryinput.DatabaseId = model.selectedDatabase; 
        queryinput.QueryText = model.QueryText; 
        result = lookupProvider.GetSetNativeQuery((Guid)user.ProviderUserKey, user.UserName, queryinput, "Set"); 
        model.QueryResultData = result; 
        ViewBag.SubmitType = "Select"; 
        CreateDynamicResult(model.QueryResultData); 
        if (model == null || model.QueryResultData.Count == 0) 
        { 
         ViewBag.ResultMessage = "No Results Found"; 
        } 
        else 
        { 

         WebGrid wd = new WebGrid(source: ViewBag.DynamicResult, canPage: false, canSort: false); 

         string griddata = wd.GetHtml().ToString(); 
         string attachment = "attachment; filename=NativeQuery" + vartimedate + ".xls"; 
         Response.ClearContent(); 
         Response.AddHeader("content-disposition", attachment); 
         Response.ContentType = "application/excel"; 
         StringWriter sw = new StringWriter(); 
         HtmlTextWriter htw = new HtmlTextWriter(sw); 
         Response.Write(griddata); 
         Response.End(); 
        } 
       } 

      } 
      else 
      { //This part should come when page or sort is not null for Select. Should not be executed other than SELECT 
       result = lookupProvider.GetSetNativeQuery((Guid)user.ProviderUserKey, user.UserName, null, "Get"); 
       model.QueryResultData = result; 
       ViewBag.SubmitType = "Select"; 
       CreateDynamicResult(model.QueryResultData); 
       if (model == null || model.QueryResultData.Count == 0) 
       { 
        ViewBag.ResultMessage = "No Results Found"; 
       } 
       else 
       { 

       } 
      } 

     } 
     catch (Exception ex) 
     { 
      logger.Log(new LogMessage() 
      .ForMethod("SubmitQuery") 
      .WithContext(Environment.MachineName) 
      .WithException(ex) 
      .WithDescription("An error occurred while submiting query to get result")); 
     } 
    } 
+0

Eğer Response.Write (griddata) sahip bir Response.Output.Write (griddata) deneyin. –

cevap

0

Merhaba bu sorunu cevap ve cevabı ve sorunları tespit ettik tüm dışında ikamet: Veri içeren bir FileContentResult dönmek gerekiyordu unutmayın doğrudan Response değiştirerek yerine UTF8 kodlanmış soruya girdiğim kod. Jquery dosya akışımın çıkışını durdurdu ve diğer yandan, eğer buton runat = sunucu ile oluşturulmuşsa, model kapsam dışıdır ve çözümün ana kısmı modelin bir oturuma kaydedilmesi ve geri çekilmesi ile ilgilidir. Yardımınız herkes için

teşekkürler ... kodunuzda

-1

Bu boşluk işlevini nasıl çağırıyorsunuz? Dönüş yolları, yanıtı değiştirmenin yanı sıra bir hata iletisiyle ViewBag özelliğinin ayarlanmasını içerir. Kötü tasarım kokuyor.

Böyle bir şey için @Url.Action'a bağlanan bir köprü oluşturur.

public async Task<ActionResult> Test() 
     {     
      WebGrid wd = new WebGrid(source: ViewBag.DynamicResult, canPage: false, canSort: false); 

        string griddata = wd.GetHtml().ToString(); 
        string attachment = "attachment; filename=NativeQuery" + vartimedate + ".xls"; 
        Response.ClearContent(); 
        Response.AddHeader("content-disposition", attachment); 
        Response.ContentType = "application/excel"; 
      byte[] buffer = System.Text.UTF8Encoding.UTF8.GetBytes(griddata); 

      return File(buffer, "application/octet-stream"); 
     }