Python语言技术文档

微信小程序技术文档

php语言技术文档

jsp语言技术文档

asp语言技术文档

C#/.NET语言技术文档

html5/css技术文档

javascript

点击排行

您现在的位置:首页 > 技术文档 > C#/.NET入门教程

Asp.net中GridView导出遇到的两个问题和解决方法

来源:中文源码网    浏览:156 次    日期:2024-04-28 19:35:06
【下载文档:  Asp.net中GridView导出遇到的两个问题和解决方法.txt 】


Asp.net中的GridView导出遇到的两个问题和解决方法
对于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 控件。 语法: C# 复制代码 代码如下: 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(不推荐)

相关内容