Gridview 未获取 Excel 文件中的最后一行

Gridview not getting last row in the Excel file

我写了一个代码来获取 gridview 到 Excel。除了 gridview 中的一行,一切都工作正常。当我将 gridview 导出到 excel 时,最后一行不包含在 excel 文件中。当我扫描我的整个代码时,我发现了一个产生问题的代码。这是代码:

protected void OnDataBound(object sender, EventArgs e)
{
GridViewRow row = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
TableHeaderCell cell = new TableHeaderCell();
cell.Text = "A";
cell.ColumnSpan = 9;
row.Controls.Add(cell);
gv.HeaderRow.Parent.Controls.AddAt(0, row);
}

此代码用于向合并单元格的网格视图添加新的 header。删除此代码后,一切正常。但我需要那个代码。

导出到 excel 代码:

Response.Clear();
            Response.AddHeader("content-disposition", "attachment;filename=Rept" + DateTime.Now.ToString("yyyy_MM_ddThh_mm_ss_") + ".xls");
            Response.Charset = "";
            Response.ContentType = "application/vnd.xls";
            System.IO.StringWriter stringWrite = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

            System.Web.UI.HtmlControls.HtmlForm form = new System.Web.UI.HtmlControls.HtmlForm();
            Controls.Add(form);
            form.Controls.Add(gvpanel);
            form.RenderControl(htmlWrite);

            Response.Write(stringWrite.ToString());
            Response.End();

如何解决这个问题?

您可以使用 excel 电子表格作为 GridView 的数据源并像连接任何其他数据库一样连接到它:

How To Query and Display Excel Data by Using ASP.NET, ADO.NET, and Visual Basic .NET

我在任何地方都找不到解决方案,这让我提供了这个解决方案。 当您创建 header 行并且还需要导出到 excel 时,下面的代码解决了缺少最后一行的问题。

使用 RowCreated 事件创建动态 header 行。

    protected void Grid_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            GridViewRow HeaderRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert);
            TableCell HeaderCell1 = new TableCell();

            HeaderCell1.Text = "Solved your Issue";
            HeaderCell1.ColumnSpan = 10;
            HeaderRow.Cells.Add(HeaderCell1);
            Grid.Controls[0].Controls.Add(HeaderRow);
        }
    }

现在您可以调用 ExportToExcel 方法:

      private void ExportToExcel(GridView gv, string exportfilename)
    {
        string filename = exportfilename + ".xls";

        System.IO.StringWriter tw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);

        gv.RenderControl(hw);
        //Write the HTML back to the browser.
        Response.ContentType = "application/vnd.ms-excel";
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
        this.EnableViewState = false;
        Response.Write(tw.ToString());
        Response.Flush();
        Response.End();
    }