DataGrid数据导出到Excel

时间:2023-01-13 09:32:36


网上最常见的导出代码,这个方法的优点是简单.但是缺点就是不能格式化.
如果datagrid中有linkbutton列,导出程序就会报错
类型“DataGridLinkButton”的控件“DataGrid1__ctl2__ctl0”必须放在具有 runat=server 的窗体标记内。纠正这个错误的方法就是对datagrid进行重新绑定,当然在重新绑定之前最好设置参数,这样查询的时候是LinkButton列,导出的时候是普通列或不生成该列.
我实现的方法,修改导出函数如下:
DataGrid数据导出到ExcelSession[ " print " ] = " 1 " ;
DataGrid数据导出到Excel
DataGrid数据导出到Excel
DataGrid数据导出到ExcelSetBind();
// 重新绑定datagrid
DataGrid数据导出到Excel
Session.Remove( " print " ); // 注意:清理session的部分不能写在DataGrid1_ItemDataBound中
DataGrid数据导出到Excel                        
// 因为DataGrid1_ItemDataBound是一行一行绑的.如果写在里面就
DataGrid数据导出到Excel                        
// 表示绑定了第一行,等第二行的时候还是会绑定LinkButton.
DataGrid数据导出到Excel

DataGrid数据导出到ExcelResponse.Clear(); 
DataGrid数据导出到ExcelResponse.Buffer
=   true
DataGrid数据导出到ExcelResponse.Charset
= " GB2312 " ;    
DataGrid数据导出到ExcelResponse.AppendHeader(
" Content-Disposition " , " attachment;filename= "   + HttpUtility.UrlEncode(FileName,Encoding.UTF8).ToString());
DataGrid数据导出到ExcelResponse.ContentEncoding
= System.Text.Encoding.GetEncoding( " GB2312 " ); // 设置输出流为简体中文
DataGrid数据导出到Excel
Response.ContentType  =   " application/ms-excel " ; // 设置输出文件类型为excel文件。 
DataGrid数据导出到Excel
this .DataGrid1.Page.EnableViewState  = false ;
DataGrid数据导出到ExcelSystem.Globalization.CultureInfo myCItrad 
=   new  System.Globalization.CultureInfo( " ZH-CN " , true );
DataGrid数据导出到ExcelSystem.IO.StringWriter oStringWriter 
=   new  System.IO.StringWriter(myCItrad); 
DataGrid数据导出到ExcelSystem.Web.UI.HtmlTextWriter oHtmlTextWriter 
=   new  System.Web.UI.HtmlTextWriter(oStringWriter);
DataGrid数据导出到Excel
this .DataGrid1.RenderControl(oHtmlTextWriter); 
DataGrid数据导出到ExcelResponse.Write(oStringWriter.ToString());
DataGrid数据导出到ExcelResponse.End();
DataGrid数据导出到Excel
DataGrid数据导出到Excel
DataGrid数据导出到Excel

 1  private   void  DataGrid1_ItemDataBound( object  sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
 2          {    
 3               if (Session[ " print " != null )
 4              {
 5                   if (Session[ " print " ].ToString() == " 1 " )
 6                  {
 7                      e.Item.Cells[ 0 ].Visible  = false ;
 8                      e.Item.Cells[ 1 ].Visible  = false ;
 9                      e.Item.Cells[ 2 ].Visible  = false ;                    
10                      e.Item.Cells[ 12 ].Visible   = false ;                    
11                  }        
12              }
13          }