将gridview数据导出到Excel工作表中会导致错误

我有一个asp.net应用程序,在我显示一个网格视图的代码如下所示

<center><asp:GridView ID="GridView1" runat="server" RowStyle-HorizontalAlign="Center" CellPadding="4" ForeColor="#333333" GridLines="None"> <AlternatingRowStyle BackColor="White" /> <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /> <RowStyle HorizontalAlign="Center" BackColor="#FFFBD6" ForeColor="#333333"></RowStyle> <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /> <SortedAscendingCellStyle BackColor="#FDF5AC" /> <SortedAscendingHeaderStyle BackColor="#4D0000" /> <SortedDescendingCellStyle BackColor="#FCF6C0" /> <SortedDescendingHeaderStyle BackColor="#820000" /> </asp:GridView> </center> <center> <table> <tr> <td> <asp:Button ID="btnWordConvert" runat="server" Text="Button" onclick="btnWordConvert_Click" /> </td> </tr> </table> </center> 

在cs

  protected void btnWordConvert_Click(object sender, EventArgs e) { GridView1.AllowPaging = false; GridView1.DataBind(); Response.ClearContent(); Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Customers.doc")); Response.Charset = ""; Response.ContentType = "application/ms-word"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); GridView1.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); } 

我得到GridView1.RenderControl(htw);错误GridView1.RenderControl(htw); 行和错误是Control 'ctl00_ContentPlaceHolder1_GridView1' of type 'GridView' must be placed inside a form tag with runat=server. 任何帮助表示赞赏。

你得到这个的原因是,一个服务器控件是通过调用GridView.RenderControl(HtmlTextWriter)在一个表单标签之外被渲染的。

您可以通过重写VerifyRenderingInServerForm来避免这种情况 。

看看这个 。

把你的代码放在表单标签中。

 <form id="form1" runat="server"> //put your code here </form> 

请确保你的gridview是在表单标签内。

  <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" RowStyle-HorizontalAlign="Center" CellPadding="4" ForeColor="#333333" GridLines="None"> ... ... ... </asp:GridView> </form> 

提出以下方法

 public override void VerifyRenderingInServerForm(Control control) { /* Verifies that the control is rendered */ }