一、在实现"将GridView中的数据导出到Excel中"的时候出现了如下错误:
用户代码未处理 InvalidOperationException 只能在执行 Render() 的过程中调用 RegisterForEventValidation;
原因:
EnableEventValidation属性是 .NET Framework 2.0 中是新增的属性,默认的情况下该属性的值为true;通过这个新增的功能ASP.NET会检查 POST方法中的所带的参数,如果认为不合法,就会抛出异常。这个设计的目的是为了防止恶意用户利用post 方法发送一些恶意数据,但是有时也会出现类似上面的错误。 只要禁止这个功能,问题就能得到解决。可以通过以下两种途径解决:
1、在 Web.Config文件中:在<system.web></system.web>标记中添加如下代码:
<system.web>
<pages enableEventValidation="false"> </pages>
</system.web>
2、在具体的.aspx页面的源代码中修改代码,如下:
<%@ Page Language="C#" EnableEventValidation="false" AutoEventWireup="true" CodeFile="GridView_Export_Excel.aspx.cs" Inherits="GridView_Export_Excel" %>
-----------------------------------------------------------------------------------
二、在Ajax中实现"将GridView中的数据导出到Excel中"的时候出现了如下错误:
Details Error parsing near '<div><table cells'.
原因:
导出Excel的按钮放置在<UpdatePanel></UpdatePanel>里面,点击按钮后只输出了 “<div><table cells”,生成的容器表--html代码被截断了。
解决方法:
放到<UpdatePanel></UpdatePanel>外面(注:不要放在任何的<UpdatePanel> </UpdatePanel>中)
-----------------------------------------------------------------------------------
三、在带母版页中实现"将GridView中的数据导出到Excel中"的时候出现了如下错误:
GridView控件所在的form中未runat=server. <form runat="server">是在母版页中 ,子页中没有<form>.
解决方法:
/// <summary>
/// 重载方法——VerifyRenderingInServerForm
/// </summary>
/// <param name="control"></param>
public override void VerifyRenderingInServerForm(Control control)
{
}
页面更改: EnableEventValidation="false"
-----------------------------------------------------------------------------------
四、在分页中实现"将GridView中的数据导出到Excel中"的时候出现了如下错误:
由于GridView的内容可能是分页显示的,因此,这里在每次导出excel时,先将GridView的allowpaging属性设置为 false,然后绑定一下,确保搂到所有数据。
解决方法:
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
CreateSql();//我的绑定GridView1的方法
--------------------------------------------------------------------------------------------------------
以下为我的导出Excel方法,仅供参考:
/// <summary>
/// 导出EXCEL
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnExcel_Click(object sender, EventArgs e)
{
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
CreateSql();//我的绑定GridView1的方法
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
Response.ContentType = "application/excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView1.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
}