在WEB界面上的GridView导出到EXCEL出错,请求帮忙!导出的代码是在网上找的    protected void LinkButton1_Click(object sender, EventArgs e)
     {
         Response.Clear();
         Response.Buffer = true;
         Response.Charset = "GB2312";
         Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls");
         // 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!
         Response.ContentEncoding = System.Text.Encoding.UTF7;
         Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
         System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
         System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);         this.GridView1.RenderControl(oHtmlTextWriter);
         Response.Output.Write(oStringWriter.ToString());
         Response.Flush();
         Response.End();
     }
   public override void VerifyRenderingInServerForm(Control control)
   { }但是报错,在
this.GridView1.RenderControl(oHtmlTextWriter);
说:
只能在执行Render()的过程中调用RegisterForEventValidation;    
怎么回事呢?   

解决方案 »

  1.   

    Response.Charset = "GB2312";
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).ToString());
            Response.ContentType = FileType;
            this.EnableViewState = false;
            StringWriter tw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(tw);
            GridView1.RenderControl(hw);
           Response.Output.Write(tw.ToString());
            Response.Flush();
            Response.End();
      

  2.   

     //这个事件必须加
        public override void VerifyRenderingInServerForm(Control control)
        {
            //base.VerifyRenderingInServerForm(control);
        }
      

  3.   

    第一步:将添加到需要导出功能的页面中
            //用于导出Excel时忽略GridView验证的问题
            public override void VerifyRenderingInServerForm(Control control) { }
    第二步:<%@ Page Language="C#" EnableEventValidation="false" 第三步:如果你使用了UpdatePanel的话<asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <Triggers>
                    <asp:PostBackTrigger ControlID="导出按钮的ID" />
                </Triggers>
                <ContentTemplate>其实不如用DataGrid的这个功能,比较简单也不需要这么多的操作
      

  4.   

    那你
    把这句注释了呀
    this.GridView1.RenderControl(oHtmlTextWriter); 晕
    注释的方法:
    选中要注释的一行或多行;
    按下组合键 Ctrl +K +C
      

  5.   

    好的,问题解决了,谢谢大家我看了导出的EXCEL文件如果,我想通过一个按钮,将导出的数据的某一行传入到页面的一个TextBox上显示,该怎么做呢?比如,我只导出了一行数据,但是EXCEL会生成一个表头,数据在第二行,我想要获取第二行的第二列该怎么办?
      

  6.   

    好的,问题解决了,谢谢大家 现在我想通过一个按钮,将导出的数据的某一行某一列传入到页面的一个TextBox上显示, 该怎么做呢? 比如,我只导出了一行数据,但是EXCEL会生成一个表头,数据在第二行, 我想要获取第二行的第二列 该怎么办? 
      

  7.   

     public static void ExportToExcel(Control ctl, string FileName)
            {
                HttpContext.Current.Response.Charset = "UTF-8";
                HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
                HttpContext.Current.Response.ContentType = "application/ms-excel";
                HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName);
                ctl.Page.EnableViewState = false;
                System.IO.StringWriter tw = new System.IO.StringWriter();
                HtmlTextWriter hw = new HtmlTextWriter(tw);
                ctl.RenderControl(hw);
                HttpContext.Current.Response.Write(tw.ToString());
                HttpContext.Current.Response.End();
            }
    这是我使用的方法,现在正用着呢,你可以试一下看好用不
      

  8.   

    出现如下“只能在执行 Render() 的过程中调用 RegisterForEventValidation的错误提示错误”时,解决方案是:
    有两种方法可以解决以上问题:
    1.修改web.config(不推荐)<pages enableEventValidation ="false" ></pages>
    2.直接在导出Execl的页面修改 
    <%@ Page Language="C#" EnableEventValidation = "false" AutoEventWireup="true"
     CodeFile="ExportGridView.aspx.cs" Inherits="ExportGridView" %>本文出自 51CTO.COM技术博客
      

  9.   

    http://hi.baidu.com/fxec/blog/item/f143fbdcc8abf9adcc116651.html
    这里是解决方法
      

  10.   

    http://hi.baidu.com/fxec/blog/item/f143fbdcc8abf9adcc116651.html
    这里是解决方法,去试试看