2015-06-05 11 views
5

Im sử dụng mã này để Gửi Thư có đính kèm excel từ GridView, nó hoạt động tốt cho phần thư nhưng tệp đính kèm excel luôn trống. Tôi đã sửa mã và đảm bảo rằng nguồn dữ liệu của GridView chuyển dữ liệu cần thiết cho GridView, có vẻ như im không render GridView để excel đúng. toàn bộ quá trình là một cho mỗi vòng lặp tùy thuộc vào số lượng các yếu tố bên trong foreach ..Lấy Excel Trống khi đính kèm excel trong Mail

Tôi có thiếu một số mã không?

protected void MailButton_Click(object sender, EventArgs e) 
{ 
    List<FOAM> foamList = new List<FOAM>(servs.GetAreaList()); 
    foreach (FOAM foam in foamList) 
    { 
     Session["Area"] = foam.ItemAreaCode; 
     Session["Principal"] = foam.PrincipalAmount; 
     Session["Accountability"] = foam.AccountableAmount; 
     Session["Count"] = foam.ItemCount; 

     foamdetails.ItemAreaCode = foam.ItemAreaCode; 
     FOAMTemplateGridview.DataSource = servs.GetFoamAsOfUnsettledforAOM(foamdetails); 
     FOAMTemplateGridview.DataBind(); 

     StringWriter _writer = new StringWriter(); 
     HttpContext.Current.Server.Execute("AreaManagersMail.aspx", _writer); 

     StringWriter stw = new StringWriter(); 
     HtmlTextWriter hw = new HtmlTextWriter(stw); 
     FOAMTemplateGridview.RenderControl(hw); 

     MailMessage newMail = new MailMessage(); 
     newMail.Priority = MailPriority.High; 
     newMail.To.Add("tes[email protected]"); 
     newMail.Subject = "Unsettled FOAM As of " + DateTime.Today.ToString("MMMM dd, yyyy") + "-A" + foam.ItemAreaCode; 

     System.Text.Encoding Enc = System.Text.Encoding.ASCII; 
     byte[] mBArray = Enc.GetBytes(stw.ToString()); 
     System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false); 

     newMail.Attachments.Add(new Attachment(mAtt, "test.xls")); 
     newMail.Body = _writer.ToString(); 
     newMail.From = new MailAddress("[email protected]"); 
     newMail.IsBodyHtml = true; 
     SmtpClient SmtpSender = new SmtpClient(); 
     SmtpSender.Port = 25; 
     SmtpSender.Host = "MailHost"; 
     SmtpSender.Send(newMail); 

     newMail.Dispose(); 
    } 


} 
+0

thử gỡ lỗi và kiểm tra xem bạn có đang nhận 'dữ liệu trong trình gỡ rối' hay không – BNN

+0

@nadeem có tôi đã thử và chắc chắn rằng tôi nhận dữ liệu từ nguồn dữ liệu của GridView nhưng khi kiểm tra mBarray nó lấy không có thứ nguyên . – user2705620

+0

@ User6675636b20796f7521 Từ nơi nào bạn nhận được dữ liệu sẽ được viết bằng excel? – Mairaj

Trả lời

1

Vâng tìm thấy câu trả lời bản thân mình,

thay vì trực tiếp render GridView i thông qua giá trị của GridView trong một TABLE sau đó bảng là hình tôi đã sử dụng để hiển thị,

Mẫu bên dưới:

Table table = new Table();  
    table.Rows.AddAt(3, FOAMTemplateGridview.HeaderRow); 

       foreach (GridViewRow row in FOAMTemplateGridview.Rows) 
       { 
        int index = 0; 
        table.Rows.Add(row); 
        foreach (TableCell tc in row.Cells) 
        { 
         switch (index) 
         { 

          case 0: tc.HorizontalAlign = HorizontalAlign.Left; 
           break; 
          case 1: tc.HorizontalAlign = HorizontalAlign.Right; 
           break; 
          case 2: tc.HorizontalAlign = HorizontalAlign.Right; 
           break; 
          case 3: tc.HorizontalAlign = HorizontalAlign.Left; 
           break; 
          case 4: tc.HorizontalAlign = HorizontalAlign.Right; 
           break; 
          case 5: tc.HorizontalAlign = HorizontalAlign.Left; 
           break; 
          case 6: tc.HorizontalAlign = HorizontalAlign.Left; 
           break; 
          case 7: tc.HorizontalAlign = HorizontalAlign.Right; 
           break; 
          case 8: tc.HorizontalAlign = HorizontalAlign.Left; 
           break; 
          case 9: tc.HorizontalAlign = HorizontalAlign.Right; 
           break; 
          case 10: tc.HorizontalAlign = HorizontalAlign.Right; 
           break; 
          case 11: tc.HorizontalAlign = HorizontalAlign.Right; 
           break; 
          case 12: tc.HorizontalAlign = HorizontalAlign.Right; 
           break; 
          case 13: tc.HorizontalAlign = HorizontalAlign.Right; 
           break; 
          case 14: tc.HorizontalAlign = HorizontalAlign.Left; 
           break; 
          case 15: tc.HorizontalAlign = HorizontalAlign.Left; 
           break; 
          case 16: tc.HorizontalAlign = HorizontalAlign.Left; 
           break; 
         } 
         tc.Attributes.Add("class", "text"); 
         tc.BorderStyle = System.Web.UI.WebControls.BorderStyle.Solid; 
         tc.BorderColor = Color.Black; 
         tc.Font.Name = "Arial"; 
         tc.Font.Size = 10; 
         index++; 
        } 

       } 
      StringWriter stw = new StringWriter(); 
      HtmlTextWriter hw = new HtmlTextWriter(stw); 
      hw.WriteLine(@"<style>.text { mso-number-format:\@; } </style>"); 
      table.RenderControl(hw); 

      MailMessage newMail = new MailMessage(); 
      newMail.Priority = MailPriority.High; 
      newMail.To.Add(foam.AomMail); 
      newMail.Subject = "Subject"; 
      System.Text.Encoding Enc = System.Text.Encoding.ASCII; 
      byte[] mBArray = Enc.GetBytes(stw.ToString()); 
      System.IO.MemoryStream mAtt = new System.IO.MemoryStream(mBArray, false); 
      newMail.Attachments.Add(new Attachment(mAtt, "sales.xls")); 

Sau đó, bạn đi, tôi có thể đính kèm tệp phù hợp khi gửi thư thay vì để trống.

1

Bạn đang nhận được trống nổi trội bởi vì bạn đang nhận được bytes từ stw được định nghĩa nhưng nó chưa bao giờ được đưa ra một giá trị.

stw chỉ là một đối tượng mới không có giá trị đó là lý do tại sao bạn đang nhận được 0 bytes array trong mBArray.

Và hơn bạn đã gán mAtt = new System.IO.MemoryStream(mBArray, false);. Vì vậy, mBArray trống nên có mAtt và bạn đã tạo tệp từ mAtt bị trống, đó là lý do bạn nhận được tệp trống trong email. Tôi đoán bạn cần thay đổi dòng này

byte[] mBArray = Enc.GetBytes(stw.ToString()); 

để

byte[] mBArray = Enc.GetBytes(_writer.ToString()); 
Các vấn đề liên quan