如何导出到Excel父和嵌套GridView数据

本文关键字:嵌套 GridView 数据 何导出 Excel | 更新日期: 2023-09-27 18:09:31

我有一个gridview和一些嵌套的gridview在它里面,当我试图导出gridview数据到Excel我得到下载整个网页,我确信这是因为嵌套的gridview。

如何将父视图和嵌套的gridview数据导出到Excel表格中?

我使用以下代码导出到excel

            gvExportToExcel.DataSource = objDs;
            gvExportToExcel.DataBind();           
            System.Web.HttpContext curContext = System.Web.HttpContext.Current;
            System.IO.StringWriter strWriter = null;
            System.Web.UI.HtmlTextWriter htmlWriter = null;                       
            curContext.Response.Clear();
            curContext.Response.Buffer = true;
            curContext.Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("SearchSubmissionResult", System.Text.Encoding.UTF8) + ".xls");
            curContext.Response.ContentType = "application/vnd.ms-excel";
            curContext.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=UTF-8>");
            strWriter = new System.IO.StringWriter();
            htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
            this.ClearControls(gvExportToExcel);
            gvExportToExcel.RenderControl(htmlWriter);
            curContext.Response.Write(strWriter.ToString());
            curContext.Response.End();                 

如何导出到Excel父和嵌套GridView数据

迭代GridViewRows集合,并将数据写入Excel文件(通过Oledb或Office InterOp)

使用以下代码清除此问题。

               //Clear the controls inside the parent grid-view before render.
                gvExportToExcel.DataSource = objDs;
                gvExportToExcel.DataBind();           
                System.Web.HttpContext curContext = System.Web.HttpContext.Current;
                System.IO.StringWriter strWriter = null;
                System.Web.UI.HtmlTextWriter htmlWriter = null;                       
                curContext.Response.Clear();
                curContext.Response.Buffer = true;
                curContext.Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("SearchSubmissionResult", System.Text.Encoding.UTF8) + ".xls");
                curContext.Response.ContentType = "application/vnd.ms-excel";
                curContext.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=UTF-8>");
                strWriter = new System.IO.StringWriter();
                htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
                this.ClearControls(gvExportToExcel);
                gvExportToExcel.RenderControl(htmlWriter);
                curContext.Response.Write(strWriter.ToString());
                curContext.Response.End();
//Clear method.
private void ClearControls(Control control)
    {
        try
        {
            for (int i = control.Controls.Count - 1; i >= 0; i--)
            {
                ClearControls(control.Controls[i]);
            }
            if (!(control is TableCell))
            {
                if (control.GetType().GetProperty("SelectedItem") != null)
                {
                    LiteralControl literal = new LiteralControl();
                    control.Parent.Controls.Add(literal);
                    try
                    {
                        literal.Text = (string)control.GetType().GetProperty("SelectedItem").GetValue(control, null);
                    }
                    catch
                    {
                    }
                    control.Parent.Controls.Remove(control);
                }
                else
                    if (control.GetType().GetProperty("Text") != null)
                    {
                        LiteralControl literal = new LiteralControl();
                        control.Parent.Controls.Add(literal);
                        literal.Text = (string)control.GetType().GetProperty("Text").GetValue(control, null);
                        control.Parent.Controls.Remove(control);
                    }
            }
        }
        catch (Exception ee)
        {
            lblError.Visible = true;
            lblError.Text = ee.Message;
        }
        return;
    }