CAFE

ASP.NET 질문

GridView 엑셀 다운로드할 때 페이징(셀병합 포함) 문제 질문드립니다!! ㅠㅠ

작성자햇님아슈슈|작성시간12.03.21|조회수1,274 목록 댓글 0

QnA

 

사용언어 (칠해주세요) => (C#,VB)

사용툴 (VS) : Visual Studio 2010

운영체제 (OS) : Windows 7

상세언어(칠해주세요.) => 1) ASP.NET, 2) ASP.NET MVC, 3) ASP.NET AJAX



염치없이 또 질문을 하러 왔습니다 ㅠㅠ.. 죄송해요

다름이 아니고 GridView 페이징 된 아이를 엑셀로 다운로드 하는 방법에 대해서 여쭤보려고 왔는데요..

내용만 엑셀로 출력하려면(체크박스를 제외한) 대부분의 답변들은 쿼리를 한 번 더 돌리라는 식이었던 것 같습니다. 

근데 저의 문제는 셀 병합이라는 겁니다...


헤더에 셀 병합도 해야하고 엑셀로 다운 받았을 때 셀 병합이 된 상태에서의 표를 보여줘야 하는데 어찌 해야할 지 모르겠습니다.

그냥 쿼리를 돌리면 셀을 병합했던 아이는 사라지게 되고, 출력해서 나온 표를 뽑자니 페이징이 되어 있어서 제대로 나오지 않습니다.


다들 어떻게 처리하셨는지 궁금합니다 ㅠㅠ 그렇다고 row수가 몇 천개나 되는 걸 페이징 안할 수도 없고 난감하네요 ㅠㅠ

지기님 블로그에서 글도 봤는데 그냥 문제점이 있다고만 하시고 대용량 다운로드로 넘어가셔서 ㅠㅠ... 잉....


Repeater를 쓰자니 페이징의 문제도 심각한 것 같더라구요 ㅠㅠ 새로고침에 버튼에 뭐다뭐다 조건이 까다로워서...


헤더에 셀 병합하는 부분은 이렇게 적용했습니다. 이 이벤트를 GridView에서 OnRowCreated될 때 발생시켰는데요..


#region 헤더 셀 병합

protected void GridView_Merge_Header_RowCreated(object sender, GridViewRowEventArgs e)

{

if (e.Row.RowType == DataControlRowType.Header)

{

GridView oGridView = (GridView)sender; // 헤더를 설정한다

// 그리드 뷰의 개별 행에서 0번째 줄에 헤더 행을 추가한다

GridViewRow oGridViewRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert);


// 테이블 셀 객체를 초기화

TableCell oTableCell = new TableCell();

// Department 추가

oTableCell.Text = "선택";

oTableCell.ColumnSpan = 1; // 레코드 셋 컬럼의 2열을 병합한다

oGridViewRow.Cells.Add(oTableCell);


// Employee 추가

oTableCell = new TableCell();

oTableCell.Text = "코드";

oTableCell.ColumnSpan = 3; // 레코드 셋 컬럼의 3열을 병합한다

oGridViewRow.Cells.Add(oTableCell);


oGridView.Controls[0].Controls.AddAt(0, oGridViewRow);

}

}

#endregion



이 병합의 문제도... 한 줄 밖에 할 수 없다는 겁니다 ㅠㅠ.. 저는 헤더에 두 세 줄도 넣고 싶거든요 ㅠㅠ

셀 병합을 여러 번 할 수 있는 방법 없나요? ㅠㅠ ㅋㅋ CS에서 string 형식으로 HTML코드를 넣는 것 외에....



또한 엑셀 다운로드 하는 부분은 이렇습니다. 엑셀이라는 버튼을 누르면 발생하는 이벤트 인데요..  ctlList가 GridView의 id 값입니다.


/// <summary>

/// 전체 엑셀 다운로드

/// </summary>

protected void Excel_Click(object sender, ImageClickEventArgs e)

{

if (ctlList.Rows.Count == 0)

{

script = "ExcelErrorMsg()";

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "", script, true);

}

else

{

Response.Clear();

//파일이름 설정

string fName = string.Format("Export_{0}.xls", DateTime.Now.ToString("yyyyMMddHHmmss"));

//헤더부분에 내용을 추가

Response.AddHeader("Content-Disposition", "attachment;filename=" + fName);

Response.Charset = "UTF-8";

Response.ContentEncoding = System.Text.Encoding.Default;

Response.ContentType = "application/unknown";


//컨텐츠 타입 설정


StringWriter SW = new StringWriter();

HtmlTextWriter HW = new HtmlTextWriter(SW);


ctlList.RenderControl(HW); 

Response.Write(SW.ToString());


Response.End();


HW.Close();

SW.Close();

}

}


또 도움만 받고 가네요.. 감사합니다..



혹시 코드가 깨질지도 몰라 파일도 첨부합니다 ㅠㅠ

쥐뿔도 모르면서 하고 있는 저의 답답함은 오죽하겠습니까 ㅠㅠ 

위에서 하라니깐 해야죠... 힘이 있나요 흑흑

이런 불쌍한 절 위해 한 번 더 도와주세요 ㅠㅠ.. 


말로 설명해주시면 뭔 소린지 잘 못알아듣습니다 ㅠㅠ  백만번 읽고 검색해도.. ㅠㅠ 

제 머리가 안좋아서 그런지 모르겠더라구요 예제를 주시면 열심히 공부하겠습니다.. 


감사합니다...!!!!!


첨부파일 help_help.txt


다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼