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 服务器控件 (