日期:2014-05-20  浏览次数:20488 次

DataGrid中使用LinkButton导出excel出错
在将DataGrid的数据导出到excel表中时提示:类型“LinkButton”的控件“DataGrid1__ctl2_cmdDel”必须放在具有   runat=server   的窗体标记内

我看了LinkButton是放在DataGrid中,有runat=server   在整个窗体中也是:
<body   MS_POSITIONING= "GridLayout ">
<form   id= "Form1 "   method= "post "   runat= "server ">
...

</form>
</body>
造成导出excel出错.
导出excel函数: 
Sub   TOEXCEL()

                Response.Clear()
                Response.Buffer   =   True
                Response.Charset   =   "GB2312 "
                Response.AppendHeader( "Content-Disposition ",   "attachment;filename=FileName.xls ")
                Response.ContentEncoding   =   System.Text.Encoding.GetEncoding( "GB2312 ")   '设置输出流为简体中文
                Response.ContentType   =   "application/ms-excel "   '设置输出文件类型为excel文件。  
                Me.EnableViewState   =   False
                Dim   myCItrad   As   System.Globalization.CultureInfo   =   New   System.Globalization.CultureInfo( "ZH-CN ",   True)
                Dim   oStringWriter   As   System.IO.StringWriter   =   New   System.IO.StringWriter(myCItrad)

                Dim   oHtmlTextWriter   As   System.Web.UI.HtmlTextWriter   =   New   System.Web.UI.HtmlTextWriter(oStringWriter)

                Me.DataGrid1.RenderControl(oHtmlTextWriter)
                Response.Write(oStringWriter.ToString())
                Response.End()
        End   Sub

------解决方案--------------------
在页面中加上public override void VerifyRenderingInServerForm(Control control) { return false; }
------解决方案--------------------
我遇到过,在用DataGrid或Table导出Excel的时候。

遇到问题的情况是:在DataGrid的里面设置某个列的类型为“按钮列”,就会出现那中情况。
我的方法是把按钮列改成了“超连接列”,就好使了。但如果想实现一些command,只有靠参数把条件传回来再处理了。原因分析是:超连接列是前台代码,而按钮列是后台。

cpp2017(慕白兄)的方法可以试验下,虽然不知道原理。
------解决方案--------------------
在导出前将该列隐藏就可以了