先将数据绑定到GridView控件,再利用GridView的对象方法RenderControl将控件内容输出到System.Web.UI.HtmlTextWriter对象中
注意事项:
- 当GridView对象是在前端声明时,必须重载VerifyRenderingInServerForm方法以解决导出时出错
出错界面如下
- 中文标题的乱码问题。当标题是中文时,采用Server.UrlEncode方法对字符串进URL编码
在HTML页面新建一个按钮
- <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
事件代码如下
- protected void Button1_Click(object sender, EventArgs e)
- {
- GridView gv = new GridView();
- DataSet ds = Lucas.DAL.AccessHelper.ExecuteSqlReturnDataSet("select * from [stu]");
- gv.DataSource = ds;
- gv.DataBind();
- Response.Clear();
- Response.Buffer = false;
- //注意对中文标题进行编码
- Response.AppendHeader("Content-Disposition", "attachment;filename="+Server.UrlEncode("中文")+".xls");
- //Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//标题和内容 均正常
- //Response.ContentEncoding = System.Text.Encoding.UTF8;//内容乱码,标题正常
- //Response.ContentEncoding = System.Text.Encoding.Default;//标题和内容 均正常
- Response.ContentEncoding = System.Text.Encoding.UTF7;//标题和内容 均正常
- Response.ContentType = "application/ms-excel";
- this.EnableViewState = false;
- System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
- System.Web.UI.HtmlTextWriter oHtmlTextWriter = new HtmlTextWriter(oStringWriter);
- gv.AllowPaging = false;
- //将控件内容输出到 StringWriter 对象中
- gv.RenderControl(oHtmlTextWriter);
- Response.Write(oStringWriter.ToString());
- Response.End();
- }
运行结果