前台代码:
<asp:GridView ID="GView1" runat="server" Height="10px" Width="749px"></asp:GridView>
在这里我们使用的是GridView数据控件
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"> 数据导出</asp:LinkButton><br />
通过一个链接按钮触发事件执行
后台代码:
protected void LinkButton1_Click(object sender, EventArgs e)
{
Export_To_Excel(GView1); //自定义函数,如下,函数参数是对应控件的ID号GView1
}
//该方法就是上面触发的事件
public void Export_To_Excel(Control control)
{
GridView gview = (GridView) control;
gview.AllowPaging = false;//禁用Gridview的分页
gview.AllowSorting = false;//禁用Gridview排序
gview.DataBind();
String FileName = DateTime.Now.ToString("yyyy-MM-dd") + "-" + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();
HttpContext.Current.Response.Charset = "GB2312";
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + ".xls");
HttpContext.Current.Response.ContentType = "application/ms-excel"; //设置导出文件格式
HttpContext.Current.Response.Write("<meta http-equiv=Content-Type content=\"text/html; charset=GB2312\">");
gview.Page.EnableViewState = false;
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
gview.RenderControl(hw);
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
//HttpContext.Current.Cache.Remove(gv.ToString());
}
//这个函数是实现数据导出的主体函数
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}
//这个函数必须有,并且是空实现,不然会出现如下的错误
类型“GridView”的控件“GView1”必须放在具有 runat=server 的窗体标记内。
//有时也会出现如下错误
回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
改正的办法就是将
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="t_test.aspx.cs" Inherits="report_Default" %>
中加上 EnableEventValidation="false"