首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 技术专题 | 电子书下载 | 教学视频 | 网页设计 | 平面设计 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> ASP.NET >> 文章正文

关于Asp.net中导出Excel表格的问题

文章来源ChinaItLab 作者killkill 更新时间2007-8-6 保存本文保存本文 推荐给好友推荐给好友 收藏本页收藏本页

        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里面,加上就可以了。

我认为,这种回答是很不准确的,理由如下:
  1. 通常使用这种代码的人他/她的DataGrid,最起码已经能用了,所以必定放在那个具有runat=server 的form标签里了。
  2. 报错是LinkButton,而不是DataGrid,很多细心的朋友很可能会说,我一直在用DataGrid,LinkButton在哪里来的。
其实真正的问题是,上面的代码没有加了 // * 的那几行代码引起的。
当然如果你的DataGrid,没有排序,没有使用那种按钮列的话,是不会出问题的。
言归正传,LinkButtion其实是你将DataGrid设为可排序时候,的表头包含的,所以我要将DataGrid的排序设为False。
同样得到上面的其实,那些按钮列,什么"编辑"、“删除”等等这些,也是用了LinkButton,把他设为不可见就是了。
其实说得再明白一点就是,将有可能产生LinkButton,或其他控件的东西都不让它输出就是了
【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题
 ·展现C#世界 C#程序设计专题
 ·Java入门 Tomcat的配置技巧精华专题
 ·Oracle RMAN物理备份技术详解
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航