public ContentResult ConvertJoinOrLeaveReasonsToContentResult(IQueryable<JoinOrLeaveReason> joinOrLeaveReasons, string fileName)
{
string attachment = string.Format("attachment; filename={0}", fileName);
Response.ClearContent();
Response.AppendHeader("content-disposition", attachment);
Response.Buffer = true;
Response.Charset = string.Empty;
TableStyle tblStyle = new TableStyle();
tblStyle.BorderStyle = BorderStyle.Solid;
tblStyle.BorderColor = Color.Black;
tblStyle.BorderWidth = Unit.Parse("1px");
TableItemStyle headerStyle = new TableItemStyle();
headerStyle.BackColor = Color.LightGray;
StringWriter sw = new StringWriter();
HtmlTextWriter tw = new HtmlTextWriter(sw);
tblStyle.AddAttributesToRender(tw);
tw.RenderBeginTag(HtmlTextWriterTag.Table);
tw.RenderBeginTag(HtmlTextWriterTag.Thead);
{
headerStyle.AddAttributesToRender(tw);
tw.RenderBeginTag(HtmlTextWriterTag.Th);
tw.Write("Date");
tw.RenderEndTag();
headerStyle.AddAttributesToRender(tw);
tw.RenderBeginTag(HtmlTextWriterTag.Th);
tw.Write("Comment");
tw.RenderEndTag();
}
tw.RenderEndTag();
Encoding encoding = sw.Encoding;
tw.RenderBeginTag(HtmlTextWriterTag.Tbody);
foreach(JoinOrLeaveReason joinOrLeaveReason in joinOrLeaveReasons)
{
tw.RenderBeginTag(HtmlTextWriterTag.Tr);
{
tw.RenderBeginTag(HtmlTextWriterTag.Td);
tw.Write(string.Format("{0:yyyy-MM-dd HH:mm:ss}", joinOrLeaveReason.CreateDate));
tw.RenderEndTag();
tw.RenderBeginTag(HtmlTextWriterTag.Td);
tw.Write(string.Format("{0}", joinOrLeaveReason.Comment));
tw.RenderEndTag();
}
tw.RenderEndTag();
}
tw.RenderEndTag();
tw.RenderEndTag();
ContentResult contentResult = new ContentResult();
contentResult.ContentType = "application/ms-excel";
contentResult.Content = sw.ToString();
contentResult.ContentEncoding = Encoding.UTF8;
return contentResult;
}
1. Response 설정 : Header, Buffer 설정
2. ContextResult의 데이터 설정
- HtmlTextWriter를 이용한 Table Build
- Table의 속성은 Attribute를 이용해서 설정해준다.
3. 최종적으로 Context를 TextWriter를 이용해서 얻어준다.