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