Asp.net中导出GridView的问题解决方法

原创|其它|编辑:郝浩|2009-12-31 10:37:57.000|阅读 680 次

概述:本文介绍了Asp.net中导出GridView的问题解决方法。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

  对于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放到
间。

  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 移动控件。

  备注

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

  如果回发或使用客户端脚本的服务器控件没有包含在 HtmlForm 服务器控件 (
) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 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>


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP