Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将动态gridview数据导出到excel_C#_Asp.net_Excel - Fatal编程技术网

C# 如何将动态gridview数据导出到excel

C# 如何将动态gridview数据导出到excel,c#,asp.net,excel,C#,Asp.net,Excel,我已经为报表创建了动态网格,并保留了导出到excel的选项。我使用html呈现控件进行导出,但我的问题是,当我尝试在excel中导出时,得到的是空白的excel工作表。有谁能帮我一下吗。提前谢谢 Response.Clear(); string date_only_for_excel = DateTime.Now.Date.ToString("dd/MM/yyyy"); string FileName = "REPORT_" + date_only_for_exc

我已经为报表创建了动态网格,并保留了导出到excel的选项。我使用html呈现控件进行导出,但我的问题是,当我尝试在excel中导出时,得到的是空白的excel工作表。有谁能帮我一下吗。提前谢谢

Response.Clear();
        string date_only_for_excel = DateTime.Now.Date.ToString("dd/MM/yyyy");
        string FileName = "REPORT_" + date_only_for_excel + ".xls";
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName + "");
        Response.Charset = "";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.ContentType = "application/vnd.xls";
        System.IO.StringWriter stringWrite = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);



        htmlWrite.Write("<table><tr><td colspan='24'></td></tr>");
        htmlWrite.Write("<table><tr><td colspan='24'></td></tr>");
        //htmlWrite.Write("<table><tr><td colspan='24' style='text-align:left;font-size:22;color:#f79646;margin-left:100px;'>BOQ REPORT</td></tr>");
        htmlWrite.Write("<table><tr><td colspan='24'></td></tr>");
        htmlWrite.Write("<table><tr><td colspan='24'></td></tr>");
        htmlWrite.Write("<table><tr><td colspan='24'></td></tr>");
        Div2.RenderControl(htmlWrite);
        Response.Write(stringWrite.ToString());
        Response.End();
Response.Clear();
字符串date_only_for_excel=DateTime.Now.date.ToString(“dd/MM/yyyy”);
字符串FileName=“报告”+日期仅适用于excel+“.xls”;
AppendHeader(“内容处置”、“附件;文件名=“+filename+”);
响应。Charset=“”;
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType=“application/vnd.xls”;
System.IO.StringWriter stringWrite=新的System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite=新的HtmlTextWriter(stringWrite);
htmlWrite.Write(“”);
htmlWrite.Write(“”);
//htmlWrite.Write(“工程量清单报告”);
htmlWrite.Write(“”);
htmlWrite.Write(“”);
htmlWrite.Write(“”);
第2部分:渲染控制(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
我已经创建了动态网格并添加到此面板

 <asp:Panel ID="Export_Panel" runat="server">
                </asp:Panel>

使用
gridView1.RenderControl(htmlWrite)而不是

Div2.RenderControl(htmlWrite);
您可以尝试以下方法:

protected void ExportToExcel(GridView gv)
        {
            Response.Clear();
            Response.Buffer = true;

        Response.AddHeader("content-disposition", "attachment;filename=YourFileName.xls");

        Response.Charset = "";
        Response.ContentType = "application/vnd.ms-excel";
        using (var sw = new StringWriter())
        {
            var hw = new HtmlTextWriter(sw);

            //To Export all pages
            gv.AllowPaging = false;
            gv.HeaderRow.BackColor = Color.White;
            foreach (TableCell cell in gv.HeaderRow.Cells)
            {
                cell.BackColor = gv.HeaderStyle.BackColor;
            }
            foreach (GridViewRow row in gv.Rows)
            {
                row.BackColor = Color.White;
                foreach (TableCell cell in row.Cells)
                {
                    if (row.RowIndex%2 == 0)
                    {
                        cell.BackColor = gv.AlternatingRowStyle.BackColor;
                    }
                    else
                    {
                        cell.BackColor = gv.RowStyle.BackColor;
                    }
                    cell.CssClass = "textmode";
                }
            }

            gv.RenderControl(hw);

            //style to format numbers to string
            var style = @"<style> .textmode { } </style>";
            Response.Write(style);
            Response.Output.Write(sw.ToString());
            Response.Flush();
            Response.End();
        }
    }
受保护的void ExportToExcel(GridView gv)
{
Response.Clear();
Response.Buffer=true;
AddHeader(“内容处置”,“附件;文件名=YourFileName.xls”);
响应。Charset=“”;
Response.ContentType=“application/vnd.ms excel”;
使用(var sw=new StringWriter())
{
var hw=新的HtmlTextWriter(sw);
//导出所有页面的步骤
gv.AllowPaging=false;
gv.HeaderRow.BackColor=颜色。白色;
foreach(gv.HeaderRow.单元格中的表单元格)
{
cell.BackColor=gv.HeaderStyle.BackColor;
}
foreach(gv.Rows中的GridViewRow行)
{
row.BackColor=Color.White;
foreach(行中的表格单元格。单元格)
{
如果(行。行索引%2==0)
{
cell.BackColor=gv.AlternatingRowStyle.BackColor;
}
其他的
{
cell.BackColor=gv.RowStyle.BackColor;
}
cell.CssClass=“textmode”;
}
}
gv.渲染控制(hw);
//将数字格式化为字符串的样式
var style=@“.textmode{}”;
回应。写作(风格);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}
}

在您的问题中更新您的代码如果我将我的网格控件放在aspx页面中,意味着它工作正常。我在静态网格中使用了相同的代码,但当动态网格在Excel中变为空白时,任何可能的导出都不会重新绑定网格数据ID将动态生成,我有多个网格依赖于数据。因此,我无法放置gridView1.RenderControl(htmlWrite);调试代码并查看网格视图是否包含任何数据!在导出时,现在像这样****我错过了更新您的HTML的问题。我得到了解决方案。刚刚将所有网格行转换为表格单元格。然后用那张桌子出口。谢谢你的支持,朋友们。