这是一个把Web控件导出为Excel和Word的方法,方法体如下:
         /// <summary>
        /// 将Web控件导出
        /// </summary>
        /// <param name="source">控件实例</param>
        /// <param name="type">类型:Excel或Word</param>
        public void ExpertControl(System.Web.UI.Control source, DocumentType type)
        {
            //设置Http的头信息,编码格式
            if (type == DocumentType.Excel)
            {
                //Excel
                Response.AppendHeader("Content-Disposition", "attachment;filename=Report" + E_ID + ".xls");
                Response.ContentType = "application/ms-excel";
            }
            else if (type == DocumentType.Word)
            {
                //Word
                Response.AppendHeader("Content-Disposition", "attachment;filename=Report" + E_ID + ".doc");
                Response.ContentType = "application/ms-word";
            }
            Response.Charset = "GB2312";
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");            //关闭控件的视图状态
            source.Page.EnableViewState = false;            //初始化HtmlWriter
            System.IO.StringWriter writer = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(writer);
            source.RenderControl(htmlWriter);            //输出
            Response.Write(writer.ToString());
            Response.End();
        }但是在一个"Table控件"中再使用一个“GirdVIew”控件后,将Table控件导出时就会抛出异常,异常信息如下:
“source.RenderControl(htmlWriter);”:类型“GridView”的控件“eduresume”必须放在具有 runat=server 的窗体标记内。直接导出Talbe控件时,是很好使得,但在里面使用GirdView后就会抛异常,不明白,GridVIew本来不就是Table吗???在Table控件里面加个Panel,然后再Panel里再放入GirdView也还是出现异常。。请问这是什么原因,应该怎样解决

解决方案 »

  1.   

    必须放在具有 runat=server 的窗体标记内。控件放在form标签内部
      

  2.   


    子夜,你好窗体标记啥玩意???LZ放在Panel里面不就有Runat=Server了吗???如果是Table控件中再放有一个Table控件,然后把第一个Table控件导出也会出现像楼主这样的情况吗???
      

  3.   


    那就是说不能在Table控件内部使用GridView控件了???
      

  4.   

    public override void VerifyRenderingInServerForm(Control control)
            {
                //base.VerifyRenderingInServerForm(control); 
            }后台加上面代码试试
      

  5.   

    错误提示说的很清楚了, GridView 需要放在runat="server" 的 Form 内如果没有 可以重写 VerifyRenderingInServerForm 方法目的是屏蔽掉验证
      

  6.   

    <form runat="sever">
    ..
    </form>
      

  7.   

    Gridview  是服务器控件啊。 所以要放在
    <body>
        <form id="form1" runat="server">
          这里<GridView>  
          </form>
    </body>