MS-Chart Demo
# 3) .Net ( Vs 2008 )/C#2010. 11. 5. 20:33
훈스 닷넷에 올라온 챠트관련 질문에 답글을 달았다.
챠트 구현보다 설치하는 시간이 더 걸린...
나름 단순하면서 깔끔해보인다.
챠트 설치 파일 검색에서 챠트를 잘 정리해둔 블로그가 있어서
챠트설치파일 링크만 써봤음...
http://six605.tistory.com/431?srchid=BR1http%3A%2F%2Fsix605.tistory.com%2F431
완성된 챠트입니다.
아래 보시면 LINQ를 이용해서 새로운 테이블을 만든것을 볼수 있는데요
[YM] , [CNT1], [CNT2]
[년도] [홍 ] [이 ]
위같은 형태로 바꾸었습니다. 이쿼리는 원래 DB에서 하시는게 더 쉽게 만들수 있고요.
보시다싶이 씨리즈에 Y 멤버로 Cnt1, Cnt2로 각각 부여하면 챠트는 알아서 그려줍니다.
나머지 꾸미는 건 찾아보시면서 하시면 되겠네요 ^^;
아참 챠트가 Bar(Column) 형태인데요. 이건 챠트 타입을 바꿔주시면 됩니다.
수고하세요.
== 이하 소스입니다. ==
public Form1()
{
InitializeComponent();
DataTable dt = new DataTable();
dt.Columns.Add("YM");
dt.Columns.Add("ID");
dt.Columns.Add("CNT", typeof( double ));
dt.Rows.Add("2010-10", "홍", 4d);
dt.Rows.Add("2010-10", "홍", 3d);
dt.Rows.Add("2010-10", "이", 1d);
dt.Rows.Add("2010-09", "홍", 2d);
dt.Rows.Add("2010-09", "이", 5d);
var tmp2 = from k in dt.AsEnumerable()
group k by k.Field<string>("YM") into t
select new
{
Key = t.Key,
CNT1 = (from h in t
where h.Field<string>("ID") == "홍"
select Convert.ToDouble(h.Field<object>("CNT"))).Sum(),
CNT2 = (from h in t
where h.Field<string>("ID") == "이"
select Convert.ToDouble(h.Field<object>("CNT"))).Sum()
};
DataTable source = new DataTable();
source.Columns.Add("YM");
source.Columns.Add("CNT1");
source.Columns.Add("CNT2");
foreach (var item in tmp2)
{
source.Rows.Add(item.Key, item.CNT1, item.CNT2);
}
chart1.Series.Clear();
var tt = dt.AsEnumerable().Select(title => title.Field<string>("ID")).Distinct<string>();
foreach (var item in tt)
{
chart1.Series.Add(item);
}
chart1.DataSource = source;
chart1.ChartAreas[0].AxisX.Title = "년도";
int cnt = 1;
foreach (var item in chart1.Series)
{
item.AxisLabel = "접속 카운트";
item.XValueMember = "YM";
item.YValueMembers = "CNT" + cnt.ToString();
cnt++;
}
}
챠트 구현보다 설치하는 시간이 더 걸린...
나름 단순하면서 깔끔해보인다.
챠트 설치 파일 검색에서 챠트를 잘 정리해둔 블로그가 있어서
챠트설치파일 링크만 써봤음...
http://six605.tistory.com/431?srchid=BR1http%3A%2F%2Fsix605.tistory.com%2F431
완성된 챠트입니다.
아래 보시면 LINQ를 이용해서 새로운 테이블을 만든것을 볼수 있는데요
[YM] , [CNT1], [CNT2]
[년도] [홍 ] [이 ]
위같은 형태로 바꾸었습니다. 이쿼리는 원래 DB에서 하시는게 더 쉽게 만들수 있고요.
보시다싶이 씨리즈에 Y 멤버로 Cnt1, Cnt2로 각각 부여하면 챠트는 알아서 그려줍니다.
나머지 꾸미는 건 찾아보시면서 하시면 되겠네요 ^^;
아참 챠트가 Bar(Column) 형태인데요. 이건 챠트 타입을 바꿔주시면 됩니다.
수고하세요.
== 이하 소스입니다. ==
public Form1()
{
InitializeComponent();
DataTable dt = new DataTable();
dt.Columns.Add("YM");
dt.Columns.Add("ID");
dt.Columns.Add("CNT", typeof( double ));
dt.Rows.Add("2010-10", "홍", 4d);
dt.Rows.Add("2010-10", "홍", 3d);
dt.Rows.Add("2010-10", "이", 1d);
dt.Rows.Add("2010-09", "홍", 2d);
dt.Rows.Add("2010-09", "이", 5d);
var tmp2 = from k in dt.AsEnumerable()
group k by k.Field<string>("YM") into t
select new
{
Key = t.Key,
CNT1 = (from h in t
where h.Field<string>("ID") == "홍"
select Convert.ToDouble(h.Field<object>("CNT"))).Sum(),
CNT2 = (from h in t
where h.Field<string>("ID") == "이"
select Convert.ToDouble(h.Field<object>("CNT"))).Sum()
};
DataTable source = new DataTable();
source.Columns.Add("YM");
source.Columns.Add("CNT1");
source.Columns.Add("CNT2");
foreach (var item in tmp2)
{
source.Rows.Add(item.Key, item.CNT1, item.CNT2);
}
chart1.Series.Clear();
var tt = dt.AsEnumerable().Select(title => title.Field<string>("ID")).Distinct<string>();
foreach (var item in tt)
{
chart1.Series.Add(item);
}
chart1.DataSource = source;
chart1.ChartAreas[0].AxisX.Title = "년도";
int cnt = 1;
foreach (var item in chart1.Series)
{
item.AxisLabel = "접속 카운트";
item.XValueMember = "YM";
item.YValueMembers = "CNT" + cnt.ToString();
cnt++;
}
}
'# 3) .Net ( Vs 2008 ) > C#' 카테고리의 다른 글
노트북 셋팅.. (0) | 2011.08.02 |
---|---|
[LINQ] group by 여러조건 넣기. (0) | 2010.11.08 |
포스트 잇 처럼 메모하는 레이아웃!! (0) | 2010.09.30 |
Ms Access 사용하기 예제소스. (0) | 2010.08.11 |
WebClient와 WebBrowser의 차이는?? (3) | 2010.07.30 |