私有无效 ExportExcelFromDataGrid( 字符串 文件名 , System.Web.UI.WebControls.DataGrid ToExcelGrid )
{
Response.Clear();
响应.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());
响应.End();
}
private void Button4_Click(对象发送者, 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 ( 文件名 , this.DataGrid1 );
}
原理是利用DataGrid(其实是其父类Control)的RenderControl方法输出,整个DataGrid的外观时,将这些HTML代码写入到状态图,同时设置一下ContentType,让Excel自己的自动纠错功能将这个输出存为一个Excel文件。
很多网上的朋友使用了以上这种可粘贴性强的代码,发现不好用,反映的错误类似:
“LinkButton必须放在一个带有runat=server标签的Form”之类的话,而更多的网友说:
问题很明显,因为DataGrid没有放在runat=server的Form里面,加上就可以了。
我认为,这种回答是很不准确的,原因如下:
通常使用这种代码的人他/她的DataGrid,最开始的代码已经能用了,所以一定要把那个带有 runat=server 的表单标签里了。
报错的是LinkButton,而不是DataGrid,很多细心的朋友很可能会说,我一直在用DataGrid,LinkButton在哪里来的。
其实真正的问题是,上面的代码没有加了 // * 的那几行引起的代码。
当然如果你的DataGrid,没有排序,没有使用那样的按钮列的话,是不会出问题的。
言归正传,LinkButtion其实是你将DataGrid设为可排序的时候,的表头包含的,所以我把DataGrid的排序设为False。
得到上面的等等其实,那些按钮列,什么“编辑”、“删除”这些,也用了同样的LinkButton,把按钮设为不可见就是了。
本质上说得再明白一点就是,将有可能产生LinkButton,或者其他控件的东西都不制作输出就是了
http://www.cnblogs.com/killkill/archive/2006/09/21/510289.html