我有一段c#代码如下:
       Page.Response.Clear(); 
        Response.Buffer= true; 
 Page.Response.AppendHeader("Content-Disposition","attachment;filename="+filesName+".xls"); 
Page.Response.ContentType="application/ms-excel" ; 
Response.Charset="utf-8";
Page.Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");
this.EnableViewState =false; 
System.IO.StringWriter tw = new System.IO.StringWriter() ; 
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter (tw); 
this.DataGrid1.RenderControl(hw);
Page.Response.Write(tw.ToString());
Page.Response.End();
        我运行的结果是:
       异常详细信息: System.Web.HttpException: 类型“Button”的控件“DataGrid1__ctl2__ctl0”必须放在具有 runat=server 的窗体标记内。源错误: 
行 148: System.IO.StringWriter tw = new System.IO.StringWriter() ; 
行 149: System.Web.UI.HtmlTextWriter hw = new  System.Web.UI.HtmlTextWriter (tw); 
行 150: this.DataGrid1.RenderControl(hw); 就是这一行出错了
行 151: Page.Response.Write(tw.ToString());
行 152: 堆栈跟踪: [HttpException (0x80004005): 类型“Button”的控件“DataGrid1__ctl2__ctl0”必须放在具有 runat=server 的窗体标记内。]
   System.Web.UI.Page.VerifyRenderingInServerForm(Control control)
   System.Web.UI.WebControls.Button.AddAttributesToRender(HtmlTextWriter writer)
   System.Web.UI.WebControls.WebControl.RenderBeginTag(HtmlTextWriter writer) +17
   System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) +17
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +72
   System.Web.UI.Control.Render(HtmlTextWriter writer) +7
   System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)
   System.Web.UI.WebControls.TableCell.RenderContents(HtmlTextWriter writer)
   System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) +29
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +72
   System.Web.UI.Control.Render(HtmlTextWriter writer) +7
   System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)
   System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) +29
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
   System.Web.UI.WebControls.Table.RenderContents(HtmlTextWriter writer)
   System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) +29
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
   System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +72
   System.Web.UI.Control.Render(HtmlTextWriter writer) +7
   System.Web.UI.WebControls.WebControl.RenderContents(HtmlTextWriter writer)
   System.Web.UI.WebControls.BaseDataList.Render(HtmlTextWriter writer)
   System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
   netapp.TEACH.WebForm1.btnexport_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\netapp\teach\webform1.aspx.cs:150
   System.Web.UI.WebControls.Button.OnClick(EventArgs e)
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
   System.Web.UI.Page.ProcessRequestMain() +1277
不知道错误在哪里??请教还有没有更好的方法,或其它方法也可以(复杂一点没关系)。