C# 如何将动态gridview数据导出到excel
我已经为报表创建了动态网格,并保留了导出到excel的选项。我使用html呈现控件进行导出,但我的问题是,当我尝试在excel中导出时,得到的是空白的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
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的问题。我得到了解决方案。刚刚将所有网格行转换为表格单元格。然后用那张桌子出口。谢谢你的支持,朋友们。