好的,情况就是这样。
我将 Gridview 内容导出到 Excel 工作表。基本上我有一个调用方法的按钮(例如btnExcel_Clicked)。后面的c#代码就是这样
protected void btnExcel_Click ( object sender, EventArgs e )
{
Response.Clear( );
Response.AddHeader( "content-disposition", "attachment; filename=" + "test" + "_Registration_Forms.xls" );
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
Page.EnableViewState = false;
System.IO.StringWriter stringWrite = new System.IO.StringWriter( );
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter( stringWrite );
clientGridView.RenderControl( htmlWrite ); //this is the name of my gridview
Response.Write( stringWrite.ToString( ) );
Response.End( );
}
当按钮触发时,它会显示错误:
“System.Web.HttpException:'GridView' 类型的控件'clientGridView' 必须放置在带有 runat=server 的表单标记内。”
表明以下代码是发生错误的地方:
Line 217: clientGridView.RenderControl( htmlWrite );
如果我的表单确实包含 runat="server" ,为什么会这样?
我怀疑这可能是由于我使用页面的方式,gridview 包含在更新面板中(不确定这是否会导致任何问题?)并且我在页面顶部有一些 javascript 允许页面刷新每个搜索查询。看起来像这样:
<script type="text/javascript">
function RefreshUpdatePanel() {
__doPostBack('<%= txtClientName.ClientID %>', '');
$('#totals').fadeIn('slow');
$('#clientGrid').fadeIn('slow');
$('#btnReport').fadeIn('slow');
};
</script>
每次我在 txtClientName 中输入值时,这基本上都会触发我的更新面板
我不确定这将如何导致这样的错误。如果有人能对此有所了解或引导我朝正确的方向前进,我将不胜感激。这是因为我的 gridview 放置在更新面板中吗?啊。。
提前致谢!
编辑:好的第一个问题解决了......但是出现了一个新问题。
通过将此代码放在我的代码后面:
public override void VerifyRenderingInServerForm ( System.Web.UI.Control control )
{
//confirms that an HtmlForm control is rendered for the
//specified ASP.NET server control at run time.
}
我可以克服那个错误,但是出现了一个新错误:
System.InvalidOperationException: RegisterForEventValidation can only be called during Render();
呸。
编辑2:好的问题大部分解决了。通过在@ Page 部分中输入 EnableEventValidation ="false",此功能正常。但是,这现在不安全有没有办法解决这个问题?
编辑 3:另外,有没有办法在不丢失 microsoft excel 中的单元格边框的情况下实现这一点?