퇴근5분전

훈스 닷넷에 올라온 챠트관련 질문에 답글을 달았다.

챠트 구현보다 설치하는 시간이 더 걸린...

나름 단순하면서 깔끔해보인다.

챠트 설치 파일 검색에서 챠트를 잘 정리해둔 블로그가 있어서

챠트설치파일 링크만 써봤음...
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++;
            }           
        }