我的导出到Excel出现一个这样的错误:只能在执行 Render() 的过程中调用 RegisterForEventValidation; 
我做了一个小例子实出了GridView数据导出到Excel,后来我就把代码复制到我写的程序中去,然后就出了一个这样的错误,这是为什么呢?
代码如下:  //将GridView控件中数据以反指定格式输出
    private void Export(string FileType, string FileName)
    {
        Response.Charset = "GB2312";
        Response.ContentEncoding = System.Text.Encoding.UTF7;
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
        Response.ContentType = FileType;
        this.EnableViewState = false;
        System.IO.StringWriter tw = new System.IO.StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(tw);
        this.gvExcel.RenderControl(hw);
        Response.Write(tw.ToString());
        Response.End();    }    public override void VerifyRenderingInServerForm(Control control)
    {
    }
  解发事件
  protected void btnOut_Click(object sender, EventArgs e)
    {
        Export("application/ms-excel", "book1.xls");
    }

解决方案 »

  1.   

     public override void VerifyRenderingInServerForm(Control control) 
        { 
             base.VerifyRenderingInServerForm(control);
        } 如果写了这一段代码,又会出现以下的借误:
    类型“GridView”的控件“gvExcel”必须放在具有 runat=server 的窗体标记内。 
      

  2.   

     sqtjzhi = "  and x.sq=" & m02 & " and jd='" + ljd + "'"
                'sql = "select  x.name,case x.H_bzid when 'wz_tjxx_zh_djb.aspx'  then 'tj/wz_tjxx_zh_djb.aspx' when '../hebeitj/hb_tjxx_djb.aspx' then 'hebeitj/hb_tjxx_djb.aspx' when '../wsbxm/tjxx_hch.aspx' then 'wsbxm/tjxx_hch.aspx' end as H_bzid,d.presj  ,d.nextsj,d.bz,d.jcid,d.Avgsbp,d.Avgdbp from ddsf d left  join xyjcb x on d.jcid=x.id where    d.nextsj<='" & Now.ToShortDateString.ToString & " '   and x.status=0  " & sqtjzhi & "  order by  d.nextsj"
                sql = "select  x.name as 姓名,d.Avgsbp as 平均血压SBP,d.Avgdbp as 平均血压DBP,convert(varchar(10),d.presj,121) as 上次随访时间  ,convert(varchar(10),d.nextsj,121) as 下次随访 from ddsf d left  join xyjcb x on d.jcid=x.id where    d.nextsj<='" & Today.AddDays(14).ToString & " '   and x.status=0  " & sqtjzhi & " " + strssrq + "  order by  d.nextsj"            Dim adapter As New SqlDataAdapter(sql, con)
                Dim ds As New DataSet
                adapter.Fill(ds)
                DataGrid1.DataSource = ds.Tables(0)
                DataGrid1.DataBind()
                con.Close()
                con.Dispose()
                con = Nothing
                ''
                Response.Clear()
                Response.Charset = "GB2312"
                Response.ContentEncoding = System.Text.Encoding.UTF8
                'Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name))
                ''Response.ContentType = "application/ms-excel"
                ''
                Response.ContentType = "application/vnd.ms-excel"
                '   从Content-Type   header中去除charset设置               Response.Charset = ""            '   关闭   ViewState   
                Me.EnableViewState = False
                Dim tw As New System.IO.StringWriter
                Dim hw As New System.Web.UI.HtmlTextWriter(tw)
                '   获取control的HTML   
                DataGrid1.RenderControl(hw)
                '   把HTML写回浏览器   
                Response.Write(tw.ToString())
                Response.End()
                Response.AddHeader("content-disposition", "attachment;filename=myfile.xls")<asp:datagrid id="DataGrid1" runat="server" Font-Names="宋体" Font-Size="9pt" Height="100%" Width="100%"
    BorderStyle="None" BorderWidth="1px" BorderColor="#CC9966" BackColor="White" CellPadding="4">
    <SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
    <AlternatingItemStyle BackColor="#FFCC99"></AlternatingItemStyle>
    <ItemStyle BorderWidth="2px" ForeColor="#330099" BorderStyle="Solid" BorderColor="Black" BackColor="White"></ItemStyle>
    <HeaderStyle Font-Bold="True" HorizontalAlign="Center" BorderWidth="2px" ForeColor="#FFFFCC"
    BorderStyle="Solid" BorderColor="Black" BackColor="#990000"></HeaderStyle>
    </asp:datagrid>
      

  3.   

    必须写这个,但是把里面的方法注释就可以了,如下:
    public override void VerifyRenderingInServerForm(Control control) 

        //base.VerifyRenderingInServerForm(control); 

      

  4.   

    导出成功了,可是导出来的效果不好,怎么设置excel的样式,像直接打开excel的那种一样,我导出来的特难看
      

  5.   

    不知道你的“物难看”是什么样的,你想改变的化,可以在CS代码导出时作一下处理
              
      ///隐藏部分列,不予导出
                this.Gridview1.Columns[9].Visible = false;
                this.Gridview1.Columns[8].Visible = false;
                this.Gridview1.Columns[7].Visible = true;
     ///设置表头字体颜色
                this.Gridview1.HeaderStyle.ForeColor = Color.Black;
     ///处理表头自动排序的超链接,导出后就没有表头的超链接
                while (i < Gridview1.Columns.Count)
                {
                    Gridview1.Columns[i].SortExpression = "";
                    i++;
                }

    还需要什么设置的话,可以自己试试;
    另处好像还可以通过设置Excel模板的,没试过,你可以试试!