【问题标题】:Gridview not getting last row in the Excel fileGridview没有得到Excel文件中的最后一行
【发布时间】:2015-04-24 12:10:08
【问题描述】:

我编写了一个代码来将 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);
}

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

导出到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();

如何解决这个问题?

【问题讨论】:

  • 也许你获取了一定数量的行并且因为有一个标题最后一行被遗漏了......也许我们需要查看更多代码
  • 我是存在 gridview 的面板。我没有获取特定数量的行。上面我发布了导出到 Excel 代码。
  • @bogojane:您是否从某个地方复制了代码,如果是,也发布该链接。或者让我们知道为什么使用cell.ColumnSpan = 9; 是为了添加一些 CSS 或其他东西。请说明
  • 我刚刚创建了一个包含 9 列 colspan 的新标题。
  • 您没有创建 Excel 文件。您正在创建一个伪装成 Excel 文件的 HTML 文件。

标签: asp.net excel gridview


【解决方案1】:

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

使用 RowCreated 事件创建动态标题行。

    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();
    }

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多