从GridView导出数据到EXCEL前台代码:
<body style="font-size:12px;">
<form id="form1" runat="server">
<div>
<div class="Noprint">
<table id="Table1" cellspacing="0" class="Table01" cellpadding="0" width="100%" border="0">
<tr>
<td valign="middle" style="height: 25px;">
<input class="ButtonCss" style="width: 48px;" onclick='document.execCommand("print")' type="button" value="打印" />
<asp:Button ID="btnExcel" runat="server" Text="导出到Excel" CssClass="ButtonCss" OnClick="btnExcel_Click"></asp:Button>
</td>
</tr>
</table></div>
<table id="Table2" width="100%" border="0" class="Table01" cellpadding="0" runat="server" cellspacing="0">
<tr>
<td><asp:GridView ID="GV1" runat="server" Width="100%" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="StaffName" HeaderText="姓名" />
<asp:BoundField DataField="DeptName" HeaderText="部门" />
<asp:BoundField DataField="RoleName" HeaderText="职位" />
<asp:BoundField DataField="StaffNum" HeaderText="人员编号" />
</Columns>
</asp:GridView>
</td>
</tr>
</table>
</div>
</form>
</body>
后台:
protected void btnExcel_Click(object sender, EventArgs e)
{
//导出到excel
GVStaff.AllowPaging = false;
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=人员信息.xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
this.EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
GV1.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
}提示错误:类型“GridView”的控件“GV1”必须放在具有 runat=server 的窗体标记内。”
大家帮忙看看是什么原因

解决方案 »

  1.   

    我想可能是你前面用了Response.Clear();,把页面上的控件都清除掉了,因为GV1要放在Form(runat="Server")里才能运行正常,所以在Render的时候,就会出这样的提示了
      

  2.   

    我把Response.Clear();这句去掉了,还是不行啊
      

  3.   

    你把这段代码加在cs 文件中public override void VerifyRenderingInServerForm(Control control)
        {
            // base.VerifyRenderingInServerForm(control);
        }在再这页的aspx文件<%@ Page Language="C#" AutoEventWireup="true"  %>
    中加上EnableEventValidation="false"
    肯定没有问题
      

  4.   

    sunrunming() ,兄弟,太感谢你了,终于好了