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

时间:2013-12-26 08:45:49

标签: c# asp.net excel gridview

我有一个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>

in 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);行收到错误,错误为Control 'ctl00_ContentPlaceHolder1_GridView1' of type 'GridView' must be placed inside a form tag with runat=server.感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

您获得此功能的原因是,通过调用GridView.RenderControl(HtmlTextWriter)表单标记之外呈现服务器控件。

您可以通过覆盖VerifyRenderingInServerForm来避免这种情况。

查看this

答案 1 :(得分:1)

将您的代码放在表单标记中。

<form id="form1" runat="server">

   //put your code here
</form>

答案 2 :(得分:0)

请确保您的gridview位于表单标记内。

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

答案 3 :(得分:0)

采用以下方法

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