Почему мой экспорт в Excel имеет пустую строку вверху? - PullRequest
2 голосов
/ 03 октября 2008

В 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 ]

3 голосов
/ 03 октября 2008

@ azamsharp - я нашел решение в другом месте, пока ты отвечал. :-) Оказывается, что полное удаление тега формы со страницы ASPX - это хитрость, и единственный способ сделать это - переопределить метод VerifyRenderingInServerForm, как вы это делаете.

Если вы обновите свое решение, указав тот факт, что вам необходимо удалить тег формы со страницы, я приму ваш ответ. Спасибо.

1 голос
/ 09 мая 2009

Более простое решение - переопределить метод Render (HtmlTextWriter writer) и сделать его пустым:

защищенное переопределение void Render (писатель HtmlTextWriter) {}

http://c -sharpe.blogspot.com / 2009/05 / Get-избавиться-от-пустой-рядного когда-экспорт-to.html

1 голос
/ 03 октября 2008

Вот мой код, который отлично работает:

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)
        {

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...