2008-10-02 57 views
2

在ASP.NET中,我通過將DataSet綁定到GridView然後將ContentType設置爲Excel將一些數據導出到Excel。爲什麼我的Excel導出在頂部有一個空行?

我的ASPX頁面非常簡單,看起來像這樣:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ExamExportReport.aspx.cs" Inherits="Cabi.CamCentral.Web.Pages.Utility.ExamExportReport" %> 
<html> 
<body> 
    <form id="form1" runat="server"> 
     <asp:GridView 
      ID="gridExam" 
      AutoGenerateColumns="true" 
      runat="server"> 
     </asp:GridView> 
    </form> 
</body> 
</html> 

在後面的代碼的Page_Load方法中,我這樣做:

protected void Page_Load(object sender, EventArgs e) 
{ 
    BindGrid(); 
    Response.ContentType = "application/vnd.ms-excel"; 
    Response.AddHeader("content-disposition", "attachment; filename=ExamExport.xls"); 
} 

一般情況下,一切工作正常,並Excel文件彈出正確的數據。問題在於Excel文件總是以列標題正上方的第一行爲空。我無法弄清楚是什麼導致了這一點。也許這是關於窗體標籤的東西?也許我需要添加一些樣式或東西去除填充或邊距?我嘗試了一堆東西,但我無法擺脫那個第一空白行。有沒有其他人遇到過這個問題?任何解決方案

+0

這應該是裏面! Page.IsPostback事件。此外,您在Page_Load方法中執行此操作的任何原因。 – azamsharp 2008-10-02 23:43:13

+1

這個頁面永遠不會有回傳,因爲它是通過Server.Transfer導航的,並且沒有用於發佈任何內容的UI。在這種情況下,Page_Load是合乎邏輯的地方。 – jeremcc 2008-10-02 23:47:58

回答

3

@azamsharp - 我找到了解決辦法在其他地方,而你正在回覆。 :-)事實證明,從ASPX頁面中完全刪除表單標籤是個訣竅,唯一的方法就是重寫VerifyRenderingInServerForm方法。

如果您更新解決方案以包含您需要從頁面中刪除表單標籤這一事實,我會接受您的答案。謝謝。

1

這裏是我的代碼工作正常:

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!Page.IsPostBack) 
      { 
       BindData(); 
      } 
     } 

     private void BindData() 
     { 
      string connectionString = "Server=localhost;Database=Northwind;Trusted_Connection=true"; 
      SqlConnection myConnection = new SqlConnection(connectionString); 
      SqlDataAdapter ad = new SqlDataAdapter("select * from products", myConnection); 
      DataSet ds = new DataSet(); 
      ad.Fill(ds); 

      gvProducts.DataSource = ds; 
      gvProducts.DataBind(); 
     } 

     protected void ExportGridView(object sender, EventArgs e) 
     { 
      Response.ClearContent(); 

      Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls"); 

      Response.ContentType = "application/excel"; 

      StringWriter sw = new StringWriter(); 

      HtmlTextWriter htw = new HtmlTextWriter(sw); 

      gvProducts.RenderControl(htw); 

      Response.Write(sw.ToString()); 

      Response.End(); 
     } 

     public override void VerifyRenderingInServerForm(Control control) 
     { 

     } 
相關問題