티스토리 뷰

반응형
asp.NET환경에서
엑셀로 다운로드 하는 기능입니다.

그리드뷰의 내용을 엑셀로 저장하기

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"

 

반응형
댓글