繁体   English   中英

GridView不导出Excel中的最后一行

[英]Gridview not exporting last row in the excel

我试图将gridview的内容导出到excelsheet,并且excelsheet中总是缺少gridview的最后一行。

我认为这可能是由于标题行引起的,但无法弄清楚如何解决此问题。 下面是导出到Excel工作表的代码

private void btnExportToExcel_OnClick(object sender, EventArgs e)
    {
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
        Response.Charset = "";
        Response.ContentType = "application/vnd.ms-excel";
        using (StringWriter sw = new StringWriter())
        {
            HtmlTextWriter hw = new HtmlTextWriter(sw);

            //To Export all pages
            GridView1.AllowPaging = false;

            GridView1.RenderControl(hw); //here gridview is not rendering last row 

            //style to format numbers to string
            string style = @"<style> .textmode { } </style>";
            Response.Write(style);
            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();
        }
    }

这对我来说很好。 这是我后面带有简单数据的代码.aspx页面只有一个网格和一个导出按钮

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    DataTable dt = new DataTable();
    dt.Columns.Add("Id");
    DataRow dr = dt.NewRow();
    dr["Id"] = 1;
    dt.Rows.Add(dr);

    dr = dt.NewRow();
    dr["Id"] = 2;
    dt.Rows.Add(dr);

    //To Export all pages
    grdTest.AllowPaging = false;
    grdTest.AllowSorting = false;
    grdTest.DataSource = dt;
    grdTest.DataBind();
}
public override void VerifyRenderingInServerForm(Control control)
{
    /* Verifies that the control is rendered */
}

protected void btnExport_Click(object sender, EventArgs e)
{
    {
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls");
        Response.Charset = "";
        Response.ContentType = "application/vnd.ms-excel";
        using (StringWriter sw = new StringWriter())
        {
            HtmlTextWriter hw = new HtmlTextWriter(sw);

            grdTest.RenderControl(hw); //here gridview is not rendering last row 

            //style to format numbers to string
            string style = @"<style> .textmode { } </style>";
            Response.Write(style);
            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();
        }
    }
}

我无法在任何地方在线找到解决方案,但是我发现了发生这种情况的原因,这是由于在rowDatabound上的网格视图中添加了一个附加的GridviewRow,并且单行的添加跳过了最后一行。

为了解决这个问题,在进行gridview数据绑定之前,我添加了一个空白页脚行来解决此问题:

        DataRow dr= dt.NewRow();
        dt.Rows.Add(dr);
        GridView1.DataSource = dt;
        GridView1.DataBind();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM