기존 엑셀 내보내기 방법으로 DataGrid에선 문제가 없지만 GridView를 사용하면

형식 'GridView'의 컨트롤 'gvList'은(는) runat=server 구문과 함께 form 태그 내부에 와야 합니다.

설명: 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 스택 추적을 검토하여 발생한 오류 및 코드에서 오류가 발생한 위치에 대한 자세한 정보를 확인하십시오.

예외 정보: System.Web.HttpException: 형식 'GridView'의 컨트롤 'gvList'은(는) runat=server 구문과 함께 form 태그 내부에 와야 합니다.


와 같은 오류를 나타냅니다.

이를 해결하기 위해선

public override void VerifyRenderingInServerForm(Control control)
{
        // Confirms that an HtmlForm control is rendered for the specified ASP.NET server control at run time.
}

위의 구문을 페이지 내에 추가해 주면 깔끔하게 해결~

이렇게 하면 GridView를 통해 엑셀로 내보내기가 가능합니다~

엑셀로 내보내는 소스는

    private void Button1_Click(object sender, System.EventArgs e)
    {
        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=DataGrid.xls");
        Response.ContentType = "application/vnd.xls";

        System.IO.StringWriter stringWriter = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
        DataGrid1.RenderControl(htmlWriter);

        Response.Write(stringWriter.ToString());
        Response.End();
    }

AND