gridview导出excel乱码问题。全部数据导出的时候不乱码,但是隐藏部分列不想导出的时候乱码

jinianjun 2012-05-26 12:03:42
用到的导出代码:
public void GridviewToExcel(Control ctl, string FileName)
{
HttpContext.Current.Response.Charset = "GB2312";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName);
ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
}

调用的代码:
//这地方有些问题,隐藏某些列(列索引从0开始)的时候,导出的excel会出现乱码
//GridView1.Columns[4].Visible = false;//隐藏选择列,不导出选择列
//GridView1.Columns[5].Visible = false;//隐藏选择列,不导出选择列
GridviewToExcel(GridView1, "jdccx.xls");
GridView1.AllowPaging = true;
GridView1.AllowSorting = true;
//GridView1.Columns[4].Visible = true;//恢复选择列为可见
//GridView1.Columns[5].Visible = true;//恢复选择列为可见

GridView1.DataBind();

如上,当我把隐藏这两列的代码注释掉,将gridview数据全部导出的时候没问题,如下:

但是我不想要后两列,遍把它们隐藏,导出以后再显示,这时候虽然不把后两列导出了,但是导出的数据出现了乱码(除了日期),如图:

编码方面的问题我想过了,utf-8、unicode、gb2312全试了,不行啊。哪位大神给解答一下,万分感谢
...全文
180 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinianjun 2012-05-29
  • 打赏
  • 举报
回复
我这里确实是乱码啊,事实啊,大哥帮忙看看我这里是怎么回事好吗:?
jinianjun 2012-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

记事本打开文件,另存为 编码选与页面定义的编码一致

试试
[/Quote]大哥什么意思?让我用记事本打开excel文件吗?
001007009 2012-05-26
  • 打赏
  • 举报
回复
记事本打开文件,另存为 编码选与页面定义的编码一致

试试
孟子E章 2012-05-26
  • 打赏
  • 举报
回复
完整的测试例子
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

private System.Data.DataTable GetData()
{
String[] testData = { "Yes", "No", "" };
System.Data.DataTable dataTable1 = new System.Data.DataTable("BlogUser");
System.Data.DataRow dr;
dataTable1.Columns.Add(new System.Data.DataColumn("Id", typeof(System.Int32)));
dataTable1.Columns.Add(new System.Data.DataColumn("标题", typeof(System.String)));
dataTable1.Columns.Add(new System.Data.DataColumn("State", typeof(System.String)));
dataTable1.Columns.Add(new System.Data.DataColumn("负责人", typeof(System.String)));
for (int i = 0; i < 8; i++)
{
dr = dataTable1.NewRow();
dr[0] = i;
dr[1] = "标题标题标题标题标题标题标题标题标题标题【孟子E章】" + i.ToString();
dr[2] = testData[i % 3];
dr[3] = "标题标题标题标题标题标题标题标题标题标题【孟子E章】" + i.ToString();
dataTable1.Rows.Add(dr);
}
return dataTable1;
}
bool isExport = false;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
isExport = false;
GridView1.DataSource = this.GetData();
GridView1.DataBind();

}
}
public void GridviewToExcel(Control ctl, string FileName)
{
HttpContext.Current.Response.Charset = "GB2312";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
HttpContext.Current.Response.ContentType = "application/ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName);
ctl.Page.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);

ctl.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();

}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (isExport)
{
e.Row.Cells[2].Visible = false;
}
}
public override void VerifyRenderingInServerForm(Control control) { }
protected void Button1_Click(object sender, EventArgs e)
{
isExport = true;
GridView1.DataSource = this.GetData();
GridView1.DataBind();
GridviewToExcel(GridView1, "xxx.xls");
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">
</asp:GridView>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="导出" />
</form>
</body>
</html>
孟子E章 2012-05-26
  • 打赏
  • 举报
回复
在绑定数据里进行隐藏式不会乱的啊

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧