MaoBisheng

Asp.Net(C#) & SQL & Oracle

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

ASP.NET中导出Excel的几个问题

 

1.控件必须放在具有“runat=server”的窗体标记内

ASP.Net的页面中的一个GridView需要把数据导出到Excel,从网上找了一段代码,整理后,写成一个类,供自己调用:

Code

客户代码:

clsExportData export = new clsExportData();

protected void btnToExcel_Click(object sender, EventArgs e)
{
    export.ExportControl(gvTraceList, 
"Excel");
}

上述代码中有利用GridView控件的RenderControl()来输出数据,可是在运行的时候却遇到了类型“GridView”的控件“gvTraceList”必须放在具有 runat=server 的窗体标记内。的错误。看了HTML代码后,发现<form>标签是有runat="server"标记的(况且没有的话,其他地方也会报错的),于是上网搜了搜解决办法,发现别人也有此错误:

解决办法:在页面中重写Page基类的VerifyRenderingInServerForm方法

        public override void VerifyRenderingInServerForm(Control control)
        {
            
// Confirms that an HtmlForm control is rendered for
        }

 

上面问题解决了之后,运行了一下,发现另一个问题有出现了,如下:

2.只能在执行 Render()的过程中调用 RegisterForEventValidation

继续上网找,答案:

当用GridView导出Execl的时候,会发生只能在执行Render()的过程中调用RegisterForEventValidation的错误提示。

有两种方法可以解决以上问题:

1修改web.config(不推荐)<pages enableEventValidation ="false" ></pages>

2直接在导出Execl的页面修改,加上EnableEventValidation = "false"属性

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="frmFormTrace.aspx.cs" 
   Inherits
="frmFormTrace" EnableEventValidation = "false"%>

 

最后,运行没有问题了,但是。。。。

3.Excel中的中文数据为乱码

试了好多方法后,终于显示出中文来了(我的Excel版本是2003的,不知其他版本的是否有问题) 

//HttpContext.Current.Response.Charset = "UTF-8";
//HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");

//用下面的这语句代替上面两句,可避免Excel/Word内容出现乱码问题
HttpContext.Current.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=UTF-8>");

 

出现的问题暂时都解决了,补充一点,上述语句中有运用到设计模式的装饰模式。。。

//初始化HtmlWriter
System.IO.StringWriter writer = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWriter 
= new System.Web.UI.HtmlTextWriter(writer);
source.RenderControl(htmlWriter);

 

 

posted on 2008-09-04 14:04  MaoBisheng  阅读(669)  评论(0编辑  收藏  举报