private void ExportExcelFromDataGrid( string filename , System.Web.UI.WebControls.DataGrid ToExcelGrid ) { Response.Clear(); Response.Buffer= true; Response.Charset="utf-8"; Response.AppendHeader("Content-Disposition","attachment;filename="+Server.UrlEncode ( filename ) ); Response.ContentEncoding=System.Text.Encoding.Default;//设置输出流为简 体 中文 Response.ContentType = "application/ms-excel";// 设 置 输 出 文 件 类 型 为 excel 文件. this.EnableViewState = false; System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true); System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad); System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); ToExcelGrid.RenderControl(oHtmlTextWriter); Response.Write(oStringWriter.ToString()); Response.End(); } private void Button4_Click(object sender, System.EventArgs e) { this.Panel1.Visible = false; string filename = "内训师.xls"; this.DataGrid1.Columns[6].Visible = true; this.DataGrid1.Columns[7].Visible = true; ; this.DataGrid1.Columns[this.DataGrid1.Columns.Count-1].Visible = false; this.DataGrid1.Columns[this.DataGrid1.Columns.Count-2].Visible = false; this.DataGrid1.AllowSorting = false; this.DataGrid1.AllowPaging = false; this.DataGrid1.SelectedIndex = -1; this.BindGrid(); this.ExportExcelFromDataGrid ( filename , this.DataGrid1 ); }
原理是利用 DataGrid(其实是其父类 Control)的 RenderControl 方法输出,整个 DataGrid 的外观时,将这些
HTML 代码写入到缓冲区,同时设置一下 ContentType ,让 Excel 自己 的自动纠错功能将这个输出存为一个 Excel 文件.
很多网上的朋友使用了以上这种可粘贴性强的代码,发现不好用,反映的错误类似: "LinkButton 必须放在一个具有 runat=server 的标签的 Form"之类的话,而更多的网友说: 问题很明显,因为 DataGrid 没有放在 runat=server 的 Form 里面,加上就可以了. 我认为,这种回答是很不准确的,理由如下: 通常使用这种代码的人他/她的 DataGrid,最起码已经能用了,所以必定放在那个具有 runat=server 的 form 标签里了. 报错是 LinkButton,而不是 DataGrid,很多细心的朋友很可能会说,我一直在用 DataGrid, LinkButton 在哪里来的. 其实真正的
问题是,上面的代码没有加了 // * 的那几行代码引起的. 当然如果你的 DataGrid,没有排序,没有使用那种按钮列的话,是不会出问题的. 言归正传,LinkButtion 其实是你将 DataGrid 设为可排序时候,的表头包含的,所以我要将 DataGrid 的排序设为 False. 同样得到上面的其实,那些按钮列,什么"编辑", "删除"等等这些,也是用了 LinkButton, 把他设为不可见就是了. 其实说得再明白一点就是,将有可能产生 LinkButton,或其他控件的东西都不让它输出就是 了 cnblogs/killkill/archive/2006/09/21/510289.html
资料来源:学网(xue5),原文地址:h
ttp://xue5/itedu/200803/155271_2.html