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,System.Text.Encoding.UTF8).ToString());
            Response.ContentType = FileType;
            this.EnableViewState = false;
            //String Writer tw = new String Writer();
            System.IO.StringWriter tw = new System.IO.StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(tw);
           
            GridView1.RenderControl(hw);
            Response.Write(tw.ToString());
            Response.End();
        }
        
        public override void VerifyRenderingInServerForm(Control control)
        {
            //base.VerifyRenderingInServerForm(control);要这句报这个错  类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。    不要报    只能在执行 Render() 的过程中调用 RegisterForEventValidation;
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            
            Export("application/ms-excel","导入到Excel中.xls");
        }                  高手给找哈错

解决方案 »

  1.   

    Response.ContentEncoding = System.Text.Encoding.UTF7;
    这句怎么搞成utf7?
      

  2.   

    AJAX下EXCEL不能按原来的方式导出,在UpdatePanel里不能注册导出按钮
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
      <ContentTemplate>
    </ContentTemplate>
      <Triggers>
      </Triggers>
    </asp:UpdatePanel>
      

  3.   

    给你个例子,自己看吧:假设点击按钮bt来下载一个GridView的内容,事件处理过程是这样的void bt_Click(object sender, EventArgs e)
    {
        var p = new myPage();
        var c = CreateGridView(p);  //这个方法负责创建一个GridView放入p.Form.Controls集合内部
        var url = "~/downloads/"+Guid.NewGuid().ToString("n")+".xls";  //动态产生文件名
        var r = this.Page.Response;
        using (var sw = new StreamWriter(this.Page.Server.MapPath(url)))
        {
            c.RenderControl(new HtmlTextWriter(sw));
            r.Write(sw.ToString());
        }
        r.Redirect(url);  //这不但不会刷新当前页面,而且会弹出一个下载窗口。
    }class myPage : Page
    {
        public override void VerifyRenderingInServerForm(Control control)
        {
        }
    }
    其中,MyPage类是当前页面类中定义的另一个类,它关键地是要使用重写方法取消你所遇到的那个安全性检查。