手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >Asp.net中的GridView导出遇到的两个问题和解决方法
Asp.net中的GridView导出遇到的两个问题和解决方法
摘要:对于GridView导出的内容的代码大致如下:Response.Clear();Response.Buffer=true;Response....

对于GridView导出的内容的代码大致如下:

Response.Clear();

Response.Buffer = true;

Response.Charset = "GB2312";

Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");

Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

Response.ContentType = "application/ms-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);

this.grid1.RenderControl(oHtmlTextWriter);

Response.Write(oStringWriter.ToString());

Response.End();

//grid1为表格的ID

注:蓝色标识代码为出错的那行代码。

OK,好不容易敲完代码,运行程序测试。蹬,报错了。

问题一:类型“Grid1”的控件“gvCompareDetail”必须放在具有 runat=server 的窗体标记内。

注:Grid1为表格的ID。

查找网上的解决大致为:

1)把Grid放到<form runat="server"></form>间。

2)给Grid加标记runat="server"。

查明前台Grid确实有加标记runat="server"的,而且表格是放在form中的。

解决方法:在后台代码加上以下重写方法

public override void VerifyRenderingInServerForm(Control control)

{ }

查找MSDN说明,该函数的作用在于:确认在运行时为指定的 ASP.NET 移动控件呈现 Form 控件。

语法:

C#

复制代码 代码如下:

public override void VerifyRenderingInServerForm(

Control control

)

参数

control

类型:System.Web.UI..::.Control

必须位于 Form 控件中的 ASP.NET 移动控件。

备注

如果在运行时控件未包含在 Form 中,则此方法将重写 Page..::.VerifyRenderingInServerForm 方法以引发异常。

如果回发或使用客户端脚本的服务器控件没有包含在 HtmlForm 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 HtmlForm 控件中时提供明确的错误信息。

开发自定义服务器控件时,通常在为任何类型的输入标记重写 Render 方法时调用该方法。这在输入控件调用 GetPostBackEventReference 或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。

OK,加上以上的函数,编译运行调试。晕,又出现了别外一个错误。

问题二:只能在执行 Render() 的过程中调用 RegisterForEventValidation。

看样子,以上加的那个函数并没有彻底解决问题了。

经过一番搜索和尝试,终于把问题解决了。

解决方法1:把上面的函数VerifyRenderingInServerForm去掉,在导出代码中,动态添加一个Form对象,一个Page对象,把表格加入它,并把Form添加给Page。

导出的代码如下:

复制代码 代码如下:

Page p=new Page();

HtmlForm form=new HtmlForm();

Grid1.EnableViewState = false;

p.EnableEventValidation = false;

p.DesignerInitialize();

form.Controls.Add(Grid1);

p.Controls.Add(form);

StringBuilder sb=new StringBuilder();

StringWriter sw=new StringWriter(sb);

p.RenderControl(sw);

Response.Clear();

Response.Buffer = true;

Response.ContentType = "application/vnd.ms-excel";

Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");

Response.Charset = "UTF-8";

Response.ContentEncoding = Encoding.Default;

Response.Write(sb.ToString());

Response.End();

解决方法2:修改web.config(不推荐)<pages enableEventValidation ="false" ></pages>

【Asp.net中的GridView导出遇到的两个问题和解决方法】相关文章:

ASP.NET防止页面刷新的两种解决方法

用.Net的File控件上传文件的解决方案

asp.net 因为数据库正在使用的解决方法

asp.net 上传大文件解决方案

Asp.net下载功能的解决方案代码

Asp.net中的mail的发送

asp.net中List的使用方法

asp.net GridView 中增加记录的方法

asp.net下出现其中的组件“访问被拒绝”的解决方法

第一次用.net2.0 LOGIN登陆控件的困惑和解决方法

精品推荐
分类导航