ASP.NET Chart Controls with ASP.NET MVC
2014. 3. 19. 20:57ㆍWEB
.NET Framework 4부터 Chart Control이 추가되었습니다. .NET Framework 3.5에서도 Install 파일 설치를 통해 Chart Control을 사용할 수 있습니다. Chart Control은 매우 유려하고 강력함에도 불구하고 ASP.NET WebForm과 Windows Application만 지원하고 있습니다. 하지만 ASP.NET MVC에서 사용할 수 있는 방법이 존재하며, 여기에선 ASP.NET MVC를 기준으로 Chart Control에 대한 정리를 드리고자 합니다.
Chart Control의 필요성
일단 Chart Control을 왜 써야 하는지 핵심목적은 다음과 같으며, MS의 Chart Control은 이 목표에 완벽하게 부합합니다.
- 복잡한 수식/통계 정보를 기술적 분석이 용이하도록 시각적 형태로 변환하는 목적
- 정보를 시각적으로 표현하여 동향과 흐름, 추세를 쉽게 파악하고 예측하는데 도움을 줄 수 있다
- 재무정보, 방문자정보 등의 분석 및 통계정보에 대표적으로 사용
Web에서 Chart Control의 종류/비교
MS의 Chart Control을 사용하기 이전에, 그 외 사용 가능한 대안은 Third Party Chart컨트롤을 이용하는 것인데 그 중에서도 크게 부각되는 Javascript/HTML5 Chart와 비교해보면 장단점은 아래와 같습니다.
구분 | Server Side | Client Side |
---|---|---|
구현 | Server Side에서 Image를 생성하여 표현하는 것이 일반적 | Javascript 또는 HTML5(Canvas, SVG)를 활용하여 표현 |
장점 | Client에 높은 호환성을 가진 차트를 출력하며, 구현이 단순하고 쉽다. | 서버에 낮은 부하를 주거나 거의 주지 않으며 Javascript를 통하여 굉장히 동적인 구성이 가능하다. |
단점 | 서버에 좀 더 높은 부하를 주며, 이미지로 출력하는 경우가 많기 때문에 정적이다. | Javascript는 개발비용이 높고 HTML5는 Client Side에 대한 호환성이 떨어지며, 둘다 모두 상대적으로 코드가 분산되고 복잡성이 높은 편이다. |
예제 | http://www.codeproject.com/Articles/235117/ASP-NET-Chart-Control | http://omnipotent.net/jquery.sparkline |
ASP.NET Chart Controls의 특징
- 35가지 차트 유형 제공
- 3D차트지원, 높은 스타일링 및 레이아웃 자유도 지원
- C#을 통한 강력한 개발 Performance
- Click 이벤트 지원 및 Tooltip을 통한 Chart Drill-down 지원
How to use with ASP.NET MVC
- 다음 Reference를 프로젝트에 추가합니다. System.Web.UI.DataVisualization.Charting
- 다음과 같이 Chart Control을 출력하는 Action을 작성합니다. 12345678910111213141516171819202122232425262728293031323334353637383940414243
public
ActionResult ChartImage(SeriesChartType? chartType,
int
numberOfValue = 5,
int
numberOfSeries = 2)
{
Chart chart =
new
Chart();
Title title =
new
Title(
"Price enquiries"
, Docking.Top,
new
System.Drawing.Font(
"Trebuchet MS"
, 14, System.Drawing.FontStyle.Bold), System.Drawing.Color.FromArgb(26, 59, 105));
chart.Titles.Add(title);
chart.ChartAreas.Add(
"ChartArea 1"
);
chartType = chartType ==
null
? chartType = SeriesChartType.Area : chartType;
numberOfSeries = numberOfSeries > 0 ? numberOfSeries : 2;
numberOfValue = numberOfValue > 0 ? numberOfValue : 5;
Random rnd =
new
Random(Guid.NewGuid().GetHashCode());
for
(
int
i = 0; i < numberOfSeries; i++)
{
chart.Series.Add(
new
Series(
"Series"
+ i) { ChartType = chartType.Value });
//계열
Dictionary<DateTime,
int
> dataSource =
new
Dictionary<DateTime,
int
>();
for
(
int
j = 0; j < numberOfValue; j++)
{
dataSource.Add(DateTime.Now.AddDays(j), rnd.Next(1, 50));
}
chart.Series[
"Series"
+ i].Points.DataBind(dataSource,
"Key"
,
"Value"
,
string
.Empty);
}
chart.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
chart.BorderColor = System.Drawing.Color.FromArgb(26, 59, 105);
chart.BorderlineDashStyle = ChartDashStyle.Solid;
chart.BorderWidth = 2;
chart.Legends.Add(
"Legend1"
);
//범례
chart.Width = 400;
chart.Height = 200;
chart.BackColor = Color.White;
byte
[] image;
using
(MemoryStream stream =
new
MemoryStream())
{
chart.SaveImage(stream, ChartImageFormat.Png);
image = stream.ToArray();
}
return
File(image.ToArray(), MimeMapping.GetMimeMapping(
".png"
));
}
- View에서 작성한 Action을 출력합니다.
1
<img src=
"@Url.Action("
ChartImage
")"
/>
- 결과 이미지
System.Web.Helpers를 이용한 방법
System.Web.Helpers에서도 간단히 Chart를 생성할 수 있도록 지원하고 있습니다. 하지만, 간단한 만큼 Styling이나 Chart Type에 대한 지원이 상당히 제안적입니다.
1 2 3 4 5 6 7 8 | public ActionResult ChartImage() { Chart chart = new Chart(400, 200, ChartTheme.Blue) .AddTitle( "Price enquiries" ) .DataBindTable(data, "X" ); chart.Write( "png" ); return null ; } |
References
- MSDN - Chart Controls:
http://msdn.microsoft.com/en-us/library/dd456632%28v=vs.110%29.aspx - ScottGu's Blog - New ASP.NET Charting Control:
http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx - MSDN - ChartTypes:
http://msdn.microsoft.com/en-us/library/dd489233%28v=vs.110%29.aspx - MSDN - Chart Class:
http://msdn.microsoft.com/en-us/library/system.web.helpers.chart%28v=vs.111%29.aspx - Guide - How to use ASP.NET Chart Controls with ASP.NET MVC :
http://blogin.codeinside.eu/2008/11/27/howto-use-the-new-aspnet-chart-controls-with-aspnet-mvc/ - Microsoft - Samples and documents:
http://archive.msdn.microsoft.com/mschart/Release/ProjectReleases.aspx?ReleaseId=4418
'WEB' 카테고리의 다른 글
[Javascript] 페이지를 떠날 때 경고창 띄우기 (1) | 2014.03.19 |
---|---|
[ASP.NET MVC] Custom Validation Message (0) | 2014.03.19 |
[ASP.NET MVC] Decimal Validation에서 콤마 오류 (0) | 2013.09.05 |
[ASP.NET MVC] Partial, RenderPartial, RenderPage (0) | 2013.07.22 |
[WEB] 403 Forbidden (0) | 2013.05.31 |