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