IT猫扑网:您身边最放心的安全下载站! 最新更新| 软件分类| 专题汇总| 手机版

您当前所在位置:IT猫扑网 > 网络编程 > .Net编程 > Asp.net中的GridView导出遇到的问题

Asp.net中的GridView导出遇到的问题

时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)

  对于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 控件。

  语法:

  public override void VerifyRenderingInServerForm(

  Control control

  )

  参数

  control

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

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

#p#副标题#e#

  备注

  如果在运行时控件未包含在 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创建XML Web服务全接触 如何提高ASP.NET页面载入速度的方法 .net导出海量数据到execl文件 ASP.NET 2.0程序安全的基础知识 ASP.NET中MD5与SHA1加密的几种方法 在.net开发中几个重要的认识误区

文章评论
发表评论

热门文章 在ASP.NET MVC中实现大文件异步上传 在ASP.NET MVC中实现大文件异步上传 在.NET环境下为网站增加IP过滤功能 在.NET环境下为网站增加IP过滤功能 诛仙3飞升任务怎么做-诛仙3飞升任务流程最新2022 诛仙3飞升任务怎么做-诛仙3飞升任务流程最新2022 ASP.NET 如何避免页面重新整理时重复送出 ASP.NET 如何避免页面重新整理时重复送出 钟离圣遗物推荐-原神钟离圣遗物词条 钟离圣遗物推荐-原神钟离圣遗物词条

相关下载

人气排行 诛仙3飞升任务怎么做-诛仙3飞升任务流程最新2022 asp.net表单提交方法GETPOST 在ASP.NET中如何判断用户IE浏览器的版本 Asp.net中messagebox的实现方法 Asp.net中的web.config配置 在ASP.NET MVC中实现大文件异步上传 asp.net获取URL和IP地址 FileUpload上传多文件出现错误的解决方法 ASP.NET Web.config配置详解 Asp.net常用的51个代码(非常实用) ASP.NET打开word文档出错的解决办法 让你的.NET程序兼容不同版本的Dll文件