티스토리 뷰
그리드뷰의 내용을 엑셀로 저장하기
protected void BtnDownLoadExcel_Click(object sender, 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);
//한글 정상표시되도록
Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.Default;
//페이징 되어있을경우 전체리스트가 출력되지 않으므로 잠시 중지
GridView.AllowPaging = false;
GridView.DataBind();
EnableViewState = false;
//아래 주석처리된 부분은 페이지상에 <%%>를 써서 렌더링 하는 부분이 없을때만 동작합니다.
//마스터페이지 이용시 오류를 피해가는 방법입니다.
//HtmlForm frm = new HtmlForm();
//Controls.Add(frm);
//frm.Controls.Add(GridView);
//frm.RenderControl(htmlWriter);
// 엑셀에서 자동 숫자변환 안되도록 하는 스타일
string strStyle = @"<style>td { mso-number-format:\@; } </style>";
GridView.RenderControl(htmlWriter);
// 엑셀에서 자동 숫자변환 안되도록 스타일 적용
Response.Write(strStyle);
Response.Write(stringWriter.ToString());
Response.End();
//현재 페이징으로 복귀.
GridView.AllowPaging = true;
GridView.DataBind();
}
마스터페이지 사용시 오류가 발생할수 있는데요.
오류가 발생하면 아래 사항을 적용해서 테스트 해본다.
renderControl 오류나 form관련 오류가 발생시)
//렌더링 오류시
public override void VerifyRenderingInServerForm(Control control)
{
// base.VerifyRenderingInServerForm(control);
}
문제점 이방법은 보안이슈가 있을수도 있음
PAGE DIRECTIVE 에 다음처럼 설정
EnableEventValidation="false"