为什么我的Excel导出顶部有一个空行?

时间:2008-10-02 23:23:55

标签: asp.net excel

在ASP.NET中,我将一些数据导出到Excel,只需将DataSet绑定到GridView,然后将ContentType设置为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文件总是在列标题正上方有一个空白的第一行。我只是无法弄清楚是什么导致了这一点。也许它是关于表单标签的东西?也许我需要添加一些样式或某些东西去除填充或边距?我已经尝试了很多东西,但我无法摆脱那个第一个空行。有没有其他人遇到这个?任何解决方案?

3 个答案:

答案 0 :(得分:3)

@azamsharp - 我在你回复时在其他地方找到了解决方案。 :-)事实证明,完全从ASPX页面删除表单标签是诀窍,唯一的方法是覆盖VerifyRenderingInServerForm方法。

如果您更新解决方案以包含需要从页面中删除表单标记的事实,我将接受您的回答。感谢。

答案 1 :(得分: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)
        {

        }

答案 2 :(得分:1)

更简单的解决方案是覆盖Render(HtmlTextWriter writer)方法并将其设为空:

protected override void Render(HtmlTextWriter writer){}

http://c-sharpe.blogspot.com/2009/05/get-rid-of-blank-row-when-exporting-to.html